您的位置:首页 > 编程语言 > Java开发

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.ArrayListLinkedList的区别

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;

}

2.包装类

值类型(基本数据类型)都存在一个对应的包装类。

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
值,该值大于等于参数,并等于某个整数。

floor(doublea)返回最大的(最接近正无穷大)
double
值,该值小于等于参数,并等于某个整数。

random()返回
double
值,该值大于等于
0.0
且小于
1.0
一般获取随机值使用Random类。

4.String

常用的方法:substring()、indexOf()、lastIndexOf()、replace、split、length()、trim()

//String类是操作最多的类,其方法很多,需要参考javaAPI文档

构造方法:)]String
(byte[]bytes)
可以通过字节的数组生产字符串,其他的可以参考API。

concat(Stringstr)将指定字符串连接到此字符串的结尾。其与“+”用法类似。

contains(CharSequences)当且仅当此字符串包含指定的char值序列时,返回true。判断是否包含

getBytes()使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。

split(Stringregex)根据给定正则表达式的匹配拆分此字符串。其中“*,?,|,^”等需要转义\\

substring(intbeginIndex,intendIndex)返回一个新字符串,它是此字符串的一个子字符串。截取字符串

trim()返回字符串的副本,忽略前导空白和尾部空白。

lastIndexOf
(intch)
返回指定字符在此字符串中最后一次出现处的索引。//其有几种重写的方法。

indexOf(intch)返回指定字符在此字符串中第一次出现处的索引。//其有几种重写的方法。

length()返回此字符串的长度。

replace(charoldChar,charnewChar)返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。//进行修改,也有一些重写的方法,可以加一些参数。

//当然还有一些方法,实际使用的时候需要查看API去,遇到问题先思考,再查找资料,做不出来就百度,然后就是请教其他人。

5.Random

作用:生成随机数。只要知道

常用方法:nextInt()、nextInt(int)、nextDouble()、nextXXX()

next
(intbits)
生成下一个伪随机数。这个方法的修饰符是protected外部不能使用。

nextInt(intn)
返回一个伪随机数,它是取自此随机数生成器序列的、在0(包括)和指定值(不包括)之间均匀分布的int值。


nextDouble()
返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的double值。


nextLong()
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的long值。


setSeed(longseed)
使用单个long种子设置此随机数生成器的种子。


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();获取当前的时间。

after
(Datewhen)/
before
(Datewhen)
测试此日期是否在指定日期之后/之前。//实现定时控制操作

compareTo(DateanotherDate)比较两个日期的顺序。

²Calendar为抽象类,通过静态方法
getInstance
()
获得一个对象。

Calendarcalendar=Calendar.
getInstance
()


set
(intfield,intvalue)
将给定的日历字段设置为给定值。

set
(intyear,intmonth,intdate)
设置日历字段
YEAR
MONTH
DAY_OF_MONTH
的值。//Set的方法重写,可以修改日期的年,月,日,小时,分钟,秒,时区等等操作

getTime
()
返回一个表示此
Calendar
时间值(从历元至现在的毫秒偏移量)的
Date
对象

//
可以创建一个Data对象


get
(intfield)
返回给定日历字段的值。

²SimpleDateFormat

需要按照指定的格式输出的日期,才能让人看得懂,也能符合人们日常的生活习惯。

字母

日期或时间元素

表示

示例

G

Era标志符

Text

AD

y



Year

1996;96

M

年中的月份

Month

July;Jul;07

w

年中的周数

Number

27

W

月份中的周数

Number

2

D

年中的天数

Number

189

d

月份中的天数

Number

10

F

月份中的星期

Number

2

E

星期中的天数

Text

Tuesday;Tue

a

Am/pm标记

Text

PM

H

一天中的小时数(0-23)

Number

0

k

一天中的小时数(1-24)

Number

24

K

am/pm中的小时数(0-11)

Number

0

h

am/pm中的小时数(1-12)

Number

12

m

小时中的分钟数

Number

30

s

分钟中的秒数

Number

55

S

毫秒数

Number

978

z

时区

Generaltimezone

PacificStandardTime;PST;GMT-08:00

Z

时区

RFC822timezone

-0800

你需要输出不同的格式,就在建立的时候,输入不同的参数,一般就是yyyy-MM-ddHH:mm:ss

