第3章 Java的基本语法元素
考点:标识符、关键字、注释、基本数据类型、常量与变量、运算符和表达式
1、标识符的命名规范、满足的条件
-- 由字母、下划线_、美元符号$、数字组成
- 关键字不能作为标识符
- 布尔常量true 和 false 不能作为标识符
- null 不能作为标识符
2、数据类型分为:
- 基本数据类型(数值类型、字符型、布尔型)
- 引用数据类型(类,接口,数组)
3、关键字的定义:
- Java语言中,已经被赋予特定意义的单词符号称为关键字
4、基本数据类型:
- 整型
- 浮点型
- 布尔型:独立的数据类型,只有true和false
- 字符型(char型):java的char型是2个字节
- 包装类(用途)
①作为基本数据类型对应的类,方便涉及对象的操作;
②包含基本类型的相关属性(包括最大值和最小值)以及相关的操作方法。
5、常量:整型、浮点、布尔、字符、字符串、null 常量
- 整型常量中的二进制常量:以0b 或0B开头,例如:0b101L(其他同c语言)
6、变量:基本数据类型、引用数据类型
- 类变量:包括类变量和接口变量,定义类变量时使用修饰词static、接口变量可以不使用static。
- 实例变量:不使用static修饰的变量
- Final变量:被final修饰的变量只能被赋值一次,程序执行过程中其值不会发生改变
7、运算符:算数运算符、关系运算符、逻辑运算符、位运算符、赋值运算符
逻辑运算符 分为:标准逻辑运算符和条件逻辑运算符
- 标准逻辑运算符是把所有的子表达式求值之后,才能得到结果值
- 条件逻辑运算符是对其左操作数求值后如果能确定其结果就不对右操作数进行求值。
位运算符分为:按位运算符和移位运算符,用来计算整数值的二进制位,计算结果也是整数
8、其他运算符:条件运算符、对象运算符
- 条件运算符(三目运算符): <表达式1>?<表达式2 >:<表达式3>
- 对象运算符:instanceof:用来判断一个对象是否属于某个指定的类(或子类)的实例,如果左边表达式的对象是由右边表达式的类创建的,则运算的结果位true,否则为false。
9、分隔符
- 空白符:空格、制表符(‘\t’)、走纸换页、回车(‘\r’)、换行(‘\n’)
- 注释
- 普通分隔符:圆括号()、花括号、分号、逗号、点、冒号
易错题:
三目运算符的强转:
第4章 Java基本控制结构
程序的三种控制结构语句;简答算法程序设计,例如:素数、水仙花数、回文数、阶乘之和、奇偶数、排序、字符串的split拆分、字符串和数字的转换等。
用Scanner对象实现键盘输入;用System.out对象输出。
Switch后的类型只能为 byte、short、int、char(不可以为long、double、float)
第5章 Java面向对象程序设计
1、类的定义
- <修饰符>class <类名> [extends<父类>][implements<接口名>]
- Java不支持多继承
- 类主体包括类的成员变量的说明和成员方法的定义和实现
成员变量:
类中的成员变量名必须唯一,但允许成员变量名和类中的成员方法同名
成员方法:
方法修饰符:public、private、protected、final、static、abstract、synchronized
被final修饰的方法不允许被子类重载
类方法不需要通过创建对象来使用,可以直接通过类来访问,类方法也不允许重载。
构造方法:
在构造方法中可以调用当前类和其父类的另一个构造方法,但必须是方法体得第一句。使用当前类的构造方法用this来引用,使用其父类的构造方法用super来引用。
2、方法重载:类中任意方法均允许被重载,也就是说一个类中可以有多个相同的名字,但这些方法的参数不相同。参数不同具体表现为参数的个数不同,或者参数的类型不同。方法的返回类型和参数的名字不参与比较。
3、this的使用(关键字this表示每个实例对象指向自己的引用,可以出现在实例方法和构造方法中,不能出现在由static修饰的类方法或静态方法中)(必须记住)
- 在类的成员方法中,可以通过this来实例对象的成员变量或调用成员方法
- 在类的成员方法中,区分局部变量和成员变量
- 在类的构造方法中,使用this调用该类的其他构造方法
- 在类的成员方法中 ,使用this返回实例对象本身的引用
4、封装:
- 将实体特征的属性隐藏起来,对象与外界仅通过公共方法进行交流,这样可以提高程序的可靠性、安全性、改善程序的可维护性。
- 一般将类的成员属性定义为private形式保护起来,而将类的成员方法定义为public形式对外公开,这是类封装特性的一个体现。
- 只有被修饰为public访问权限的成员变量和方法才可以被不同包的其他类使用,修饰为protected的成员变量和方法可以被不同包的子类继承。
5、继承:
猫在继承一般哺乳动物的属性与行为的基础上,可以增加新的属性与行为,或者修改哺乳动物的属性与行为。这种现象被成为继承。
继承机制是实现软件可重用的根基,也是提高软件系统的可扩展性与可维护性的重要途径。
子类继承父类遵循普遍性原则和特殊性原则:普遍性原则是子类继承父类中的成员变量和成员方法;特殊性原则是指子类可以增加父类中没有的变量和方法,或者修改父类中已有的变量和方法。
如果父类和子类在不同的包下定义,则子类只能访问父类的public、protected权限的变量,如果父类和子类在一个包下定义,则子类可以访问父类中的public、protected、默认权限的变量,父类中的private对子类是不可见的。
6、super的使用
如果子类需要调用和访问父类中被隐藏的变量或者被覆盖的方法,可以使用super关键字实现。
使用情况:
- 用来访问父类中被覆盖的方法
- 用来调用父类的构造方法
- 用来访问父类中被隐藏的成员变量
子类对象的构造:当用子类的构造方法创建一个子类对象时,子类的构造方法总是会显示或隐式的调用父类的某个构造方法。如果子类的构造方法中没有显示的调用父类的构造方法,Java会默认调用父类的无参构造方法;子类也可以用super关键字显示的调用父类的构造方法,具体调用哪个构造方法需要根据super()的参数类型决定。
需要注意的是,如果父类定义了有参的构造方法,则系统不会再提供默认的无参构造方法,此时子类一定要避免使用父类的无参构造。
7、子类类型转化
(子类可向上,父类不一定可以向下)
结论:
- 上转对象不能操作子类新增加的成员变量和成员方法
- 上转型对象可以访问子类继承的成员变量和隐藏的成员变量
- 上转型对象可以代替子类对象调用子类重写的实例方法
对象转换不仅只发生在对象赋值的情况下,也会发生在方法调用的参数传递的情况下。如果一个方法的形式参数定义的是父类对象,那么调用这个方法时,可以使用子类对象作为实际参数
8、多态
多态性的定义是:同一操作 作用域不同类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。
多态性包含编译时的多态性及运行时的多态性两大类,即多态性也分静态多态性和动态多态性两种。静态多态是指定义在一个类或子类函数中的同名函数参数表(类型以及个数)区别语义和执行的功能。动态多态性是指定义在一个类层次的不同类中的重载函数,他们具有相同的函数原型,需要根据指针指向的对象所在类来区别语义。
Java支持多态性。一方面:可以通过方法重载来实现多态;另一方面:可以通过继承过程中的方法覆盖以及对象类型转化(父类引用指向子类对象)实现。
9、方法重载与方法覆盖
方法重载是指一个类中可以有多个相同类型的方法,但是这些方法的参数类型不相同。参数不同可以表现为参数的类型和参数的个数不相同。//方法覆盖是指子类的方法和父类的方法名完全相同,并且返回值类型、入口参数的数目、类型均相同,即在子类中重新改写了父类的同名方法。
10、类变量的使用特点:
- 类变量可以通过类名直接访问,而不需要创建对象。
- 任何一个变量对类变量的修改,都是在同一单元上完成的。因此,每个对象对类变量的修改都会影响其他实例对象。
11、final
Java API中有不少类定义为final类,这些类通常是有固定作用,用来完成某种标准功能的类,如Math类、String类等
Final类中的所有成员变量和成员方法都被默认为final的。
12、访问控制符/非访问控制符/其他修饰符:
访问修饰符:public、protected、缺省、private
非访问修饰符:final、static、abstract
其他修饰符:Volatile、synchronized(主要用于线程的协调与同步)。
13、java的名字空间和包
Java注重解决名字空间的冲突问题,没有全局方法、全局变量。所有的方法和变量都是在类中定义,且是类的重要组成部分,每个类又是包的一部分。因此Java变量和方法都可以用全限定的名字表示,即使用包名、类名、域名三部分(之间用“.”分隔)的形式访问类成员。
包:如需要定义包,程序首行必须是package语句。它的前面只能有注释或空行。另外,一个文件中最多只能有一条package语句
包的引入:import
14、抽象类的定义:
在面向对象的概念中,所有的对象都是由类来描绘的,但是反过来并不是所有的类都是用来描绘对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类往往用来表征问题分析过程中得出的抽象概念,是对一系列看上去不同,但是本质上又相同的具体概念的抽象。
abstract class <类名> [extends <父类>] [implements <接口名>]{
//类主体
}
抽象方法: abstract <方法返回值类型> <方法名>([参数列表]);
包含抽象方法的类一定是抽象类,但是抽象类不一定包括抽象方法。也就是说,即使不包括任何抽象方法,也可以将一个类 声明成抽象类。
//{}为方法体,所有抽象方法没有方法体{}
public abstract void getPersonInfo();//抽象方法
抽象类的子类如果仅实现父类的部分抽象方法,子类也必须声明为抽象类。
15、接口的定义
类有成员变量和成员方法,而接口只有常量和抽象方法,也就是说,接口的成员变量必须进行初始化,同时接口中的方法必须声明为abstract方法。
[接口修饰符] interface <接口名> [extends <父类接口列表>]{<接口体>}
- 接口修饰符:public和默认两种
- 接口中的成员变量只能定义为static和final的,所有必须要初始化。
16、接口的实现
在实现一个接口的时候,类中对方法的定义要与接口中的相应方法的定义相匹配,其方法名、方法的返回值类型、方法的访问权限、参数的数目与类型信息要一致。
接口继承可能会出现以下情况:
- 方法重名。如果两个方法完全一样,只保留一个;如果两个方法有不同的参数(类型或者个数),则两个方法重载,如果两个方法只有返回值类型不同,则会报错。
- 常量重名:两个常量重名全部保留,并使用原来的接口作为前缀。
17、内部类
内部类一般用来实现一些没有通用意义的功能逻辑。
内部类的声明和创建均需要使用外部类加点分隔的形式。
内部类编译后生成 外部类名$内部类名.class
18、内部类的使用特点:
外部类使用内部类成员:外部类使用内部类同其他成员变量和成员方法没有区别
内部类使用外部类的成员:内部类可以直接使用外部类中的成员变量和方法,即使它们是private的。如果内部类与外部类有同名的成员变量,可以使用“外部类名.this”来访问外部类中同名的成员变量。
19、匿名类
使用类创建对象时,Java允许把类体与对象的创建结合在一起。也就是说,类创建对象时,除了构造方法还有类体,此类体被成为匿名类。
匿名类也可以允许直接用接口名创建一个匿名对象。
20、泛型类
泛型的本质是参数化类型
这种参数类型可以用在类、接口、方法的创建中,分别被称为泛型类、泛型接口和泛型方法。
泛型类声明时并不致命泛型列表是什么类型的数据,可以是任何对象或接口,但不能是基本类型数据。泛型列表中的泛型可以作为类的成员变量的类型、方法的类型以及局部变量的类型。
泛型类声明:
class 泛型类名 <泛型列表>{ 类体 }
注:泛型类的类体与普通类的类体完全类似,由成员变量和方法构成。
<E,F>是泛型列表,E和F可理解为一种类参数,声明对象或创建实例时用具体的类名代替。
第6章 数组与字符串
1、数组的定义和使用
数组就是相同类型的数据按照顺序组成的一种复合数据类型,每个数据称为一个数组元素,用下标来表示同一数组中的不同数组元素,使用时可以通过数组名和下表访问数组中的元素。
特点: ① 相同类型 ②有序的(在内存当中是按照先后顺序连续存放在一起的)③ 通过数组名和下表访问数组中的元素。④下标从0 开始,数组长度为元素的个数
数组元素即可以是简单的数据类型,也可以是对象等引用数据类型。
2、数组的赋值:
- “=”:两个变量指向同一个内存空间
- “arrayCopy()”:可以将数组中的元素赋值给另一个数组
- System.arrayCopy(src,srcPos,dest,destPos,length):该方法可以将sec源数组中从secPos开始的连续length个元素复制到dest数组中从destPos开始的位置。且des和src指向不同的内存空间。
- bufferedReader可以从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取.”
- BufferedWriter流的作用是将文本写入字符输出流,缓存各个字符,从而提供单个字符、数组和字符串的高效写入。
3、数组类Arrays
- Arrays.equals():用于比较俩个数组是否相等
- Arrays.fill():用于以某个值填充整个数组
- Arrays.sort(数组):用于对数组排序 升序排列
- Arrays.binarySearch(数组,数组元素):用于在以及排序的数组中查找元素
- asList()接收任意的数组为参数,并将其转化为List容器。
4、字符串
- Java中使用String和StringBuffer类来封装字符串。
- 字符串的常用方法
- 获取字符串长度:字符串.length() 返回值int
- 截取一个字符:字符串.charAt(int index) 返回值 char
- 取得子串:substring(int beginIndex) 返回值字符串
- 字符串相等比较:equals(string s) equalsIgnoreCase(String s) 注意:==比较的是俩个对象是否引用同一个实例
- 字符串连接:concat(String s) 返回值 String ;还可以用+来连接
- 字符串内容的比较:compareTo(String s) 返回值 int :如果按字典顺序此String对象在参数字符串之前,则比较值为负数,相等为0
- 字符串检索:indexOf:若有返回其位置,如果没有,返回负数。
- 字符串与字符数组的相互转化:字符数组转化为字符串用String的copeValueOf(字符数组)方法,字符串转化为字符数组,String.getChars(int begin,int end ,char[] ch , int dbegin);
- 字符串替换:replace(‘old’,’new’);
- 字符串大小写转化 toLowerCase()、toUpperCase()
- 字符串分割:split
- 其他形式转化为String:valueOf(其他形式:int、double……)或者toString
- StringBuffer类的主要方法(线程安全的)
- 主要是append和insert方法:append是追加,insert(int,String)指定位置加入字符串
- 正则表达式:
- 正则表达式是一种语法规则,是一种可以用于模式匹配和替换的规范,可以方便进行字符串的匹配、查找、替换、判断。
- 使用: 字符串.matches(String regex)
第7章 异常处理
1、异常的概念
- Java提供异常处理机制来处理程序运行中的错误。
- 将运行中打断正常程序流程的任何不正常的情况称为错误或异常。
在java程序中,异常一般由以下俩种原因引起:
- 程序中存在非法操作,例如除数为0,这种异常经常是程序员处于无意或考虑不周造成的,使用称为隐式异常
- 程序员在程序中使用了throw语句引起的异常。使用称为显示异常
2、所有的异常类都直接或间接地继承了Throwable类。
3、error类:error是指一个合理地应用程序不应有地严重问题,通常是灾难性地致命错误。这类错误通常与程序本身无关,通常由系统进行处理。
4、RunTimeException:
运行时异常,主要是程序设计或实现问题,如数组越界,使用空引用、算术异常等等。对这类问题可以通过调试使程序尽量避免而不是去捕获。
常见的:ArrayIndexOfBoundsException、IllegalArgumentException、NullPointerException。
5、非RunTimeException类:
编译异常:例如,文件没有找到异常等等。在正常情况下这类异常时不会发生地,也不知道什么时候发生。
常见的:DataFormatException、IOException、FileNotFoundException……
6、显示异常
在一个方法中抛出异常,该方法可以对其处理,也可以不进行处理,而是把异常向上传递,递交给调用该方法地方法来处理。若在方法中不处理抛出的隐式异常,该异常隐式传递给调用该方法的方法,即默认异常处理方式。
7、隐式异常
程序中存在非法操作,会导致异常发生(隐式异常);在程序中使用throw语句人为抛出异常(显示异常)。
隐式异常不需要使用throws子句声明,当然声明也可以。
方法中不处理的显示异常必须使用throws子句声明抛弃,否则编译不通过。
8、在调用带异常的方法时,编译程序将检查调用者是否有异常处理代码,除非在调用者的方法头中也声明抛弃相应的异常,否则编译会给出异常未处理的错误提示。
常见的:流中的readLine()
9、在编写继承代码时注意,子类在覆盖父类带throws子句的方法时,子类的方法声明中的throws子句抛出的异常不能超出父类方法的异常范围,因此,throws子句可以限制子类的行为。换句话说,子类方法抛出的异常可以时父类抛出的异常的子类,子类方法也可以不抛出异常,但是不能出现父类对应方法的throws子句中没有的异常类型。
10、自定义异常类:
注意: 自定义异常类一般都是以Exception类为父类
自定义异常类对象只能用throw语句抛出
第8章 图形用户界面
- 容器是用来容纳其他组件和容器的特殊组件,是由容器类创建的对象。容器类是组件类的一个子类,具有组件的所有性质。
- 布局是用来控制组件排列顺序和位置的。
- 顶层容器:JFrame、JWindow、JDialog、JApplet
- 中间容器:各种面板
- 普通面板JPanel默认采用了顺序布局管理器(FlowLayout)
JFrame默认的布局管理器为:BorderLayout
JTextArea组件默认支持滚动条按需要出现
- 组件、容器、事件构成了图形用户界面的3大要素
- 掌握事件处理的三要素
- 事件处理步骤
- 事件处理程序的设计。
- 组件、容器、事件的定义
(现在已经淘汰,了解即可)
第9章 输入输出和文件操作
1、了解流的基本概念
- 一个流是一个有序的字节序列。
- 流中的字节具有严格的顺序,按先进先出要求操作,因此流式输入/输出(流式I/O)是一种顺序存取方式。
- 输入流是从某种数据源(如键盘、磁盘文件、网络等)到程序的一个流,程序可以从这个流中读取数据。
- 输出流是从程序到某个目的地的一个流,程序可以信息写入这个流中。
- System.in表示键盘,System.out、System.err表示显示器屏幕或屏幕上的一个窗口。
2、字节流:
字节流是面向字节的流,流中的数据以8位字节位为单位进行读写,是抽象类InputStream和OutputStream的子类,通常用于读写二进制数据。
- Close():关闭输入(输出)流并释放与该流关联的所有系统资源
- OutputStream.flush():将数据缓冲区中的数据强制全部输出,并清空缓冲区。
3.字符流:
字符流是面向字符的流,是以16位字符位单位进行读写。字符流的抽线类是Reader 和 Writer 的子类。
(方法同字节流,差不多)
注意:流中的输入/输出方法都声明了抛出IOException异常,使用这些方法时要进行异常处理。
4、节点流
计算机的外部程序(如键盘、显示器、已连接的网络等)、磁盘文件或一块内存区域统称为节点。
流的一段是程序,另一端是节点的流称为节点流。
以其他已经存在的流作为一个端点的流,称为处理流。处理流又称为过滤流,是对已存在的节点流或其他处理流的进一步处理。
节点流构造方法的参数是节点,处理流构造方法的参数是以其他流为对象作为参数。
5、程序中使用流对象输入/输出数据的操作过程如下。
(1)新建流对象并实例化
(2)对流进行读写操作
(3)关闭流
6、InputStreamReader
InputStreamReader是字节流通向字符流的桥梁,它使用默认或指定的字符集读取字节并将其解码为字符;
OutputStreamWriter是字符流通向字节流的桥梁,它使用默认或指定的字符集将要写入的字符解码为字节。
7、缓冲流的使用
- 在对流进行读写操作时,使用一块称为缓冲区的内存区域,输入的数据先存入缓冲区,当缓冲区满了或者调用缓冲流的flush()方法后,才完成对输出设备或文件的实际输出。
- 在BufferedReader 类中增加了 readLine()方法:读取一个文本行,遇到换行符或者回车,则认为末行已经终止,如果到达流末尾,则返回null
在BufferedWriter 类中增加了 newline()方法:写入一个行分隔符
8、System.in是InputStream流,是字节流。
9、DataInputStream不能从键盘输入基本数据类型。
注意:要从键盘输入基本类型的数据只能先读取字符串,再用Integer.ParseInt(String)等方法将数字字符串转化为整数或其他类型的数据。因为从键盘提供的数据是字符的字节码表示,而不是字节,数据格式不匹配。
10、文件操作
File类是磁盘文件和目录文件的抽象表示。File类没有包含读写文件内容的方法
File类没有抛出异常
11、Scanner类
不常用方法:public Boolean hasNext() :如果在扫描数据源中还有输入数据项,返回true,否则返回false。
NextLine():读取一行字符串
12、java把每一个文件都看作字节或字符的顺序流
13、RandomAccessFile类具有 DataInputStream 和 DataOutputStream 类的全部输入\输出功能。
第10章 多线程
考点:
- 线程实现的2种方法(具体过程)
- 线程的状态与生命周期
- 线程状态转换的条件
- 线程的同步的两种方法、区别
- 程序是一段静态的代码。进程是程序的一次动态执行过程,它对应了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程从产生、发展到消亡的过程。
- 线程是比进程更小的执行单元。
- 线程调度:操作系统为了能够提高程序的执行效率,当一个线程空闲时会撤下这个线程,而会让其他的线程来执行。
- 线程的俩种实现机制。
- Sleep()方法是static的,且抛出异常
- 继承Thread:
- 设计一个类继承Thread类,定义该线程的构造函数
- 将要执行的代码写入该类重写的run方法中
- 用需在此线程中执行的代码覆盖掉Thread类的run()方法。
- 用new关键字创建出所定义类的线程类的一个实例化对象
- 调用该对象的start方法启动线程
11、实现runnable:
- 创建一个类实现runnable接口
- 将要执行的代码覆盖掉Thread方法中的run方法
- 在类中定义一个Thread类对象
- 用Thread的构造器 public Thread(interface target)方法实例化Thread对象
- 调用该对象的start方法启动线程
12、死锁问题:
死锁问题是由两个或多个线程都无法得到相应的锁而造成的两个线程都等待的现象。这种现象主要是因为互相嵌套的synchronized代码段而造成的。因为线程的资源使共享的,就会因此临界资源的争夺问题,容易发生线程死锁。
- 造成死锁问题的本质是无序使用
13、若用户还需要定义子线程,则必须定义继承Thread的子类。
14、在多线程的程序中,采用线程优先级的调度方式来使线程排队获得处理器资源;同一优先级采用先来先服务的方式。
15、多线程的控制包括:挂起线程、线程检查、结束线程。
16、守护线程是一种特殊的线程,一般在最后结束。
17、多线程同步问题的解决方法:
- 定义同步方法和同步块,将共享资源放入同步方法和同步块中访问
- 使用wait()和notify()方法使线程只有满足条件之后方可执行。
第13章 常用工具类
要求:
- 了解Java语言基础类
- toString()方法重写
- 理解集合类
- 掌握ArrayList、HashMap等集合类的基本操作方法
- 能用集合类编写简单程序。
考点:
1、java语言由语法规则和类库俩部分组成。
2、按类的功能不同分成了各个集合,每个集合称为包,也叫做类库
3、Object类是所有类的根类,是java类层的最高层类,是所有类的超类。
4、character类和Boolean是object的直接子类,其他的数值型类都是抽象类number类的直接子类
5、数值型类都有俩个构造方法:一是以该类的基本数据类型作为参数;二是以字符串类型作为参数(类型不统一,会报错)。
注意:每种包装类型的对象中所包装的值是不可改变的。要改变对象中的值必须重新生成新的对象。每种包装类都覆盖类toString和equal方法
6、自动拆箱:是指包装类的实例自动转换为基本数据类型的数据
自动装箱:是指基本数据类型自动转换为包装类的实例直接赋值。
7、集合类:集合类又称为容器类。通常分为set、list、map、queue四大体系
Set:表示无序的、不允许有重复的元素
List:表示有序的、可以有重复的元素
Map:表示的是有映射关系的集合
Queue:表示的是队列集合
8、集合和数组的不同点
- 集合的长度可变,数组长度不可变
- 集合用来存放对象的引用,数组用来存放基本数据类型的数据
- 集合可以存放多种类型的数据,数组只能存放单一类型的元素
9、集合主要由collection接口和map接口派生的
10、ArrayList是线程不安全的。
11、Stack堆栈:是一种后进先出的数据结构,只能在一段进行输入或者输出数据的操作。
12、Java提供一种方法用来访问容器对象种的每个元素,而又不需要暴露对象的内部细节,这就是迭代器。
- 常用方法:hasNext():判断是否还有下一个元素,若有则返回true
- Next():返回当前列表的下一个元素
- 注意:迭代器只能实现单向检索。