Java高级
2015-12-11 23:26
489 查看
[b]Java高级[/b]
集合框架和泛型
1.定义
集合框架用于存储一组长度不定的元素。//解决java中数组长度为固定不能改变的不足。
2.常用的接口和类
接口:Collection、List、Set、Map、Iterator
类:ArrayList、LinkedList、HashSet、HashMap
与数组对比的记忆,都需要实现新增加一个对象,修改指定对象的值,删除一个指定对象的值,查询对象的值以及遍历整个数组。
3.使用特点
List:存储的元素不唯一、有序。
Set:存储的元素唯一、无序。
Map:元素以键值对的方式进行存储。//存在映射索引的关系,其中key是set型,value是collection型。
4.ArrayList和LinkedList的区别
ArrayList:查找元素速度快,性能高;但是不适合频繁的对集合元素进行插入、修改、删除。
LinkedList:在频繁对集合元素进行插入、修改、删除时效率高,速度快;但是查找速度不如ArrayList。
//因为ArrarList里面是一排排的数据存放,删除一个后需要有一个重新排序的计算,而LinkedList是链表,内部之间彼此连接,其删除后不需要重新排序,所以效率更高。
5.集合常用方法:
²List:
add(Objectobj)、remove(Objectobj)、remove(intindex)、size()、get(intindex)、iterator()、clear()
//注意里面add,remove等方法的重写,使用的场合不一样。
²Set:
add(Objectobj)、remove(Objectobj)、size()、iterator()、clear()
²Map:
put(Objectkey,Objectvalue)、get(Objectkey)、keySet()、values()、size()、remove(Objectkey)、clear()
//Collections类中有个compareTo()以及fill()方法。
泛型:定义什么类型,就使用的什么类型。先定义类型,再进行输入,输出操作。相当于实现了数组中的存放一组固定类型的目的,将之前的object转化为自己想要的类型。
实用类
1.枚举
定义
一组固定的常量。
语法
用法
声明枚举变量并赋值:Seasonseason=Season.Spring;
switch:
2.包装类
值类型(基本数据类型)都存在一个对应的包装类。
int->Integer、double->Double、boolean->Boolean、char->Charactor、……
值类型和包装类的相互转换
拆箱和装箱
拆箱:将包装类转换为基本数值类型;
装箱:将数值类型转化为包装类。
3.Math类
Math类的作用
提供一系列与科学计算相关的方法。
常用方法:random()、floor()、ceil()、max()、min()、round()
//详细的使用方法可以参考javaAPI文档。记住需要实现数学运算的时候,用Math.调用方法(其都为静态方法)。
Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
4.String类
常用的方法:substring()、indexOf()、lastIndexOf()、replace、split、length()、trim()
//String类是操作最多的类,其方法很多,需要参考javaAPI文档
//当然还有一些方法,实际使用的时候需要查看API去,遇到问题先思考,再查找资料,做不出来就百度,然后就是请教其他人。
5.Random类
作用:生成随机数。只要知道
常用方法:nextInt()、nextInt(int)、nextDouble()、nextXXX()
6.日期时间类
²Date
在类Date所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:年份y由整数y-1900表示,月份使用M由0~11的整数,日期使用d由1~31的整数,小时使用H由0~23的整数表示,分钟使用m由0~59的整数表示,秒使用s,由0~61的整数表示。
在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为1月32日,并把它解释为2月1日的相同含义。
语法:Datedate=newData();获取当前的时间。
²Calendar为抽象类,通过静态方法
Calendarcalendar=Calendar.
²SimpleDateFormat
需要按照指定的格式输出的日期,才能让人看得懂,也能符合人们日常的生活习惯。
你需要输出不同的格式,就在建立的时候,输入不同的参数,一般就是yyyy-MM-ddHH:mm:ss
SimpleDateFormatformater=newSimpleDateFormat(“设置的时间输出格式”);
formater.format(“Date对象”);
format(Datedate,StringBuffertoAppendTo,FieldPositionpos)
将给定的Date格式化为日期/时间字符串,并将结果添加到给定的StringBuffer。
输出输出
包:java.io
File类
功能:除了读写之外的其他对文件/文件夹的操作。
常用的方法:
//还有一些其他的设置只读,隐藏等熟悉的方法,参考API。
1.流的分类
²根据方向分类:
输入:InputStream、Reader
输出:OutputStream、Writer
²根据内容分类:
字节流:InputStream、OutputStream
字符流:Reader、Writer
实现类
序列化和反序列化
文件读写的一般操作思路:
1.先通过File找到需要读写的对象,通过创建,或者指定的路径,创建一个File对象,路径指向需要读写的文件
2.如果是读,就需要看文件是文本文件还是二进制文件
文本文件:先记住字节型,字符型的基础也是字节型。
InputStreaminput=newFileInputStream(file);
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
input.read(text);//读取操作
input.close();//然后关闭即可。
二进制文件:
InputStreaminput=newFileInputStream(file);
DataInputStreamdinput=newDataInputStream(input);
/*对于文件比较小的时候,可以使用此种方法
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
dinput.read(text);//读取操作
*/
byte[]text=newbyte[1024];//一般读取大的文件,需要分多次读取,就通过循环实现读取。
intcount=dinput.read(text);
while(count!=-1){
count=dinput.read(text,0,count);
}
input.close();
dinput.close();//然后关闭即可。
序列化文件:
就是将DataInputStream更换成ObjectDataInputStream,方法换成readObject()即可。
3.如果是写,就需要看文件是文本文件还是二进制文件
文本文件:先记住字节型,字符型的基础也是字节型。
先得到一个byte的数组,一般有String里面getBytes()的方法。
OUTputStreamoutput=newFileOutputStream(file);
Stringstr=“********”;
byte[]text=Str.getBytes();//创建读取接受的字节数组
input.write(text);//读取操作
input.close();//然后关闭即可。
二进制文件:
OutputStreamoutnput=newFileOutputStream(file);
DataOutputStreamdoutput=newDataOutputStream(input);
//无论如何一定要先得到一个字节的数组,放到内存中可以是边读边写,例如拷贝。
byte[]text=******;
doutput.write(text);
/*对于文件比较小的时候,可以使用此种方法
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
dinput.read(text);//读取操作
*/
output.close();
doutput.close();//然后关闭即可。
序列化文件:
就是将DataOutputStream更换成ObjectDataOutputStream,方法换成writeObject()即可。
序列化和反序列化的对象必须使用Serializable接口,否则读写的过程就报错。
4.小结
读写操作是软件的基本功能之一,是后续XML技术的基础,对需要找到需要更改的对象,然后通过read或write的方法对文件进行修改,修改后再保存到本机磁盘。是实现动态存储信息持续化的基础。只要知道如何实现何种功能即可,具体的情况需要查看不同的帮助文件,实现最优。
多线程
1.进程和线程的区别
进程:一个独立的运算程序;
线程:CPU计算的最小单元,就是一个独立计算的片段,其属于进程的一部分。
2.Java中使用线程的步骤
a.定义线程;b.启动线程;c.执行线程;d.关闭线程。
3.Java中定义线程的2中方式
(1)继承Thread类,实现其run方法//extendsThread
(2)使用Runnable接口//implementsRunnable
在类中定义run的方法,也就是要执行的一些代码,通过类的对象,调用start()方法,就开始线程的执行,以及Thread.sleep()可以定义当前类主进行main()方法休眠的时间。
系统默认会运行java中的mian()方法,mian方法里面就可以启动其他的线程,提高程序的运行效率。
4.线程的优先级
通过setPriority(intgrade);设置一个线程的优先级别,其值为1~10之间,10表示优先级别最高。
优先级别高,优先被执行的概率高。
5.线程的生命周期
新生,被创建的时候;
可运行,start启动后;
阻塞,没有得到时间片的休眠状态
死亡,就是运行完毕,也或者是stop()方法被执行。一般自动运行完了就死亡了,不用刻意的管理。
6.线程的同步
哪里需要争夺资源,就在哪个方法前面加上synchronized的关键字。为了防止同时修改一个内存地址的数据,出现意想不到的问题。
7.线程常用方法
线程越多,程序运行的越快,但是主程序是由运行最慢的那个程序所花费的时间决定的,因此对于大的运算的数据或计算,为了提高效率,尽量将其拆分为多个线程同步运算,这样就提高程序等待的时间。
从客户体验的角度,程序开发做到以下三点,客户自然就会增加:
别让我等;别让我想;别让我烦。
所以多线程技术对于程序开发十分的重要,能够减少客户等待的时间,从而提高效率。
网络编程
1.IP地址
设计与查看dos里面的ping&ipconfig/allcommand
IP的三类,A类1~126,B类128~191,C类192~223
地址是4个8位的二进制。值为0~255之间的数据。
2.C/S的信息传输
先有服务器Server:
通过SocketSrever创建一个服务器对象,在构造方法的时候,加入端口值。
调用accept();实现监听。
再有客户Customer:
通过Socket创建一个客户对象,在构造方法的时候,输入服务器的ip地址,以及端口值。
传输文件同第三章的I/O操作一样,都是创建流,
然后通过getInputStream()/getOutputStream()实现输入与输出
3.UDP
UDP传输不可靠,但是比较适合一些广播,UDP的里面先打包,再通过send()/receive()方法传输数据。
XML操作
1.XML的基础信息
1.1定义以及作用:
用于数据存储以及数据交换或显示的一种可扩展标记语言(EXtensibleMarkupLanguage)。广泛用于数据库和程序之间数据的交换。XML标签没有被预定义。您需要自行定义标签。
1.2xml文档的组成
a.申明标记<?xmlversion=”1.0”encoding=”UTF-8”?>
b.标签元素
c.嵌套关系需要正确,不能越级必须一一对应。
d.元素的名称与之前类的名称的要求类似
e.特殊字符需要处理
1.3DTD
为了规范xml文档,使其标准化,方便协调用以及后续数据数据为维护。
2.DOM对XML文件的操作
2.1主要步骤
//得到document
建立解析器工程:DocumentBuilderFactory静态方法:.newInstance();
建立解析器:DocumentBuilder解析器工厂对象的方法:.newDocumentBuilder
解析得到document:解析器对象的方法:.parse(“文件路径”);
调用document中的一些方法,就可以得到你所需要的内容。
//
2.2主要方法
//获得根目录getDocumentElement();
//获得标签的列表对象getElementsByTagName(Stringname)输入标签的值,区分大小写
//获得子对象getChildNodes();
//获得兄弟对象getgetNextSibling();/getPreviousSibling();
//获得文本内容getTextContent();
//获得属性内容getAttribute(Stringname)
//删除一个节点Noderemove()removeAttributeNode(AttroldAttr);removeChild(NodeoldChild)
//增加一个节点appendChild(NodenewChild)
//修改一个节点的属性setAttribute(Stringname,Stringvalue)
removeAttribute(Stringname)
setAttributeNS(StringnamespaceURI,StringqualifiedName,Stringvalue)
//记得保存包括关闭其中的流。
DOM4J对XML文件的操作
DOM4J相当于java中DOM的外挂,第三方插件。步骤一样,但是方法简单很多,特别是Xpath的技术支持,极大的提高的索引效率。
遍历列表可以继续筛选
//创建添加对象
//保存到本地文件中
//需要设定格式的时候,可以参考下面的代码
Java高级
集合框架和泛型
1.定义
集合框架用于存储一组长度不定的元素。//解决java中数组长度为固定不能改变的不足。
2.常用的接口和类
接口:Collection、List、Set、Map、Iterator
类:ArrayList、LinkedList、HashSet、HashMap
与数组对比的记忆,都需要实现新增加一个对象,修改指定对象的值,删除一个指定对象的值,查询对象的值以及遍历整个数组。
3.使用特点
List:存储的元素不唯一、有序。
Set:存储的元素唯一、无序。
Map:元素以键值对的方式进行存储。//存在映射索引的关系,其中key是set型,value是collection型。
4.ArrayList和LinkedList的区别
ArrayList:查找元素速度快,性能高;但是不适合频繁的对集合元素进行插入、修改、删除。
LinkedList:在频繁对集合元素进行插入、修改、删除时效率高,速度快;但是查找速度不如ArrayList。
//因为ArrarList里面是一排排的数据存放,删除一个后需要有一个重新排序的计算,而LinkedList是链表,内部之间彼此连接,其删除后不需要重新排序,所以效率更高。
5.集合常用方法:
²List:
add(Objectobj)、remove(Objectobj)、remove(intindex)、size()、get(intindex)、iterator()、clear()
//注意里面add,remove等方法的重写,使用的场合不一样。
²Set:
add(Objectobj)、remove(Objectobj)、size()、iterator()、clear()
²Map:
put(Objectkey,Objectvalue)、get(Objectkey)、keySet()、values()、size()、remove(Objectkey)、clear()
//Collections类中有个compareTo()以及fill()方法。
泛型:定义什么类型,就使用的什么类型。先定义类型,再进行输入,输出操作。相当于实现了数组中的存放一组固定类型的目的,将之前的object转化为自己想要的类型。
实用类
1.枚举
定义
一组固定的常量。
语法
用法
声明枚举变量并赋值:Seasonseason=Season.Spring;
switch:
2.包装类
值类型(基本数据类型)都存在一个对应的包装类。
int->Integer、double->Double、boolean->Boolean、char->Charactor、……
值类型和包装类的相互转换
拆箱和装箱
拆箱:将包装类转换为基本数值类型;
装箱:将数值类型转化为包装类。
3.Math类
Math类的作用
提供一系列与科学计算相关的方法。
常用方法:random()、floor()、ceil()、max()、min()、round()
//详细的使用方法可以参考javaAPI文档。记住需要实现数学运算的时候,用Math.调用方法(其都为静态方法)。
Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
4.String类
常用的方法:substring()、indexOf()、lastIndexOf()、replace、split、length()、trim()
//String类是操作最多的类,其方法很多,需要参考javaAPI文档
//当然还有一些方法,实际使用的时候需要查看API去,遇到问题先思考,再查找资料,做不出来就百度,然后就是请教其他人。
5.Random类
作用:生成随机数。只要知道
常用方法:nextInt()、nextInt(int)、nextDouble()、nextXXX()
6.日期时间类
²Date
在类Date所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:年份y由整数y-1900表示,月份使用M由0~11的整数,日期使用d由1~31的整数,小时使用H由0~23的整数表示,分钟使用m由0~59的整数表示,秒使用s,由0~61的整数表示。
在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为1月32日,并把它解释为2月1日的相同含义。
语法:Datedate=newData();获取当前的时间。
²Calendar为抽象类,通过静态方法
Calendarcalendar=Calendar.
²SimpleDateFormat
需要按照指定的格式输出的日期,才能让人看得懂,也能符合人们日常的生活习惯。
你需要输出不同的格式,就在建立的时候,输入不同的参数,一般就是yyyy-MM-ddHH:mm:ss
SimpleDateFormatformater=newSimpleDateFormat(“设置的时间输出格式”);
formater.format(“Date对象”);
format(Datedate,StringBuffertoAppendTo,FieldPositionpos)
将给定的Date格式化为日期/时间字符串,并将结果添加到给定的StringBuffer。
输出输出
包:java.io
File类
功能:除了读写之外的其他对文件/文件夹的操作。
常用的方法:
//还有一些其他的设置只读,隐藏等熟悉的方法,参考API。
1.流的分类
²根据方向分类:
输入:InputStream、Reader
输出:OutputStream、Writer
²根据内容分类:
字节流:InputStream、OutputStream
字符流:Reader、Writer
实现类
序列化和反序列化
文件读写的一般操作思路:
1.先通过File找到需要读写的对象,通过创建,或者指定的路径,创建一个File对象,路径指向需要读写的文件
2.如果是读,就需要看文件是文本文件还是二进制文件
文本文件:先记住字节型,字符型的基础也是字节型。
InputStreaminput=newFileInputStream(file);
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
input.read(text);//读取操作
input.close();//然后关闭即可。
二进制文件:
InputStreaminput=newFileInputStream(file);
DataInputStreamdinput=newDataInputStream(input);
/*对于文件比较小的时候,可以使用此种方法
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
dinput.read(text);//读取操作
*/
byte[]text=newbyte[1024];//一般读取大的文件,需要分多次读取,就通过循环实现读取。
intcount=dinput.read(text);
while(count!=-1){
count=dinput.read(text,0,count);
}
input.close();
dinput.close();//然后关闭即可。
序列化文件:
就是将DataInputStream更换成ObjectDataInputStream,方法换成readObject()即可。
3.如果是写,就需要看文件是文本文件还是二进制文件
文本文件:先记住字节型,字符型的基础也是字节型。
先得到一个byte的数组,一般有String里面getBytes()的方法。
OUTputStreamoutput=newFileOutputStream(file);
Stringstr=“********”;
byte[]text=Str.getBytes();//创建读取接受的字节数组
input.write(text);//读取操作
input.close();//然后关闭即可。
二进制文件:
OutputStreamoutnput=newFileOutputStream(file);
DataOutputStreamdoutput=newDataOutputStream(input);
//无论如何一定要先得到一个字节的数组,放到内存中可以是边读边写,例如拷贝。
byte[]text=******;
doutput.write(text);
/*对于文件比较小的时候,可以使用此种方法
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
dinput.read(text);//读取操作
*/
output.close();
doutput.close();//然后关闭即可。
序列化文件:
就是将DataOutputStream更换成ObjectDataOutputStream,方法换成writeObject()即可。
序列化和反序列化的对象必须使用Serializable接口,否则读写的过程就报错。
4.小结
读写操作是软件的基本功能之一,是后续XML技术的基础,对需要找到需要更改的对象,然后通过read或write的方法对文件进行修改,修改后再保存到本机磁盘。是实现动态存储信息持续化的基础。只要知道如何实现何种功能即可,具体的情况需要查看不同的帮助文件,实现最优。
多线程
1.进程和线程的区别
进程:一个独立的运算程序;
线程:CPU计算的最小单元,就是一个独立计算的片段,其属于进程的一部分。
2.Java中使用线程的步骤
a.定义线程;b.启动线程;c.执行线程;d.关闭线程。
3.Java中定义线程的2中方式
(1)继承Thread类,实现其run方法//extendsThread
(2)使用Runnable接口//implementsRunnable
在类中定义run的方法,也就是要执行的一些代码,通过类的对象,调用start()方法,就开始线程的执行,以及Thread.sleep()可以定义当前类主进行main()方法休眠的时间。
系统默认会运行java中的mian()方法,mian方法里面就可以启动其他的线程,提高程序的运行效率。
4.线程的优先级
通过setPriority(intgrade);设置一个线程的优先级别,其值为1~10之间,10表示优先级别最高。
优先级别高,优先被执行的概率高。
5.线程的生命周期
新生,被创建的时候;
可运行,start启动后;
阻塞,没有得到时间片的休眠状态
死亡,就是运行完毕,也或者是stop()方法被执行。一般自动运行完了就死亡了,不用刻意的管理。
6.线程的同步
哪里需要争夺资源,就在哪个方法前面加上synchronized的关键字。为了防止同时修改一个内存地址的数据,出现意想不到的问题。
7.线程常用方法
线程越多,程序运行的越快,但是主程序是由运行最慢的那个程序所花费的时间决定的,因此对于大的运算的数据或计算,为了提高效率,尽量将其拆分为多个线程同步运算,这样就提高程序等待的时间。
从客户体验的角度,程序开发做到以下三点,客户自然就会增加:
别让我等;别让我想;别让我烦。
所以多线程技术对于程序开发十分的重要,能够减少客户等待的时间,从而提高效率。
网络编程
1.IP地址
设计与查看dos里面的ping&ipconfig/allcommand
IP的三类,A类1~126,B类128~191,C类192~223
地址是4个8位的二进制。值为0~255之间的数据。
2.C/S的信息传输
先有服务器Server:
通过SocketSrever创建一个服务器对象,在构造方法的时候,加入端口值。
调用accept();实现监听。
再有客户Customer:
通过Socket创建一个客户对象,在构造方法的时候,输入服务器的ip地址,以及端口值。
传输文件同第三章的I/O操作一样,都是创建流,
然后通过getInputStream()/getOutputStream()实现输入与输出
3.UDP
UDP传输不可靠,但是比较适合一些广播,UDP的里面先打包,再通过send()/receive()方法传输数据。
XML操作
1.XML的基础信息
1.1定义以及作用:
用于数据存储以及数据交换或显示的一种可扩展标记语言(EXtensibleMarkupLanguage)。广泛用于数据库和程序之间数据的交换。XML标签没有被预定义。您需要自行定义标签。
1.2xml文档的组成
a.申明标记<?xmlversion=”1.0”encoding=”UTF-8”?>
b.标签元素
c.嵌套关系需要正确,不能越级必须一一对应。
d.元素的名称与之前类的名称的要求类似
e.特殊字符需要处理
1.3DTD
为了规范xml文档,使其标准化,方便协调用以及后续数据数据为维护。
2.DOM对XML文件的操作
2.1主要步骤
//得到document
建立解析器工程:DocumentBuilderFactory静态方法:.newInstance();
建立解析器:DocumentBuilder解析器工厂对象的方法:.newDocumentBuilder
解析得到document:解析器对象的方法:.parse(“文件路径”);
调用document中的一些方法,就可以得到你所需要的内容。
//
2.2主要方法
//获得根目录getDocumentElement();
//获得标签的列表对象getElementsByTagName(Stringname)输入标签的值,区分大小写
//获得子对象getChildNodes();
//获得兄弟对象getgetNextSibling();/getPreviousSibling();
//获得文本内容getTextContent();
//获得属性内容getAttribute(Stringname)
//删除一个节点Noderemove()removeAttributeNode(AttroldAttr);removeChild(NodeoldChild)
//增加一个节点appendChild(NodenewChild)
//修改一个节点的属性setAttribute(Stringname,Stringvalue)
removeAttribute(Stringname)
setAttributeNS(StringnamespaceURI,StringqualifiedName,Stringvalue)
//记得保存包括关闭其中的流。
DOM4J对XML文件的操作
DOM4J相当于java中DOM的外挂,第三方插件。步骤一样,但是方法简单很多,特别是Xpath的技术支持,极大的提高的索引效率。
遍历列表可以继续筛选
//创建添加对象
//保存到本地文件中
//需要设定格式的时候,可以参考下面的代码
集合框架和泛型
1.定义
集合框架用于存储一组长度不定的元素。//解决java中数组长度为固定不能改变的不足。
2.常用的接口和类
接口:Collection、List、Set、Map、Iterator
类:ArrayList、LinkedList、HashSet、HashMap
与数组对比的记忆,都需要实现新增加一个对象,修改指定对象的值,删除一个指定对象的值,查询对象的值以及遍历整个数组。
3.使用特点
List:存储的元素不唯一、有序。
Set:存储的元素唯一、无序。
Map:元素以键值对的方式进行存储。//存在映射索引的关系,其中key是set型,value是collection型。
4.ArrayList和LinkedList的区别
ArrayList:查找元素速度快,性能高;但是不适合频繁的对集合元素进行插入、修改、删除。
LinkedList:在频繁对集合元素进行插入、修改、删除时效率高,速度快;但是查找速度不如ArrayList。
//因为ArrarList里面是一排排的数据存放,删除一个后需要有一个重新排序的计算,而LinkedList是链表,内部之间彼此连接,其删除后不需要重新排序,所以效率更高。
5.集合常用方法:
²List:
add(Objectobj)、remove(Objectobj)、remove(intindex)、size()、get(intindex)、iterator()、clear()
//注意里面add,remove等方法的重写,使用的场合不一样。
²Set:
add(Objectobj)、remove(Objectobj)、size()、iterator()、clear()
²Map:
put(Objectkey,Objectvalue)、get(Objectkey)、keySet()、values()、size()、remove(Objectkey)、clear()
//Collections类中有个compareTo()以及fill()方法。
泛型:定义什么类型,就使用的什么类型。先定义类型,再进行输入,输出操作。相当于实现了数组中的存放一组固定类型的目的,将之前的object转化为自己想要的类型。
实用类
1.枚举
定义
一组固定的常量。
语法
访问修饰符enum枚举名{ 常量一, 常量二, …… } |
声明枚举变量并赋值:Seasonseason=Season.Spring;
switch:
switch(枚举变量){//枚举变量:枚举名变量名 常量一: …… Break; 常量二: …… Break; } |
值类型(基本数据类型)都存在一个对应的包装类。
int->Integer、double->Double、boolean->Boolean、char->Charactor、……
值类型和包装类的相互转换
基本数据类型转换为包装类 | 包装类转换为基本数据类型 |
Doubledoub=newDouble(); 包装类名包装类对像名=new包装类名(参数值); 参数可以是数值型,也可以是字符串型“”。即实现数据类型的转化,将“5.5”转换为double类型的方法。 所有类型转化为String都有.toString()方法。 | DoubleShu33=newDouble("50.5"); doublea=Shu33.doubleValue(); 可以通过数值类型Value()将包装类转换为基本数值类型。 对于不同类型的返回一个数值类型的值,需要使用 parseDouble("66.5") 基本数据类型变量名称=包装对象.parse(包装名)(字符串); |
拆箱:将包装类转换为基本数值类型;
装箱:将数值类型转化为包装类。
3.Math类
Math类的作用
提供一系列与科学计算相关的方法。
常用方法:random()、floor()、ceil()、max()、min()、round()
//详细的使用方法可以参考javaAPI文档。记住需要实现数学运算的时候,用Math.调用方法(其都为静态方法)。
Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
ceil(doublea)返回最小的(最接近负无穷大)double值,该值大于等于参数,并等于某个整数。 |
double值,该值小于等于参数,并等于某个整数。 |
double值,该值大于等于 0.0且小于 1.0。一般获取随机值使用Random类。 |
常用的方法:substring()、indexOf()、lastIndexOf()、replace、split、length()、trim()
//String类是操作最多的类,其方法很多,需要参考javaAPI文档
构造方法: (byte[]bytes)可以通过字节的数组生产字符串,其他的可以参考API。 |
concat(Stringstr)将指定字符串连接到此字符串的结尾。其与“+”用法类似。 |
getBytes()使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。 |
split(Stringregex)根据给定正则表达式的匹配拆分此字符串。其中“*,?,|,^”等需要转义\\ |
substring(intbeginIndex,intendIndex)返回一个新字符串,它是此字符串的一个子字符串。截取字符串 |
trim()返回字符串的副本,忽略前导空白和尾部空白。 |
(intch)返回指定字符在此字符串中最后一次出现处的索引。//其有几种重写的方法。 |
indexOf(intch)返回指定字符在此字符串中第一次出现处的索引。//其有几种重写的方法。 |
length()返回此字符串的长度。 |
replace(charoldChar,charnewChar)返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。//进行修改,也有一些重写的方法,可以加一些参数。 |
5.Random类
作用:生成随机数。只要知道
常用方法:nextInt()、nextInt(int)、nextDouble()、nextXXX()
next (intbits)生成下一个伪随机数。这个方法的修饰符是protected外部不能使用。 |
返回一个伪随机数,它是取自此随机数生成器序列的、在0(包括)和指定值(不包括)之间均匀分布的int值。 |
返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的double值。 |
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的long值。 |
使用单个long种子设置此随机数生成器的种子。 |
²Date
在类Date所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:年份y由整数y-1900表示,月份使用M由0~11的整数,日期使用d由1~31的整数,小时使用H由0~23的整数表示,分钟使用m由0~59的整数表示,秒使用s,由0~61的整数表示。
在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为1月32日,并把它解释为2月1日的相同含义。
语法:Datedate=newData();获取当前的时间。
(
(测试此日期是否在指定日期之后/之前。//实现定时控制操作 |
compareTo(DateanotherDate)比较两个日期的顺序。 |
getInstance
()获得一个对象。
Calendarcalendar=Calendar.
getInstance
()
;
(intfield,intvalue)将给定的日历字段设置为给定值。 |
(intyear,intmonth,intdate)设置日历字段 YEAR、 MONTH和 DAY_OF_MONTH的值。//Set的方法重写,可以修改日期的年,月,日,小时,分钟,秒,时区等等操作 |
()返回一个表示此 Calendar时间值(从 Date对象 // 可以创建一个Data对象 |
(intfield)返回给定日历字段的值。 |
需要按照指定的格式输出的日期,才能让人看得懂,也能符合人们日常的生活习惯。
字母 | 日期或时间元素 | 表示 | 示例 |
G | Era标志符 | AD | |
y | 年 | 1996;96 | |
M | 年中的月份 | July;Jul;07 | |
w | 年中的周数 | 27 | |
W | 月份中的周数 | 2 | |
D | 年中的天数 | 189 | |
d | 月份中的天数 | 10 | |
F | 月份中的星期 | 2 | |
E | 星期中的天数 | Tuesday;Tue | |
a | Am/pm标记 | PM | |
H | 一天中的小时数(0-23) | 0 | |
k | 一天中的小时数(1-24) | 24 | |
K | am/pm中的小时数(0-11) | 0 | |
h | am/pm中的小时数(1-12) | 12 | |
m | 小时中的分钟数 | 30 | |
s | 分钟中的秒数 | 55 | |
S | 毫秒数 | 978 | |
z | 时区 | PacificStandardTime;PST;GMT-08:00 | |
Z | 时区 | -0800 |
SimpleDateFormatformater=newSimpleDateFormat(“设置的时间输出格式”);
formater.format(“Date对象”);
format(Datedate,StringBuffertoAppendTo,FieldPositionpos)
将给定的Date格式化为日期/时间字符串,并将结果添加到给定的StringBuffer。
输出输出
包:java.io
File类
功能:除了读写之外的其他对文件/文件夹的操作。
常用的方法:
构造方法: |
createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
()创建此抽象路径名指定的目录。 |
createTempFile(Stringprefix,Stringsuffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 |
delete()删除此抽象路径名表示的文件或目录。 |
exits()测试此抽象路径名表示的文件或目录是否存在。 |
()返回由此抽象路径名表示的文件或目录的名称。 |
()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 |
()测试此抽象路径名表示的文件是否是一个标准文件。 |
()测试此抽象路径名表示的文件是否是一个目录。 |
()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 |
()返回由此抽象路径名表示的文件的长度。 |
1.流的分类
²根据方向分类:
输入:InputStream、Reader
输出:OutputStream、Writer
²根据内容分类:
字节流:InputStream、OutputStream
字符流:Reader、Writer
实现类
(抽)InputStream | (抽)OutputStream | (抽)Reader | (抽)Writer |
FileInputStream | FileOutputStream | InputStreamReader | OutputStreamWriter |
DataInputStream | DataOutputStream | FileReader | FileWriter |
ObjectInputStream | ObjectOutputStream | BufferedReader | BufferedWriter |
文件读写的一般操作思路:
1.先通过File找到需要读写的对象,通过创建,或者指定的路径,创建一个File对象,路径指向需要读写的文件
2.如果是读,就需要看文件是文本文件还是二进制文件
文本文件:先记住字节型,字符型的基础也是字节型。
InputStreaminput=newFileInputStream(file);
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
input.read(text);//读取操作
input.close();//然后关闭即可。
二进制文件:
InputStreaminput=newFileInputStream(file);
DataInputStreamdinput=newDataInputStream(input);
/*对于文件比较小的时候,可以使用此种方法
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
dinput.read(text);//读取操作
*/
byte[]text=newbyte[1024];//一般读取大的文件,需要分多次读取,就通过循环实现读取。
intcount=dinput.read(text);
while(count!=-1){
count=dinput.read(text,0,count);
}
input.close();
dinput.close();//然后关闭即可。
序列化文件:
就是将DataInputStream更换成ObjectDataInputStream,方法换成readObject()即可。
3.如果是写,就需要看文件是文本文件还是二进制文件
文本文件:先记住字节型,字符型的基础也是字节型。
先得到一个byte的数组,一般有String里面getBytes()的方法。
OUTputStreamoutput=newFileOutputStream(file);
Stringstr=“********”;
byte[]text=Str.getBytes();//创建读取接受的字节数组
input.write(text);//读取操作
input.close();//然后关闭即可。
二进制文件:
OutputStreamoutnput=newFileOutputStream(file);
DataOutputStreamdoutput=newDataOutputStream(input);
//无论如何一定要先得到一个字节的数组,放到内存中可以是边读边写,例如拷贝。
byte[]text=******;
doutput.write(text);
/*对于文件比较小的时候,可以使用此种方法
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
dinput.read(text);//读取操作
*/
output.close();
doutput.close();//然后关闭即可。
序列化文件:
就是将DataOutputStream更换成ObjectDataOutputStream,方法换成writeObject()即可。
序列化和反序列化的对象必须使用Serializable接口,否则读写的过程就报错。
4.小结
读写操作是软件的基本功能之一,是后续XML技术的基础,对需要找到需要更改的对象,然后通过read或write的方法对文件进行修改,修改后再保存到本机磁盘。是实现动态存储信息持续化的基础。只要知道如何实现何种功能即可,具体的情况需要查看不同的帮助文件,实现最优。
多线程
1.进程和线程的区别
进程:一个独立的运算程序;
线程:CPU计算的最小单元,就是一个独立计算的片段,其属于进程的一部分。
2.Java中使用线程的步骤
a.定义线程;b.启动线程;c.执行线程;d.关闭线程。
3.Java中定义线程的2中方式
(1)继承Thread类,实现其run方法//extendsThread
(2)使用Runnable接口//implementsRunnable
在类中定义run的方法,也就是要执行的一些代码,通过类的对象,调用start()方法,就开始线程的执行,以及Thread.sleep()可以定义当前类主进行main()方法休眠的时间。
系统默认会运行java中的mian()方法,mian方法里面就可以启动其他的线程,提高程序的运行效率。
4.线程的优先级
通过setPriority(intgrade);设置一个线程的优先级别,其值为1~10之间,10表示优先级别最高。
优先级别高,优先被执行的概率高。
5.线程的生命周期
新生,被创建的时候;
可运行,start启动后;
阻塞,没有得到时间片的休眠状态
死亡,就是运行完毕,也或者是stop()方法被执行。一般自动运行完了就死亡了,不用刻意的管理。
6.线程的同步
哪里需要争夺资源,就在哪个方法前面加上synchronized的关键字。为了防止同时修改一个内存地址的数据,出现意想不到的问题。
7.线程常用方法
线程越多,程序运行的越快,但是主程序是由运行最慢的那个程序所花费的时间决定的,因此对于大的运算的数据或计算,为了提高效率,尽量将其拆分为多个线程同步运算,这样就提高程序等待的时间。
从客户体验的角度,程序开发做到以下三点,客户自然就会增加:
别让我等;别让我想;别让我烦。
所以多线程技术对于程序开发十分的重要,能够减少客户等待的时间,从而提高效率。
网络编程
1.IP地址
设计与查看dos里面的ping&ipconfig/allcommand
IP的三类,A类1~126,B类128~191,C类192~223
地址是4个8位的二进制。值为0~255之间的数据。
2.C/S的信息传输
先有服务器Server:
通过SocketSrever创建一个服务器对象,在构造方法的时候,加入端口值。
调用accept();实现监听。
再有客户Customer:
通过Socket创建一个客户对象,在构造方法的时候,输入服务器的ip地址,以及端口值。
传输文件同第三章的I/O操作一样,都是创建流,
然后通过getInputStream()/getOutputStream()实现输入与输出
3.UDP
UDP传输不可靠,但是比较适合一些广播,UDP的里面先打包,再通过send()/receive()方法传输数据。
XML操作
1.XML的基础信息
1.1定义以及作用:
用于数据存储以及数据交换或显示的一种可扩展标记语言(EXtensibleMarkupLanguage)。广泛用于数据库和程序之间数据的交换。XML标签没有被预定义。您需要自行定义标签。
1.2xml文档的组成
a.申明标记<?xmlversion=”1.0”encoding=”UTF-8”?>
b.标签元素
c.嵌套关系需要正确,不能越级必须一一对应。
d.元素的名称与之前类的名称的要求类似
e.特殊字符需要处理
1.3DTD
为了规范xml文档,使其标准化,方便协调用以及后续数据数据为维护。
2.DOM对XML文件的操作
2.1主要步骤
//得到document
建立解析器工程:DocumentBuilderFactory静态方法:.newInstance();
建立解析器:DocumentBuilder解析器工厂对象的方法:.newDocumentBuilder
解析得到document:解析器对象的方法:.parse(“文件路径”);
调用document中的一些方法,就可以得到你所需要的内容。
//
2.2主要方法
//获得根目录getDocumentElement();
//获得标签的列表对象getElementsByTagName(Stringname)输入标签的值,区分大小写
//获得父对象getParentNode();
//获得子对象getChildNodes();
//获得兄弟对象getgetNextSibling();/getPreviousSibling();
//获得文本内容getTextContent();
//获得属性内容getAttribute(Stringname)
//删除一个节点Noderemove()removeAttributeNode(AttroldAttr);removeChild(NodeoldChild)
//增加一个节点appendChild(NodenewChild)
//修改一个节点的属性setAttribute(Stringname,Stringvalue)
removeAttribute(Stringname)
setAttributeNS(StringnamespaceURI,StringqualifiedName,Stringvalue)
//记得保存包括关闭其中的流。
DOM4J对XML文件的操作
DOM4J相当于java中DOM的外挂,第三方插件。步骤一样,但是方法简单很多,特别是Xpath的技术支持,极大的提高的索引效率。
//创建document文件
SAXReaderreader=newSAXReader();
Documentdocument=reader.read(url);
//使用Xpath技术筛选需要的元素对象,返回一个List列表
Listlist=document.selectNodes("//foo/bar");
遍历列表可以继续筛选
//创建添加对象
Documentdocument=DocumentHelper.createDocument();
Elementroot=document.addElement("root");
Elementauthor1=root.addElement("author")
.addAttribute("name","James")
.addAttribute("location","UK")
.addText("JamesStrachan");
Elementauthor2=root.addElement("author")
.addAttribute("name","Bob")
.addAttribute("location","US")
.addText("BobMcWhirter");
//保存到本地文件中
FileWriterout=newFileWriter("foo.xml");
document.write(out);
//需要设定格式的时候,可以参考下面的代码
OutputFormatformat=OutputFormat.createPrettyPrint();//构造方法的重写
writer=newXMLWriter(System.out,format);
writer.write(document);
Java高级
集合框架和泛型
1.定义
集合框架用于存储一组长度不定的元素。//解决java中数组长度为固定不能改变的不足。
2.常用的接口和类
接口:Collection、List、Set、Map、Iterator
类:ArrayList、LinkedList、HashSet、HashMap
与数组对比的记忆,都需要实现新增加一个对象,修改指定对象的值,删除一个指定对象的值,查询对象的值以及遍历整个数组。
3.使用特点
List:存储的元素不唯一、有序。
Set:存储的元素唯一、无序。
Map:元素以键值对的方式进行存储。//存在映射索引的关系,其中key是set型,value是collection型。
4.ArrayList和LinkedList的区别
ArrayList:查找元素速度快,性能高;但是不适合频繁的对集合元素进行插入、修改、删除。
LinkedList:在频繁对集合元素进行插入、修改、删除时效率高,速度快;但是查找速度不如ArrayList。
//因为ArrarList里面是一排排的数据存放,删除一个后需要有一个重新排序的计算,而LinkedList是链表,内部之间彼此连接,其删除后不需要重新排序,所以效率更高。
5.集合常用方法:
²List:
add(Objectobj)、remove(Objectobj)、remove(intindex)、size()、get(intindex)、iterator()、clear()
//注意里面add,remove等方法的重写,使用的场合不一样。
²Set:
add(Objectobj)、remove(Objectobj)、size()、iterator()、clear()
²Map:
put(Objectkey,Objectvalue)、get(Objectkey)、keySet()、values()、size()、remove(Objectkey)、clear()
//Collections类中有个compareTo()以及fill()方法。
泛型:定义什么类型,就使用的什么类型。先定义类型,再进行输入,输出操作。相当于实现了数组中的存放一组固定类型的目的,将之前的object转化为自己想要的类型。
实用类
1.枚举
定义
一组固定的常量。
语法
访问修饰符enum枚举名{ 常量一, 常量二, …… } |
声明枚举变量并赋值:Seasonseason=Season.Spring;
switch:
switch(枚举变量){//枚举变量:枚举名变量名 常量一: …… Break; 常量二: …… Break; } |
值类型(基本数据类型)都存在一个对应的包装类。
int->Integer、double->Double、boolean->Boolean、char->Charactor、……
值类型和包装类的相互转换
基本数据类型转换为包装类 | 包装类转换为基本数据类型 |
Doubledoub=newDouble(); 包装类名包装类对像名=new包装类名(参数值); 参数可以是数值型,也可以是字符串型“”。即实现数据类型的转化,将“5.5”转换为double类型的方法。 所有类型转化为String都有.toString()方法。 | DoubleShu33=newDouble("50.5"); doublea=Shu33.doubleValue(); 可以通过数值类型Value()将包装类转换为基本数值类型。 对于不同类型的返回一个数值类型的值,需要使用 parseDouble("66.5") 基本数据类型变量名称=包装对象.parse(包装名)(字符串); |
拆箱:将包装类转换为基本数值类型;
装箱:将数值类型转化为包装类。
3.Math类
Math类的作用
提供一系列与科学计算相关的方法。
常用方法:random()、floor()、ceil()、max()、min()、round()
//详细的使用方法可以参考javaAPI文档。记住需要实现数学运算的时候,用Math.调用方法(其都为静态方法)。
Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。
ceil(doublea)返回最小的(最接近负无穷大)double值,该值大于等于参数,并等于某个整数。 |
double值,该值小于等于参数,并等于某个整数。 |
double值,该值大于等于 0.0且小于 1.0。一般获取随机值使用Random类。 |
常用的方法:substring()、indexOf()、lastIndexOf()、replace、split、length()、trim()
//String类是操作最多的类,其方法很多,需要参考javaAPI文档
构造方法: (byte[]bytes)可以通过字节的数组生产字符串,其他的可以参考API。 |
concat(Stringstr)将指定字符串连接到此字符串的结尾。其与“+”用法类似。 |
getBytes()使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。 |
split(Stringregex)根据给定正则表达式的匹配拆分此字符串。其中“*,?,|,^”等需要转义\\ |
substring(intbeginIndex,intendIndex)返回一个新字符串,它是此字符串的一个子字符串。截取字符串 |
trim()返回字符串的副本,忽略前导空白和尾部空白。 |
(intch)返回指定字符在此字符串中最后一次出现处的索引。//其有几种重写的方法。 |
indexOf(intch)返回指定字符在此字符串中第一次出现处的索引。//其有几种重写的方法。 |
length()返回此字符串的长度。 |
replace(charoldChar,charnewChar)返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。//进行修改,也有一些重写的方法,可以加一些参数。 |
5.Random类
作用:生成随机数。只要知道
常用方法:nextInt()、nextInt(int)、nextDouble()、nextXXX()
next (intbits)生成下一个伪随机数。这个方法的修饰符是protected外部不能使用。 |
返回一个伪随机数,它是取自此随机数生成器序列的、在0(包括)和指定值(不包括)之间均匀分布的int值。 |
返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的double值。 |
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的long值。 |
使用单个long种子设置此随机数生成器的种子。 |
²Date
在类Date所有可以接受或返回年、月、日期、小时、分钟和秒值的方法中,将使用下面的表示形式:年份y由整数y-1900表示,月份使用M由0~11的整数,日期使用d由1~31的整数,小时使用H由0~23的整数表示,分钟使用m由0~59的整数表示,秒使用s,由0~61的整数表示。
在所有情形中,针对这些目的赋予方法的参数不需要在指定的范围内;例如,可以把日期指定为1月32日,并把它解释为2月1日的相同含义。
语法:Datedate=newData();获取当前的时间。
(
(测试此日期是否在指定日期之后/之前。//实现定时控制操作 |
compareTo(DateanotherDate)比较两个日期的顺序。 |
getInstance
()获得一个对象。
Calendarcalendar=Calendar.
getInstance
()
;
(intfield,intvalue)将给定的日历字段设置为给定值。 |
(intyear,intmonth,intdate)设置日历字段 YEAR、 MONTH和 DAY_OF_MONTH的值。//Set的方法重写,可以修改日期的年,月,日,小时,分钟,秒,时区等等操作 |
()返回一个表示此 Calendar时间值(从 Date对象 // 可以创建一个Data对象 |
(intfield)返回给定日历字段的值。 |
需要按照指定的格式输出的日期,才能让人看得懂,也能符合人们日常的生活习惯。
字母 | 日期或时间元素 | 表示 | 示例 |
G | Era标志符 | AD | |
y | 年 | 1996;96 | |
M | 年中的月份 | July;Jul;07 | |
w | 年中的周数 | 27 | |
W | 月份中的周数 | 2 | |
D | 年中的天数 | 189 | |
d | 月份中的天数 | 10 | |
F | 月份中的星期 | 2 | |
E | 星期中的天数 | Tuesday;Tue | |
a | Am/pm标记 | PM | |
H | 一天中的小时数(0-23) | 0 | |
k | 一天中的小时数(1-24) | 24 | |
K | am/pm中的小时数(0-11) | 0 | |
h | am/pm中的小时数(1-12) | 12 | |
m | 小时中的分钟数 | 30 | |
s | 分钟中的秒数 | 55 | |
S | 毫秒数 | 978 | |
z | 时区 | PacificStandardTime;PST;GMT-08:00 | |
Z | 时区 | -0800 |
SimpleDateFormatformater=newSimpleDateFormat(“设置的时间输出格式”);
formater.format(“Date对象”);
format(Datedate,StringBuffertoAppendTo,FieldPositionpos)
将给定的Date格式化为日期/时间字符串,并将结果添加到给定的StringBuffer。
输出输出
包:java.io
File类
功能:除了读写之外的其他对文件/文件夹的操作。
常用的方法:
构造方法: |
createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。 |
()创建此抽象路径名指定的目录。 |
createTempFile(Stringprefix,Stringsuffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。 |
delete()删除此抽象路径名表示的文件或目录。 |
exits()测试此抽象路径名表示的文件或目录是否存在。 |
()返回由此抽象路径名表示的文件或目录的名称。 |
()返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。 |
()测试此抽象路径名表示的文件是否是一个标准文件。 |
()测试此抽象路径名表示的文件是否是一个目录。 |
()返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。 |
()返回由此抽象路径名表示的文件的长度。 |
1.流的分类
²根据方向分类:
输入:InputStream、Reader
输出:OutputStream、Writer
²根据内容分类:
字节流:InputStream、OutputStream
字符流:Reader、Writer
实现类
(抽)InputStream | (抽)OutputStream | (抽)Reader | (抽)Writer |
FileInputStream | FileOutputStream | InputStreamReader | OutputStreamWriter |
DataInputStream | DataOutputStream | FileReader | FileWriter |
ObjectInputStream | ObjectOutputStream | BufferedReader | BufferedWriter |
文件读写的一般操作思路:
1.先通过File找到需要读写的对象,通过创建,或者指定的路径,创建一个File对象,路径指向需要读写的文件
2.如果是读,就需要看文件是文本文件还是二进制文件
文本文件:先记住字节型,字符型的基础也是字节型。
InputStreaminput=newFileInputStream(file);
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
input.read(text);//读取操作
input.close();//然后关闭即可。
二进制文件:
InputStreaminput=newFileInputStream(file);
DataInputStreamdinput=newDataInputStream(input);
/*对于文件比较小的时候,可以使用此种方法
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
dinput.read(text);//读取操作
*/
byte[]text=newbyte[1024];//一般读取大的文件,需要分多次读取,就通过循环实现读取。
intcount=dinput.read(text);
while(count!=-1){
count=dinput.read(text,0,count);
}
input.close();
dinput.close();//然后关闭即可。
序列化文件:
就是将DataInputStream更换成ObjectDataInputStream,方法换成readObject()即可。
3.如果是写,就需要看文件是文本文件还是二进制文件
文本文件:先记住字节型,字符型的基础也是字节型。
先得到一个byte的数组,一般有String里面getBytes()的方法。
OUTputStreamoutput=newFileOutputStream(file);
Stringstr=“********”;
byte[]text=Str.getBytes();//创建读取接受的字节数组
input.write(text);//读取操作
input.close();//然后关闭即可。
二进制文件:
OutputStreamoutnput=newFileOutputStream(file);
DataOutputStreamdoutput=newDataOutputStream(input);
//无论如何一定要先得到一个字节的数组,放到内存中可以是边读边写,例如拷贝。
byte[]text=******;
doutput.write(text);
/*对于文件比较小的时候,可以使用此种方法
byte[]text=newbyte[input.available()];//创建读取接受的字节数组
dinput.read(text);//读取操作
*/
output.close();
doutput.close();//然后关闭即可。
序列化文件:
就是将DataOutputStream更换成ObjectDataOutputStream,方法换成writeObject()即可。
序列化和反序列化的对象必须使用Serializable接口,否则读写的过程就报错。
4.小结
读写操作是软件的基本功能之一,是后续XML技术的基础,对需要找到需要更改的对象,然后通过read或write的方法对文件进行修改,修改后再保存到本机磁盘。是实现动态存储信息持续化的基础。只要知道如何实现何种功能即可,具体的情况需要查看不同的帮助文件,实现最优。
多线程
1.进程和线程的区别
进程:一个独立的运算程序;
线程:CPU计算的最小单元,就是一个独立计算的片段,其属于进程的一部分。
2.Java中使用线程的步骤
a.定义线程;b.启动线程;c.执行线程;d.关闭线程。
3.Java中定义线程的2中方式
(1)继承Thread类,实现其run方法//extendsThread
(2)使用Runnable接口//implementsRunnable
在类中定义run的方法,也就是要执行的一些代码,通过类的对象,调用start()方法,就开始线程的执行,以及Thread.sleep()可以定义当前类主进行main()方法休眠的时间。
系统默认会运行java中的mian()方法,mian方法里面就可以启动其他的线程,提高程序的运行效率。
4.线程的优先级
通过setPriority(intgrade);设置一个线程的优先级别,其值为1~10之间,10表示优先级别最高。
优先级别高,优先被执行的概率高。
5.线程的生命周期
新生,被创建的时候;
可运行,start启动后;
阻塞,没有得到时间片的休眠状态
死亡,就是运行完毕,也或者是stop()方法被执行。一般自动运行完了就死亡了,不用刻意的管理。
6.线程的同步
哪里需要争夺资源,就在哪个方法前面加上synchronized的关键字。为了防止同时修改一个内存地址的数据,出现意想不到的问题。
7.线程常用方法
线程越多,程序运行的越快,但是主程序是由运行最慢的那个程序所花费的时间决定的,因此对于大的运算的数据或计算,为了提高效率,尽量将其拆分为多个线程同步运算,这样就提高程序等待的时间。
从客户体验的角度,程序开发做到以下三点,客户自然就会增加:
别让我等;别让我想;别让我烦。
所以多线程技术对于程序开发十分的重要,能够减少客户等待的时间,从而提高效率。
网络编程
1.IP地址
设计与查看dos里面的ping&ipconfig/allcommand
IP的三类,A类1~126,B类128~191,C类192~223
地址是4个8位的二进制。值为0~255之间的数据。
2.C/S的信息传输
先有服务器Server:
通过SocketSrever创建一个服务器对象,在构造方法的时候,加入端口值。
调用accept();实现监听。
再有客户Customer:
通过Socket创建一个客户对象,在构造方法的时候,输入服务器的ip地址,以及端口值。
传输文件同第三章的I/O操作一样,都是创建流,
然后通过getInputStream()/getOutputStream()实现输入与输出
3.UDP
UDP传输不可靠,但是比较适合一些广播,UDP的里面先打包,再通过send()/receive()方法传输数据。
XML操作
1.XML的基础信息
1.1定义以及作用:
用于数据存储以及数据交换或显示的一种可扩展标记语言(EXtensibleMarkupLanguage)。广泛用于数据库和程序之间数据的交换。XML标签没有被预定义。您需要自行定义标签。
1.2xml文档的组成
a.申明标记<?xmlversion=”1.0”encoding=”UTF-8”?>
b.标签元素
c.嵌套关系需要正确,不能越级必须一一对应。
d.元素的名称与之前类的名称的要求类似
e.特殊字符需要处理
1.3DTD
为了规范xml文档,使其标准化,方便协调用以及后续数据数据为维护。
2.DOM对XML文件的操作
2.1主要步骤
//得到document
建立解析器工程:DocumentBuilderFactory静态方法:.newInstance();
建立解析器:DocumentBuilder解析器工厂对象的方法:.newDocumentBuilder
解析得到document:解析器对象的方法:.parse(“文件路径”);
调用document中的一些方法,就可以得到你所需要的内容。
//
2.2主要方法
//获得根目录getDocumentElement();
//获得标签的列表对象getElementsByTagName(Stringname)输入标签的值,区分大小写
//获得父对象getParentNode();
//获得子对象getChildNodes();
//获得兄弟对象getgetNextSibling();/getPreviousSibling();
//获得文本内容getTextContent();
//获得属性内容getAttribute(Stringname)
//删除一个节点Noderemove()removeAttributeNode(AttroldAttr);removeChild(NodeoldChild)
//增加一个节点appendChild(NodenewChild)
//修改一个节点的属性setAttribute(Stringname,Stringvalue)
removeAttribute(Stringname)
setAttributeNS(StringnamespaceURI,StringqualifiedName,Stringvalue)
//记得保存包括关闭其中的流。
DOM4J对XML文件的操作
DOM4J相当于java中DOM的外挂,第三方插件。步骤一样,但是方法简单很多,特别是Xpath的技术支持,极大的提高的索引效率。
//创建document文件
SAXReaderreader=newSAXReader();
Documentdocument=reader.read(url);
//使用Xpath技术筛选需要的元素对象,返回一个List列表
Listlist=document.selectNodes("//foo/bar");
遍历列表可以继续筛选
//创建添加对象
Documentdocument=DocumentHelper.createDocument();
Elementroot=document.addElement("root");
Elementauthor1=root.addElement("author")
.addAttribute("name","James")
.addAttribute("location","UK")
.addText("JamesStrachan");
Elementauthor2=root.addElement("author")
.addAttribute("name","Bob")
.addAttribute("location","US")
.addText("BobMcWhirter");
//保存到本地文件中
FileWriterout=newFileWriter("foo.xml");
document.write(out);
//需要设定格式的时候,可以参考下面的代码
OutputFormatformat=OutputFormat.createPrettyPrint();//构造方法的重写
writer=newXMLWriter(System.out,format);
writer.write(document);
相关文章推荐
- Java基础和面向对象
- Struts2的原理和搭建
- ---Java 678
- 将struts2和hibernate结合实现一个简单的小程序(二)
- Hadoop2.5.2源码编译及导入Eclipse
- java自定义注解简单小例子
- PredicateAP
- [原创]使用java批量修改文件编码(ANSI-->UTF-8)
- java并发编程实战学习笔记之取消与关闭
- Java有关def的事项
- Mac Eclipse JAVAHL问题
- Eclipse中Ant的配置与测试 转
- 应用AXIS开始Web服务之旅(soap web services)——使用三种不同的语言访问创建的Web服务,分别是JAVA、VB、VC
- java Date(int year,int month,int date)需要注意
- JavaEE_Mybatis_SpringMVC_整合开发_工作纪要
- 怎么让eclipse字体更改大小
- Java字符串处理
- Java分为三个体系JavaSE,JavaEE,JavaME 它们的区别以及java的各个版本?
- Jersey 入门与Javabean
- JavaSript模块规范 - AMD规范与CMD规范介绍