SimpleDateFormatformater=newSimpleDateFormat(“设置的时间输出格式”);

formater.format(“Date对象”);

format(Datedate,StringBuffertoAppendTo,FieldPositionpos)

将给定的Date格式化为日期/时间字符串,并将结果添加到给定的StringBuffer。

输出输出

包:java.io

File类

功能:除了读写之外的其他对文件/文件夹的操作。

常用的方法:

构造方法:File(Fileparent,Stringchild)/File(Stringpathname)通过路径创建对象

createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

mkdir
()
创建此抽象路径名指定的目录。

createTempFile(Stringprefix,Stringsuffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。

delete()删除此抽象路径名表示的文件或目录。

exits()测试此抽象路径名表示的文件或目录是否存在。

getName
()
返回由此抽象路径名表示的文件或目录的名称。

getParent
()
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回
null


isFile
()
测试此抽象路径名表示的文件是否是一个标准文件。


isDirectory
()
测试此抽象路径名表示的文件是否是一个目录。


list
()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。


length
()
返回由此抽象路径名表示的文件的长度。


//还有一些其他的设置只读,隐藏等熟悉的方法,参考API。

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=newFileInputStreamfile;

byte[]text=newbyte[input.available()];//创建读取接受的字节数组

input.read(text);//读取操作

input.close();//然后关闭即可。

二进制文件:

InputStreaminput=newFileInputStreamfile;

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=newFileOutputStreamfile;

Stringstr=********;

byte[]text=Str.getBytes();//创建读取接受的字节数组

input.write(text);//读取操作

input.close();//然后关闭即可。

二进制文件:

OutputStreamoutnput=newFileOutputStreamfile;

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.DOMXML文件的操作

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)

//记得保存包括关闭其中的流。

DOM4JXML文件的操作

DOM4J相当于javaDOM的外挂,第三方插件。步骤一样,但是方法简单很多,特别是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.ArrayListLinkedList的区别

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;

}

2.包装类

值类型(基本数据类型)都存在一个对应的包装类。

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
值,该值大于等于参数,并等于某个整数。

floor(doublea)返回最大的(最接近正无穷大)
double
值,该值小于等于参数,并等于某个整数。

random()返回
double
值,该值大于等于
0.0
且小于
1.0
一般获取随机值使用Random类。

4.String

常用的方法:substring()、indexOf()、lastIndexOf()、replace、split、length()、trim()

//String类是操作最多的类,其方法很多,需要参考javaAPI文档

构造方法:)]String
(byte[]bytes)
可以通过字节的数组生产字符串,其他的可以参考API。

concat(Stringstr)将指定字符串连接到此字符串的结尾。其与“+”用法类似。

contains(CharSequences)当且仅当此字符串包含指定的char值序列时,返回true。判断是否包含

getBytes()使用平台的默认字符集将此String编码为byte序列,并将结果存储到一个新的byte数组中。

split(Stringregex)根据给定正则表达式的匹配拆分此字符串。其中“*,?,|,^”等需要转义\\

substring(intbeginIndex,intendIndex)返回一个新字符串,它是此字符串的一个子字符串。截取字符串

trim()返回字符串的副本,忽略前导空白和尾部空白。

lastIndexOf
(intch)
返回指定字符在此字符串中最后一次出现处的索引。//其有几种重写的方法。

indexOf(intch)返回指定字符在此字符串中第一次出现处的索引。//其有几种重写的方法。

length()返回此字符串的长度。

replace(charoldChar,charnewChar)返回一个新的字符串,它是通过用newChar替换此字符串中出现的所有oldChar得到的。//进行修改,也有一些重写的方法,可以加一些参数。

//当然还有一些方法,实际使用的时候需要查看API去,遇到问题先思考,再查找资料,做不出来就百度,然后就是请教其他人。

5.Random

作用:生成随机数。只要知道

常用方法:nextInt()、nextInt(int)、nextDouble()、nextXXX()

next
(intbits)
生成下一个伪随机数。这个方法的修饰符是protected外部不能使用。

nextInt(intn)
返回一个伪随机数,它是取自此随机数生成器序列的、在0(包括)和指定值(不包括)之间均匀分布的int值。


