java 高级特性
2018-06-29 10:38:50 0 举报
AI智能生成
java 高级,java 高级,java 高级
作者其他创作
大纲/内容
java高级特性
1.集合框架
Map
HashTable 和HashMap区别
HashTable 线程安全 HashMap线程不安全
HashMap key 可以存null 值 HashTable 不可以存null 运行时异常 编译能通过
增加for循环遍历 for (String key : map.keySet()) {\t\t\tString value = map.get(key);\t\t\tSystem.out.println(value);\t\t}
迭代器 遍历map Iterator iter = map.keySet().iterator();\t\twhile(iter.hasNext()){\t\t\tString key = (String)iter.next();\t\t\tSystem.out.println(key);\t\t\tString value =(String)map.get(key);\t\t\tSystem.out.println(value);\t\t}
Collection
Vector 和ArrayList 区别 Vector 线程安全 synchronized ArrayList线程不安全
HashSet 采用对象的equals()方法比较两个对象是否相等
Set set=new HashSet();String s1=new String(\"java\");String s2=s1;String s3=new String (\"java\");set.add(s1);set.add(s2);set.add(s3);System.out.println(set.size());
2.实用类
枚举 enum 用来存常量 是一种类型
包装类 Interger \t\tInteger.parseInt(\"6\");
String
String str=\"abc\";\t\tString str1 = new String(\"abc\");\t\tSystem.out.println(str==str1);//false\t\tSystem.out.println(str.equals(str1));//true
length();字符串长度
str.indexOf(\"a\
str.split(\
str.trim();//去空格
str.equalsIgnoreCase(\"\");//忽略大小写
str.toLowerCase();//小写
str.toUpperCase();//大写
str.replace(\"oldChar\
StringBuffer String StringBuilder String是不可变对象 final 类 对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率StringBuffer 线程安全 StringBuilder 线程不安全
Date
// 创建日期对象\t\tDate date = new Date();\t\t// 定制日期格式\t\tSimpleDateFormat formater = new SimpleDateFormat(\"yyyy- MM-dd HH:mm:ss\");\t\t//format把data类型转换成String类型\t\tString now = formater.format(date);\t\t//parse把String类型转换成Date类型\t\tdate = formater.parse(\"2017-06-08 12:00:00\");
Calendar 日历类
abstract 抽象类 \tCalendar calendar = Calendar.getInstance();\t\tcalendar.get(Calendar.DATE);
3.File IO
字节流和字符流相互转换 可以解决乱码问题
FileInputStream file = new FileInputStream(\"D:\\\\aaa\\\\aaa.txt\
字符流 所有的字符流都继承Reader Wirter
FileReader BufferedReader
子类 FileInputStream DataInputStream
拷贝 不需要读取文件内容是 用字节流\tFileInputStream input = new FileInputStream(\"D:\\\\aaa\\\\tuzideng1.jpg\");\t\tDataInputStream finput = new DataInputStream(input);\t\tFileOutputStream out = new FileOutputStream(\"D:\\\\aaa\\\\tuzideng2.jpg\");\t\tDataOutputStream fout = new DataOutputStream(out);\t\t//缓存\t\tbyte[] bytes = new byte[1024];\t\twhile (finput.read(bytes) != -1) {\t\t\tfout.write(bytes);\t\t}\t\tfinput.close();\t\tfout.close();
File类常用方法
boolean exists( ) 判断文件或目录是否存在
boolean isFile( )
boolean isDirectory( )
String getPath( )
String getAbsolutePath( )
String getName( )
boolean delete( )
boolean createNewFile( )
long length()
mkdirs()
反射机制
反射机制是指在运行状态中,动态的获取信息以及动态调用对象方法的功能
Java反射机制提供如下功能:
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判段任意一个类所具有的成员变量和方法
在运行时调用任一个对象的方法
反射的基本应用
1.获得Class对象
//第一种方式: Class c1 = Class.forName(\"demo.Student\");
//第二种方式: //java中每个类型都有class 属性. Class c2 = Student.class;
//第三种方式: //java语言中任何一个java对象都有getClass 方法 Student stu = new Student(); Class c3 = stu.getClass(); //c3是运行时类
2.判断是否为某个类的实例
\tStudent stu = new Student();\t\tStudent.class.isInstance(stu);
3.创建实例
1使用Class对象的newInstance()方法来创建Class对象对应类的实例。Class c1 = Student.class;\t\tObject obj = c1.newInstance();\t\tStudent stu = (Student)obj;
2先通过Class对象获取指定的Constructor对象,来创建实例。这种方法可以用指定的构造器构造类的实例。
4.获取方法
5.获取构造器信息
6.获取类的成员变量(字段)信息
7.调用方法
8.利用反射创建数组
多线程
Java中创建线程的两种方式
继承java.lang.Thread类
\t// 重写run()方法\tpublic void run() {\t\tfor (int i = 1; i < 100; i++) {\t\t\tSystem.out.println(Thread.currentThread().getName() + \":\" + i);\t\t}\t}\tpublic static void main(String[] args) {\t\tMyThread thread = new MyThread();\t\tthread.start(); // 启动线程}\t}
实现java.lang.Runnable接口
public class MyRunnable implements Runnable {\tpublic void run() {\t\tfor (int i = 1; i < 100; i++) {\t\t\tSystem.out.println(Thread.currentThread().getName() + \":\" + i);\t\t}\t}\tpublic static void main(String[] args) {\t\tMyRunnable myRunnable = new MyRunnable();\t\tThread myThread = new Thread(myRunnable);\t\tmyThread.start(); // 启动线程}\t}}
线程的状态
线程调度方法
setPriority(int newPriority)\t更改线程的优先级
线程优先级由1~10表示,1最低,默认优先级为5优先级高的线程获得CPU资源的概率较大
public class MyThread extends Thread {\t// 重写run()方法\tpublic void run() {\t\tfor (int i = 1; i < 100; i++) {\t\t\tSystem.out.println(Thread.currentThread().getName() + \":\
static void sleep(long millis)\t在指定的毫秒数内让当前正在执行的线程休眠
让线程暂时睡眠指定时长,线程进入阻塞状态睡眠时间过后线程会再进入可运行状态
public class Wait {\tpublic static void bySec(long s) {\t\tfor (int i = 0; i < s; i++) {\t\t\tSystem.out.println(i + 1 + \"秒\");\t\t\ttry {\t\t\t\tThread.sleep(1000);\t\t\t} catch (InterruptedException e) {\t\t\t\te.printStackTrace();\t\t\t}\t\t}\t}}
void join()\t等待该线程终止
使当前线程暂停执行,等待其他线程结束后再继续执行本线程
public class MyThread implements Runnable {\tpublic void run() {\t\tfor (int i = 0; i < 10; i++) {\t\t\ttry {\t\t\t\tThread.sleep(100);\t\t\t} catch (InterruptedException e) {\t\t\t\t// TODO Auto-generated catch block\t\t\t\te.printStackTrace();\t\t\t}\t\t\t// 输出当前线程的信息\t\t\tSystem.out.println(Thread.currentThread().getName() + \"运行:\" + i);\t\t}\t}\tpublic static void main(String[] args) {\t\tSystem.out.println(\"*****线程强制执行******\");\t\t// 创建子线程并启动\t\tThread temp = new Thread(new MyThread());\t\ttemp.start();\t\tfor (int i = 0; i < 20; i++) {\t\t\tif (i == 5) {\t\t\t\ttry {\t\t\t\t\t// 阻塞主线程,子线程强制执行\t\t\t\t\ttemp.join();\t\t\t\t} catch (InterruptedException e) {\t\t\t\t\te.printStackTrace();\t\t\t\t}\t\t\t}\t\t\ttry {\t\t\t\tThread.sleep(100);\t\t\t} catch (InterruptedException e) {\t\t\t\t// TODO Auto-generated catch block\t\t\t\te.printStackTrace();\t\t\t}\t\t\tSystem.out.println(Thread.currentThread().getName() + \"运行:\" + i);\t\t}\t}}
static void yield()\t暂停当前正在执行的线程对象,并执行其他线程
暂停当前线程,允许其他具有相同优先级的线程获得运行机会该线程处于就绪状态,不转为阻塞状态只是提供一种可能,但是不能保证一定会实现礼让
public class MyThread implements Runnable {\tpublic void run() {\t\tfor (int i = 0; i < 5; i++) {\t\t\tSystem.out.println(Thread.currentThread().getName() + \"正在运行:\" + i);\t\t\tif (i == 3) {\t\t\t\tSystem.out.print(\"线程礼让:\
void interrupt()\t中断线程
boolean isAlive()\t测试线程是否处于活动状态
线程通信方法
wait() 调用wait()方法会挂起当前线程,并释放共享资源的锁
notify() 调用任意对象的notify()方法会在因调用该对象的wait()方法而阻塞的线程中随机选择一个线程解除阻塞,但要等到获得锁后才可真正执行
notifyAll() 调用了notifyAll()方法会将调用该对象的wait()方法而阻塞的所有线程一次性全部解除阻塞
线程同步方法synchronized
就是为当前的线程声明一个锁使用synchronized修饰的方法控制对类成员变量的访问
访问修饰符 synchronized 返回类型 方法名(参数列表){……} 或者synchronized 访问修饰符 返回类型 方法名(参数列表){……}
使用synchronized关键字修饰的代码块
synchronized(syncObject){ //需要同步的代码}
java网络编程
Socket
基于TCP协议的Socket网络通信用来实现双向安全连接网络通信进行网络通信时,Socket需要借助数据流来完成数据的传递工作
客户端
服务端
public class ServerLogin {\tpublic static void main(String[] args) {\t\t//1.创建一个ServerSocket对象 指定端口号\t\ttry {\t\t\tServerSocket serversocket = new ServerSocket(8000);\t\t\t//2.监听客户端请求\t\t\tSocket socket = serversocket.accept();\t\t\t//3.打开输入流,处理用户请求\t\t\tInputStream is = socket.getInputStream();\t\t\t\tOutputStream os = socket.getOutputStream();\t\t\tBufferedReader reader = new BufferedReader(new InputStreamReader(is));\t\t\tString info = null;\t\t\twhile((info=reader.readLine())!=null){\t\t\t\tSystem.out.println(\"我是服务器,客户端信息为:\"+info);\t\t\t}\t\t\tsocket.shutdownInput();\t\t\t//服务器给客户端一个响应\t\t\t\t\t\t//1.打开输出流,发送数据\t\t\t\t\t\t\tinfo = \"欢迎您,登录成功!\";\t\t\tos.write(info.getBytes());\t\t\t//4.关闭资源\t\t\treader.close();\t\t\tis.close();\t\t\tos.close();\t\t\tsocket.close();\t\t\tserversocket.close();\t\t\t\t\t} catch (IOException e) {\t\t\t// TODO Auto-generated catch block\t\t\te.printStackTrace();\t\t}\t\t\t\t\t\t\t}}
http
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。
xml
DOM
基于XML文档树结构的解析适用于多次访问的XML文档特点:比较消耗资源
读取dom
DocumentBuilderFactory bf = DocumentBuilderFactory.newInstance();\t\tDocumentBuilder db = bf.newDocumentBuilder();\t\tDocument doc = db.parse(\"src/phones.xml\");
读取节点的属性,和文本
NodeList brandList = doc.getElementsByTagName(\"Brand\");\t\tfor (int i = 0; i < brandList.getLength(); i++) {\t\t\tNode brand = brandList.item(i);\t\t\tElement element = (Element) brand;\t\t\tString attrValue = element.getAttribute(\"name\");\t\t\tNodeList types = element.getChildNodes();\t\t\tSystem.out.println(types.getLength());\t\t\tfor (int j = 0; j < types.getLength(); j++) {\t\t\t\tif (types.item(j).getNodeType() == 1) {\t\t\t\t\tElement typeElement = (Element) types.item(j);\t\t\t\t\tString type = typeElement.getTextContent();\t\t\t\t\tSystem.out.println(\"手机:\" + attrValue + type);\t\t\t\t}\t\t\t}\t\t}
创建节点,属性,文本
Element brandElement = doc.createElement(\"Brand\");\t\tbrandElement.setAttribute(\"name\
保存xml
DOM4J
非常优秀的Java XML API性能优异、功能强大开放源代码
SAXReader saxReader = new SAXReader();\t\tDocument document = saxReader.read(\"NewFile.xml\");
Element root =document.getRootElement();\t\tList<Element> brandList = root.elements();\t\tfor(Element brand:brandList) {\t\t\tAttribute attr=\tbrand.attribute(\"name\");\t\t\tSystem.out.println(attr.getValue());\t\t\tList<Element> typeList = brand.elements();\t\t\tfor(Element type:typeList) {\t\t\t\tSystem.out.println(type.getText());\t\t\t}\t\t}
Element newBrand = root.addElement(\"Brand\");\t\t newBrand.addAttribute(\"name\
OutputFormat format =OutputFormat.createCompactFormat();\t\tformat.setEncoding(\"gb2312\");\t\tFileWriter file = new FileWriter(\"phones2.xml\
0 条评论
下一页