J2SE复习.docx
- 文档编号:8697865
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:15
- 大小:23.92KB
J2SE复习.docx
《J2SE复习.docx》由会员分享,可在线阅读,更多相关《J2SE复习.docx(15页珍藏版)》请在冰豆网上搜索。
J2SE复习
1、J2SE_Exception部分
--Java异常是指Java提供的用于处理程序中错误的一种机制。
--所谓错误是指在程序运行的过程中发生的一些异常事件(如:
除0溢出,数组下标越界,所要读取的文件不存在)。
--设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。
--Java程序的执行过程中如出现异常事件,可以生成一个异常类对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统。
这个过程称为抛出(throw)异常。
--当Java运行时系统接收到异常对象时,会寻找能出来这一异常的代码,并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
异常的分类:
--J2SDK中定义了很多异常类,这些类对应了各种各样可能出现的异常信息。
Throwable
--Error
--Exception
Error:
称为错误,由Java虚拟机生成并抛出,包括动态链接库失败,虚拟机错误等,程序对其不做处理。
Exception:
所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显示的申明或捕获。
RuntimeException:
一类特殊的异常,如被0除,数组下标越界越界等,其产生比较频繁,处理麻烦,如果显示的申明或捕获将会对程序的可读性和运行效率影响很大。
因此由系统自动检测并将他们交给缺省的异常处理程序。
(用户可不必对其进行处理)
异常的捕获和处理:
--try代码段包含可能产生例外的代码。
--try代码段后跟有一个或多个catch代码段
--买个catch代码段申明其能处理的一种特定的异常并提供处理方法
--当异常发生时,程序会终止当前的流程,根据获取异常的类型去执行相应的catch代码段
--finally段的代码无论是否发生异常都有执行。
catch语句:
--在catch语句块中是对异常进行处理的代码,每个try语句块可以伴随一个多多个catch语句,用于处理可能产生不同类型的异常对象
--在catch中申明的异常对象,封装了异常事件发生的信息。
在catch语句块中可以使用这个对象的一些方法获取这些信息
--getMessage():
用来得到有关异常事件的信息
--printStackTrace():
用来跟踪异常事件发生时执行堆栈的内容。
finally语句:
--finally语句为异常处理提供一个统一的出口,使得在控制流程序转到程序的其他部分以前,能够对程序的状态做统一的管理。
--无论try所指定的程序块中是否抛出例外,finally所指定的代码都要被执行。
--通常在finally语句中可以进行资源的清除工作
使用自定义异常:
--通过继承Exception类申明自己的异常类
--在方法适当的位置生成自定义异常的实力,并用throw语句抛出
--在方法的申明部分用throws语句申明该方法可能抛出的异常
【重写方法需要抛出与元方法所抛出异常类型一致异常或不抛出异常】
2、J2SE_IO流部分
Java流式输入/输出原理:
在Java程序中,对于数据的输入/输出操作以“流”的方式进行。
J2SDK提供了各种各样的“流”类,用以获取不同种类的数据。
程序中通过标准的方法,输入或者输出数据。
流的分类:
Java.io包中定义了多个流类型(类或抽象类)来实现输入输出的功能。
可以从不同的角度来对其进行分类:
---按数据流的方向不同可以分为输入流和输出流
---按处理数据单位不同可以分为字节流和字符流
---按照功能不同可以分为节点流和处理流
节点流:
为可以从一个特定的数据源(节点)读写数据,如文件,内存。
处理流:
是“连接”已经存在的流(节点流或者处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
java.io包中的4中抽象流类型:
字节输入流:
InputStream,字节输出流:
OutputStream
字符输入流:
Reader,字符输出流:
Writer
InputStream:
继承子InputStream的流都是用于向程序中输入数据。
且数据的单位为字节(8bit)。
基本方法:
intread()throwsIOException:
读物一个字节并以整数的形式返回。
返回-1已到输入流的末尾
intread(byte[]buffer)throwsIOException:
读取一系列字节并存储到一个数组buffer,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1
intread(byte[]buffer,intoffset,intlength):
读取length个字节。
并存储到一个字节数组buffer,从length位置开始,返回实际读取的字节数,如果读取前已到输入流的末尾返回-1
voifclose()throwsIOException:
关闭流释放内存资源
longskip(longn):
跳过n个字节不读,返回实际跳过的字节数。
OutputStream:
继承自OutputStream的流是用于程序中输入数据,且数据的单位为字节。
Reader:
继承自Reader的流都是用于向程序中输入数据。
且数据的单位为字符(16bit)
Writer:
继承自Reader的流都是用于向程序中输入数据。
且数据的单位为字符(16bit)
节点流类型:
File
MemoryArray
MemoryString
Pipe
处理流类型:
Buffering
Filtering
Convertinhbetweenbytesandcharacter
ObjectSerialization
DataConversion
Counting
Peekingahead
Printing
缓冲流:
--缓冲流要“套接”在相应的节点流至上,对读写的数据提供了缓冲的功能,提高了读写的效率。
--缓冲输入流支持其父类的mark和reset方法。
--BufferedReader提供了readLine方法用于读取一行字符串。
(以\r或\n分隔。
)
--BufferedWriter提供了newLine用于写入一个行分隔符
--对于输出的缓冲流,写出的数据会先在内存中缓存。
使用flush方法将会使内存中的数据立刻写出。
数据流:
DataInputStream和DataOutputStream分别继承自InputStream和OutputStream,它属于处理流,需要分别套接在InputStream和OutputStream类型的节点流上。
提供了可以存取与机器无关的java原始类型数据。
Print流:
--PrintWriter和PrintStream都属于输出流,分别针对字符和字节。
--提供了重载的print
--其输出操作不会抛出异常,用户通过检测错误状态获取错误信息
--有自动flush功能。
3、J2SE_OOP部分
面向对象的基本思想是:
从现实世界中客观存在的事物出发来构造软件系统,并在系统的构造中尽可能运用人类的自然思维方式。
面向对象更加强调运用人类在日常的思维逻辑中经常采用的思想方法和原则,如抽象,分类,继承,聚合,多态等。
对象和类的概念:
--对象用计算机语言对问题域中事物的描述,对象通过属性和方法来区别对应事物所具有的静态属性和动态属性。
--类是用于描述同一类型的对象的一个抽象的概念。
类中定义了这一类对象所应具有的静态和动态属性。
--类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
对象之间的关系:
--关联关系
--继承关系
--聚合关系
--实现关系
--多态
Java与面向对象:
--对象是Java程序的核心,在Java程序中,“万事万物皆对象”
--对象可以看成是静态属性(成员变量)和动态属性(方法)的封装体
--类是用来创建同一类型的对象的“模板”,在一个类中定义了该类对象所应具有的成员变量以及方法
--J2SDK提供了很多类供编程人员使用,编程人员也可以定义自己的类
成员变量:
--成员变量可以是Java语言中的任何一种数据类型(包括基本数据类型和引用类型)
--在定义成员变量时,可以对其进行初始化,如果不对其初始化,Java使用默认的值对其初始化。
--成员变量的作用范围为整个类体。
引用:
Java语言中除了基本类型之外的变量类型。
Java中的对象是通过引用对其操作的。
引用类型的特征:
占两块内存。
如何在内存中区分类和对象:
--类是静态的概念
--对象是new出来的,位于堆内存,类的每个成员变量在不同的对象中都有不同的值(除了静态变量),而方法只有一份,执行的时候才占用内存。
Java中的方法:
Java的方法类似于其他语言的函数,是一段用来完成特定功能的代码片段。
--形式参数:
在方法调用时用于接收外界输入的数据。
--实参:
调用方法时实际传给方法的数据
--返回值:
方法在执行完毕后返回给调用它的环境的数据。
--返回值类型:
实现约定的返回值的数据类型,如无返回值,必须给出返回值类型为void。
--Java语言中使用下述形式调用方法:
对象名.方法(实参列表)
--实参的数目,数据类型和次序必须和所调用方法申明的形参列表相匹配
--return语句终止方法的运行并指定要返回的数据。
Java中进行函数调用中传递参数时,遵循传递的原则:
基本数据类型传递的是该数据值本身,引用类型传递的对对象的引用,而不是对象本身。
构造方法(构造函数):
--使用new构造方法创建一个新的对象
--构造函数是定义在Java类中的一个用来初始化对象的函数
--构造函数与类同名且没有返回值
方法的重载(overload):
方法的重载是指一个类中定义有相同的名字,相同的返回值但是参数不同的方法。
调用时,会根据参数的不同调用相对应的方法。
this关键字:
--在类的方法定义中使用的this关键字,代表使用该方法的对象的引用。
--当必须指出当前使用方法的对象是谁时要使用this
--有时使用this可以处理方法中成员变量和参数重名的情况
--this可以看作是一个变量,他的值是当前对象的引用
static关键字:
--在类中,用static申明的成员变量为静态成员变量,它为该类的公用变量,在第一次使用时被初始化,对于该类的所有对象来说,static成员变量只有一份。
--用static申明的方法为静态方法,在调用该方法时,不会将对象的引用传递给他,所以在static方法中不可以访问非static的成员(静态方法不再是针对于某个对象调用,所以不能访问非静态成员)
--可以通过对象引用或类名(不需要实例化)访问静态成员
package和import语句:
为便于管理大型软件系统中数目众多的类,解决类的命名冲突问题,Java引入包(package)机制,提供类的多重类命名空间。
继承:
--Java使用extends关键字实现类的继承机制。
--通过继承,子类自动拥有了基类(superclass)的所有成员(成员变量和方法)
Java只支持单继承,不允许多继承。
一个类只能有一个基类,一个基类可以派生出多个子类。
访问控制:
--Java权限修饰符publicprotectedprivate置于类的成员定义前,用来限定其他对象对该类对象成员的访问权限。
--对于class的权限修饰符只可以用public和default,
------public类可以在任何地方被调用。
------default类只可以被同一个包内部的类访问
super关键字:
--在Java中使用super来引用基类的成分
继承中的构造方法:
--子类的构造的过程中必须调用其父类的构造方法
--子类可以在自己的构造函数中使用super(arglist)调用基类的构造方法。
(使用this(arglist)调用本来的另外的构造方法,如果调用super,必须写在子类构造方法的第一行。
)
--如果子类的构造方法中没有显示的调用父类的构造方法,则系统默认调用基类无参数的构造方法
--如果子类构造方法中,既没有显示调用父类的构造方法,父类中又没有无参的构造方法,则编译出错
方法的重写:
--在子类中可以根据需要对从基类中继承来的方法进行重写
--重写方法必须和被重写方法具有相同方法的名称,参数列表和返回类型
--重写方法不能使用比被重写方法更严格的访问权限
(区别方法重载(overload):
在一个类中)
Object类:
--Object类是所有Java类的根基类。
如果在类的申明中未使用extends关键字指明其父类,则默认基类为object类
Object类的equals方法:
--当两个对象是同一个对象的引用时,返回true,否则返回false
--可以根据需要在用户自定义类型中重写equals方法
对象转型(casting):
--一个基类的引用类型变量可以“指向”其子类的对象
--一个基类的引用不可以访问其子类对象新增的成员(属性和方法)
--可以使用引用变量instanceof类型来判断该引用型变量所“指向”的对象是否属于该类或该类的子类
--子类的对象可以当作基类的对象来使用称作向上转型(upcasting),反之称之为向下转型(downcasting)
动态绑定和多态:
--动态绑定是指在执行期间判断所引用对象的实际类型。
很具其实际的类型调用其相应的方法
--多态的条件:
要有继承,有重写,有父类的引用指向子类的实例
抽象类:
--用abstract关键字来修饰一个类时,这个类叫做抽象类。
用abstract来修饰一个方法的时候,该方法叫做抽象方法。
--含有抽象方法的类必须被申明为抽象类。
抽象类必须被继承,抽象方法必须被重写。
--抽象类不能被实例化。
--抽象方法只需申明,而不需实现
final关键字:
--final变量的值不能够改变
-----成员属性
-----作为方法的参数(不能在方法中被改变)
--final的方法不能被重写
--final的类不能够被继承
接口:
--接口是抽象方法和常量值的定义的集合
--从本质上讲,接口是一中特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现
--多个无关的类可以实现同一个接口
--一个类可以实现多个无关的接口
--与继承关系类似,接口与实现类之间存在多态性
接口特征:
--接口可以多重实现
--接口中申明的属性默认为publicstaticfinal。
也只能是publicstaticfinal的。
--接口中只能定义抽象方法。
而且这些方法默认威尔public的,也只能是public的。
--接口可以继承其他的接口,并添加新的属性和方法。
4、J2SE_常用类
【字符串相关类】
String:
--String代表不可变的字符序列
--String的静态重载方法valueOf可以将基本类型转换为字符串
--split方法可以将一个字符串按照指定的分隔符分割,返回分割后的字符串数组
StringBuffer代表可变的字符序列,可以对其字符串进行改变。
基础数据类型的包装类:
Integer
Double
Float
Character
Long
Boolean
Byte
Math类:
File类:
--File(StringfileName);
--File(Stringparent,Stringchild);
--其静态属性Stringseparator存储了当前系统的路径分隔符
Enum枚举类型:
--只能够取特定值
--使用enum关键字
--是java.lang.Enum类型
5、J2SE_容器
容器:
javaAPI中所提供的一系列类的实例,用于在程序中存放对象。
Collection接口定义了一组存储对象的方法。
其子接口Set和List分别定义了存储方式
--Set中的数据对象没有顺序且不可以重复。
--List中的数据对象有顺序且可以重复
Map接口定义了存储键值对映射的方法
容器类的对象在调用remove,contains等方法时需要比较对象是否相等。
这会涉及到对象类型的equals和hashCode方法。
对于自定义类的类型,需要重写equals方法和hashCode方法以实现自定义对象相等规则。
--相等的对象应该具有相等的hashCodes
Iterator接口:
--所有实现了Collection接口的容器类都有一个iterator方法,用以返回一个实现了Iterator接口的对象
--Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
--Iterator接口相关方法:
----booleanhasNext()判断游标右边是否有元素
----Objectnext()返回游标右边的元素并将游标移动到下一个位置
----voidremove()删除游标左面的元素,在执行完next之后,该操作只能执行一次。
JDK1.5增强的for循环:
--增强的for循环对于遍历array或者Collection的时候相当简便
--缺陷:
对于数组不能方便的访问下标值,对于集合,与Iterator相比,不能方便的删除集合中的内容,其在内部也是调用Iterator。
所以除了简单遍历并独处其中的内容之外,不建议使用增强的for
Set接口:
--Set接口是Collection的子接口。
Set接口没有提供额外的方法。
但实现Set接口的容器类中的元素是没有顺序的。
而且不可以重复。
--Set容器可以与数学中“集合”的概念相对应、
--J2SDKAPI中所提供的Set容器类有HashSet,TreeSet
List接口:
--List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且不可以重复。
--List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。
--J2SDK所提供的List容器类有ArrayList,LinkedList等。
Comparable接口:
--实现了Comparable接口的类通过实现ComparaTo方法从而确定该类对象的俄排序方式。
Array读快改慢。
Linked改快读慢。
Hash两者之间
Map接口:
---实现Map接口的类用来存储键值对
--Man接口的实现类有HashMap和TreeMap等
--Map中存储的键值对通过键来标识,所以键值不能重复。
JDK1.5新特性---泛型:
--JDK1.4以前类型不明确,装入集合的类型都被当作Object对待,从而失去自己的实际类型。
从集合中取出时往往需要转型,效率低,容易产生错误。
于是,有了泛型这一解决方法:
在定义集合的时候同事定义集合中对象的类型。
可以在定义Collection的时候指定,也可以在循环时用Iteraror指定。
使用泛型的好处:
增强程序的可读性和稳定性。
6、J2SE_数组部分
--数组可以堪称是多个相同类型数据组合,对这些数据的统一管理
--数组变量属于引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量
--数组中的元素可以是任何数据类型。
包括基本类型和引用类型
Java语言中申明数组时不能指定其长度(数组中元素的个数)。
Java中使用关键字new创建数组对象
数组名new数组元素的类型[数组元素的个数];
数组初始化:
--动态初始化:
数组定义与为数组元素分配空间和赋值的操作分开进行。
--静态初始化:
在定义数组的同时就为数组元素分配空间并赋值
数组元素的引用:
以arrayName[index]的方式取得数组的元素
arrayName.length为数组的属性,
二维数组:
--二维数组可以看成以数组为元素的数组
--Java中多维数组的申明和初始化应按从高维到低维的顺序进行
数组的拷贝:
arraycopy(Objectsrc,intsrcPos,Objectdest,intdestPos,intlength)
可以用于数组src从srcPos项元素开始的length个元素拷贝到目标数组从destPos项开始的length个位置。
7、J2SE_网络部分
什么是计算机网络:
把分布在不同地理区域的计算机与专门的外部设备用网络通信线路互连成一个规模大,功能强的网络系统。
从而使众多的计算机可以方便的互相传递信息,共享硬件,软件,数据信息等资源。
什么是网络协议:
计算机网络中实现通信必须有一些约定即通信协议,对速率,传输代码,代码结构,传输控制步骤,出错控制等制定标准。
网络通信接口:
为了使两个结点之间能进行对话,必须在他们之间建立通信工具(即接口),使彼此之间能进行信息交换,接口包括两部分:
硬件装置---实现结点之间的信息传递,软件装置---规定双方进行通信的约定协议。
TCP:
是专门涉及用于在不可靠的因特网上提供可靠的,端到端的字节流通信协议、它是一种面向链接的协议。
TCP连接是字节流而非报文流。
UDP:
UDP向应用程序提供了一种发送封装的原始IP数据包的方法,并且发送时无需建立连接。
是一种不可靠的链接。
Socket:
--两个Java应用程序可通过一个双向的网络通信连接实现数据交换。
这个双向链路的一端称为一个Socket。
--Socket通常用来实现Client-Server连接。
--包中定义的两个类Socket和ServerSocket,分别用来实现双向链接的cilent和Server。
--建立连接时所需的寻址信息为远程计算机的IP地址和端口号
8、J2SE_线程部分
线程的基本概念:
--线程是一个程序内部的顺序控制流
--线程和进程的区别:
-----每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销
-----线程可以看成是轻量级的进程。
同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。
-----多进程:
在操作系统中能同时运行多个任务(程序)
-----多线程:
在同一应用程序中有多个顺序流同时执行。
java的线程是通过java.lang.Thread类来实现的。
JVM启动时会有一个由主方法所定义的线程。
可以通过创建Thread类的实例来创建新的线程。
每个线程都是通过某个特定Thread对象所对应的方法run来完成其操作的。
方法run称为线程体。
通过调用Thread类的start方法来启动一个线程。
线程的创建和启动:
1:
--定义线程类实现Runnable接口
--ThreadmyThread=newThread(target);//target为Runnable接口类型
--Runnable中只有一个方法:
run,用以定义线程运行体
--Runnable接口可以为多个线程提供共享的数据
--在实现Runnable接口的类的run方法定义中可以使用Thread类的静态方法
ThreadcurrentThread获取当前线程的引用。
2:
可以定义一个Thread类的子类并且重写其run方法。
然后生成该类的对象。
线程控制的基本方法:
isAlive:
判断线程是否还“活”着。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- J2SE 复习
![提示](https://static.bdocx.com/images/bang_tan.gif)