nextDouble()
返回下一个伪随机数,它是取自此随机数生成器序列的、在0.0和1.0之间均匀分布的double值。


nextLong()
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的long值。


setSeed(longseed)
使用单个long种子设置此随机数生成器的种子。


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();获取当前的时间。

after
(Datewhen)/
before
(Datewhen)
测试此日期是否在指定日期之后/之前。//实现定时控制操作

compareTo(DateanotherDate)比较两个日期的顺序。

²Calendar为抽象类,通过静态方法
getInstance
()
获得一个对象。

Calendarcalendar=Calendar.
getInstance
()


set
(intfield,intvalue)
将给定的日历字段设置为给定值。

set
(intyear,intmonth,intdate)
设置日历字段
YEAR
MONTH
DAY_OF_MONTH
的值。//Set的方法重写,可以修改日期的年,月,日,小时,分钟,秒,时区等等操作

getTime
()
返回一个表示此
Calendar
时间值(从历元至现在的毫秒偏移量)的
Date
对象

//
可以创建一个Data对象


get
(intfield)
返回给定日历字段的值。

²SimpleDateFormat

需要按照指定的格式输出的日期,才能让人看得懂,也能符合人们日常的生活习惯。

字母

日期或时间元素

表示

示例

G

Era标志符

Text

AD

y



Year

1996;96

M

年中的月份

Month

July;Jul;07

w

年中的周数

Number

27

W

月份中的周数

Number

2

D

年中的天数

Number

189

d

月份中的天数

Number

10

F

月份中的星期

Number

2

E

星期中的天数

Text

Tuesday;Tue

a

Am/pm标记

Text

PM

H

一天中的小时数(0-23)

Number

0

k

一天中的小时数(1-24)

Number

24

K

am/pm中的小时数(0-11)

Number

0

h

am/pm中的小时数(1-12)

Number

12

m

小时中的分钟数

Number

30

s

分钟中的秒数

Number

55

S

毫秒数

Number

978

z

时区

Generaltimezone

PacificStandardTime;PST;GMT-08:00

Z

时区

RFC822timezone

-0800

你需要输出不同的格式,就在建立的时候,输入不同的参数,一般就是yyyy-MM-ddHH:mm:ss

SimpleDateFormatformater=newSimpleDateFormat(“设置的时间输出格式”);

formater.format(“Date对象”);

format(Datedate,StringBuffertoAppendTo,FieldPositionpos)

将给定的Date格式化为日期/时间字符串,并将结果添加到给定的StringBuffer。

输出输出

包:java.io

File类

功能:除了读写之外的其他对文件/文件夹的操作。

常用的方法:

构造方法:File(Fileparent,Stringchild)/File(Stringpathname)通过路径创建对象

createNewFile()当且仅当不存在具有此抽象路径名指定名称的文件时,不可分地创建一个新的空文件。

mkdir
()
创建此抽象路径名指定的目录。

createTempFile(Stringprefix,Stringsuffix)在默认临时文件目录中创建一个空文件,使用给定前缀和后缀生成其名称。

delete()删除此抽象路径名表示的文件或目录。

exits()测试此抽象路径名表示的文件或目录是否存在。

getName
()
返回由此抽象路径名表示的文件或目录的名称。

getParent
()
返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回
null


isFile
()
测试此抽象路径名表示的文件是否是一个标准文件。


isDirectory
()
测试此抽象路径名表示的文件是否是一个目录。


list
()
返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。


length
()
返回由此抽象路径名表示的文件的长度。


//还有一些其他的设置只读,隐藏等熟悉的方法,参考API。

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=newFileInputStreamfile;

byte[]text=newbyte[input.available()];//创建读取接受的字节数组

input.read(text);//读取操作

input.close();//然后关闭即可。

二进制文件:

InputStreaminput=newFileInputStreamfile;

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=newFileOutputStreamfile;

Stringstr=********;

byte[]text=Str.getBytes();//创建读取接受的字节数组

input.write(text);//读取操作

input.close();//然后关闭即可。

二进制文件:

OutputStreamoutnput=newFileOutputStreamfile;

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.DOMXML文件的操作

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)

//记得保存包括关闭其中的流。

DOM4JXML文件的操作

DOM4J相当于javaDOM的外挂,第三方插件。步骤一样,但是方法简单很多,特别是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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: