JAVA总结.docx
《JAVA总结.docx》由会员分享,可在线阅读,更多相关《JAVA总结.docx(22页珍藏版)》请在冰豆网上搜索。
JAVA总结
第八章流
1、输入/输出流的分类:
►java.io包中定义了多个流类型(类或抽象类)来实
现输入/输出功能;可以从不同的角度对其进行分类:
▪按数据流的方向不同可以分为输入流和输出流。
(以程序的角度来考虑)
▪按处理数据单位不同可以分为字节流和字符流。
▪按照功能不同可以分为节点流和处理流。
►J2SDK所提供的所有流类型位于包java.io内都分别继承自以下四种抽象流类型。
字节流
字符流
输入流
InputStream
Reader
输出流
OutputStream
Writer
2、节点流和处理流:
(1)节点流为可以从一个特定的数据源(节点)读写数据(如:
文件,内存)
(2)处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
(1)InputStream:
继承自InputSteam的流都是用于向程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。
InputStream的基本方法:
//读取一个字节并以整数的形式返回(0~255),
//如果返回-1已到输入流的末尾。
intread()throwsIOException
//读取一系列字节并存储到一个数组buffer,
//返回实际读取的字节数,如果读取前已到输入流的末尾返回-1
intread(byte[]buffer)throwsIOException
//读取length个字节
//并存储到一个字节数组buffer,从off位置开始存,最多len
//返回实际读取的字节数,如果读取前以到输入流的末尾返回-1
intread(byte[]buffer,intoff,intlen)
throwsIOException
//关闭流释放内存资源
voidclose()throwsIOException
(2)OutputStream:
继承自OutputSteam的流是用于程序中输入数据,且数据的单位为字节(8bit);下图中深色为节点流,浅色为处理流。
OutputStream的基本方法:
//向输出流中写入一个字节数据,该字节数据为参数b的低8位
voidwrite(intb)throwsIOException
//将一个字节类型的数组中的数据写入输出流
voidwrite(byte[]b)throwsIOException
//将一个字节类型的数组中的从指定位置(off)开始的
//len个字节写入到输出流
voidwrite(byte[]b,intoff,intlen)
throwsIOException
//关闭流释放内存资源
voidclose()throwsIOException
//将输出流中缓冲的数据全部写出到目的地
voidflush()throwsIOException
(3)Reader:
继承自Reader的流都是用于向程序中输入数据,且数据的单位为字符(16bit);下图中深色为节点流,浅色的为处理流
Reader的基本方法:
//读取一个字符并以整数的形式返回(0~255),
//如果返回-1已到输入流的末尾。
intread()throwsIOException
//读取一系列字符并存储到一个数组buffer,
//返回实际读取的字符数,如果读取前已到输入流的末尾返回-1
intread(char[]cbuf)throwsIOException
//读取length个字符
//并存储到一个数组buffer,从off位置开始存,最多读取len
//返回实际读取的字符数,如果读取前以到输入流的末尾返回-1
intread(char[]cbuf,intoff,intlen)
throwsIOException
//关闭流释放内存资源
voidclose()throwsIOException
(4)Writer:
继承自Writer的流都是用于程序中输入数据,且数据的单位为字符(16bit);下图中深色为节点流,浅色为处理流。
Writer的基本方法:
//向输出流中写入一个字符数据,该字节数据为参数b的低16位
voidwrite(intc)throwsIOException
//将一个字符类型的数组中的数据写入输出流,
voidwrite(char[]cbuf)throwsIOException
//将一个字符类型的数组中的从指定位置(offset)开始的
//length个字符写入到输出流
voidwrite(char[]cbuf,intoffset,intlength)
throwsIOException
//将一个字符串中的字符写入到输出流
voidwrite(Stringstring)throwsIOException
//将一个字符串从offset开始的length个字符写入到输出流
voidwrite(Stringstring,intoffset,intlength)
throwsIOException
//关闭流释放内存资源
voidclose()throwsIOException
//将输出流中缓冲的数据全部写出到目的地
voidflush()throwsIOException
4、节点流类型:
5、访问文件:
FileInputStream和FileOutputStream分别继承自InputStream和OutputStream用于向文件中输入和输出字节。
FileInputStream和FileOutputStream的常用构造方法:
FileInputStream(Stringname)throwsFileNotFoundException
FileInputStream(Filefile)throwsFileNotFoundException
FileOutputStream(Stringname)throwsFileNotFoundException
FileOutputStream(Filefile)throwsFileNotFoundException
FileOutputStream(Filefile,booleanappend)
throwsFileNotFoundException
FileInputSteam和FileOutputStream类支持其父类InputStream和OutputStream所提供的数据读写方法。
注意:
在实例化FileInputStream和FileOutputSteam流时要用try-catch语句以处理其可能抛出的FileNotFoundException。
在读写数据时也要用try-catch语句以处理可能抛出的IOException。
FileNotFoundException是IOException的子类
例:
TestFileInputStream.java/TestFileOutputStream.java
FileReader和FileWriter分别继承自Reader和Writer,FileInputSteam与FileOutputStream类似,所不同的时FileReader和FileWriter向文件输入和输出的数据单位为字符。
FileReader和FileWriter的常用构造方法:
publicFileWriter(Filefile)throwsIOException
publicFileWriter(Filefile,booleanappend)
throwsIOException
publicFileWriter(StringfileName)throwsIOException
publicFileWriter(StringfileName,booleanappend)
throwsIOException
publicFileReader(StringfileName)
throwsFileNotFoundException
publicFileReader(Filefile)
throwsFileNotFoundException
6、处理流类型:
7、缓冲流:
缓冲流要“套接”在相应的节点流之上,对读写的数据提供了缓冲的功能,提高了读写的效率,同时增加了一些新的方法。
J2SDK提供了四种缓存流,其常用的构造方法为:
BufferedReader(Readerin)
BufferedReader(Readerin,intsz)//sz为自定义缓存区的大小
BufferedWriter(Writerout)
BufferedWriter(Writerout,intsz)
BufferedInputStream(InputStreamin)
BufferedInputStream(InputStreamin,intsize)
BufferedOutputStream(OutputStreamout)
BufferedOutputStream(OutputStreamout,intsize)
►BufferedReader提供了readLine方法用于读取一行字符串(以\r或\n分隔)。
►BufferedWriter提供了newLine用于写入一个行分隔符。
►对于输出的缓冲流,写出的数据会先在内存中缓存,使用flush方法将会使内存中的数据立刻写出。
8、转换流:
InputStreamReader和OutputStreamWriter用与字节数据到字符数据之间的转换。
InputStreamReader需要和InputStream“套接”。
OutpStreamWriter需要和OutputStream“套接”。
转换流在构造时可以指定其编码集合,例如:
InputStreamisr=newInputStreamReader
(System.in,“ISO8859_1”)
9、Print流:
●PrintWriter和PrintStream都属于输出流,分别针对与字符和字节。
●PrintWriter和PrintStream提供了重载的print
●Println方法用于多种数据类型的输出。
●PrintWriter和PrintStream的输出操作不会抛出异常,用户通过检测错误状态获取错误信息。
PrintWriter和PrintStream有自动flush功能。
PrintWriter(Writerout)
PrintWriter(Writerout,booleanautoFlush)
PrintWriter(OutputStreamout)
PrintWriter(OutputStreamout,booleanautoFlush)
PrintStream(OutputStreamout)
PrintStream(OutputStreamout,booleanautoFlush)
10总结:
putStream/OutputStream//最基础的抽象类,字节流
Reader/Writer//最基础的抽象类,字符流
FileInputStream/FileOutputStream//File打头的用来操作文件,字节流
FileReader/FileWriter//File打头的用来操作文件,字符流
BufferedInputStream/BufferedOutputStream//带缓冲的,字节流
BufferedReader/BufferedWriter//带缓冲的,字符流
ByteArrayInputStream/ByteArrayOutputStream//读写内存中的字符数组
InputStreamReader/OutputStreamWriter//字节转字符,转化流
DataInputStream/DataOutputStream//读写基本数据类型
PrintStream/PrintWriter//都是输出流,不抛出异常,自动flush
ObjectInputStream/ObjectOutputStream//读写Object
Serializable接口à标记性接口
Externalizableà自己控制序列化
Transientà
第9章:
Java多线程机制
1、线程的基本概念:
线程是一个程序内部的顺序控制流。
2、线程和进程的区别:
(1)每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销。
(2)线程可以看成时轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。
(3)多进程:
在操作系统中能同时运行多个任务(程序)
(4)多线程:
在同一应用程序中有多个顺序流同时执行
Java的线程是通过java.lang.Thread类来实现的。
►VM启动时会有一个由主方法(publicstaticvoidmain(){})所定义的线程。
►可以通过创建Thread的实例来创建新的线程。
►每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体。
►通过调用Thead类的start()方法来启动一个线程。
3、线程的创建和启动:
可以有两种方式创建新的线程。
第一种:
定义线程类实现Runnable接口
ThreadmyThread=newThead(target)//target为Runnable接口类型。
Runnable中只有一个方法:
publicvoidrun();用以定义线程运行体。
使用Runnable接口可以为多个线程提供共享的数据。
在实现Runnable接口的类的run方法定义中可以使用Thread的静态方法:
publicstaticThreadcurrentThread()获取当前线程的引用。
第二种:
可以定义一个Thread的子类并重写其run方法如:
classMyThreadextendsThead{
publicvoidrun(){…}
}
然后生成该类的对象:
MyThreadmyThread=newMyThead(…)
使用那种好呢?
4、线程状态转换:
5、线程控制基本方法:
(1)sleep/join/yield方法:
►sleep方法:
可以调用Thread的静态方法:
publicstaticvoidsleep(longmillis)throwsInterruptedException
使得当前线程休眠(暂时停止执行millis毫秒)。
由于是静态方法,sleep可以由类名直接调用:
Thread.sleep(…)
►join方法:
合并某个线程
►yield方法:
让出CPU,给其他线程执行的机会
6、线程模式:
▪两种线程模式:
►协作式:
一个线程保留对处理器的控制直到它自己决定放弃
▪速度快、代价低
▪用户编程非常麻烦
►抢先式:
系统可以任意的从线程中夺回对CPU的控制权,再把控制权分给其它的线程。
▪两次切换之间的时间间隔就叫做时间片
▪效率不如协作式高,OS核心必须负责管理线程
▪简化编程,而且使程序更加可靠
▪多数线程的调度是抢先式的
7、线程的优先级别:
▪Java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程。
线程调度器按照线程的优先级决定应调度哪个线程来执行。
▪线程的优先级用数字表示,范围从1到10,一个线程的缺省优先级是5。
Thread.MIN_PRIORITY=1
Thread.MAX_PRIORITY=10
Thread.NORM_PRIORITY=5
▪使用下述线方法获得或设置线程对象的优先级。
intgetPriority();
voidsetPriority(intnewPriority);
▪不同平台上的优先级
Solaris:
相同优先级的线程不能相互抢占对方的cpu时间。
windows:
可以抢占相同甚至更高优先级的线程的cpu时间
8、Synchronized总结:
第10章GUI编程
1、GUI--GraphicalUserInterface:
2、AWT:
(抽象窗口工具集)AbstractWindowToolkit
3、Swing:
3、SWT(StandardWidgetToolkit):
4.aa:
5、Component&Container:
6、Frame:
7、Panel:
8、布局管理器:
9、FlowLayout布局管理器:
10、FlowLayout的构造方法:
TestFlowLayout.javaFlowLayout初步用法TestFlowLayout2.javaFlowLayout多个Button
11、BorderLayout布局管理器:
组件只能被添加到指定的区域
TestGridLayout.java
如:
GridLayout(3,4)
布局管理器总结:
11、事件监听:
(1)TextField类:
publicvoidsetText(Stringt)publicStringgetText()publicvoidsetEditable(booleanb)publicbooleanisEditable()publicvoidsetBackground(Colorc)publicvoidselect(intselectionStart,intselectionEnd)publicvoidselectAll()publicvoidaddActionListener(ActionListenerl)添加动作监听器。
(2)TextField事件监听:
publicvoidsetText(Stringt)publicStringgetText()publicvoidsetEditable(booleanb)publicbooleanisEditable()publicvoidsetBackground(Colorc)publicvoidselect(intselectionStart,intselectionEnd)publicvoidselectAll()publicvoidaddActionListener(ActionListenerl)添加动作监听器。
12、内部类:
内部类举例(1-1)
13、内部类总结:
好处:
(1)可以方便的访问包装类成员
(2)可以更清楚的组织逻辑,防止不应该被其它类
访问的类进行访问
何时使用:
该类不允许或者不需要其它类进行访问时候
14、Graphics类:
例:
TestPaint.java
15、鼠标事件适配器:
packagejava.awt.event;
publicabstractclassMouseAdapterimplementsMouseListener{
publicvoidmouseClicked(MouseEvente){}
publicvoidmousePressed(MouseEvente){}
publicvoidmouseReleased(MouseEvente){}
publicvoidmouseEntered(MouseEvente){}
publicvoidmouseExited(MouseEvente){}
}
16、Window事件: