第一章
1.JAVA语言的特点
- 面向对象(重要特性,能实现良好的代码重用)
- 平台无关性(可移植性)
- 解释性(解释器对字节码进行解释执行)
- 简单性(略去运算符重载,多重继承等模糊概念,实现自动垃圾收集以简化内存管理工作)
- 健壮性与安全性(不需要进行指针运算和存储器管理;不支持指针,一切对内存的访问都通过对象的实例变量来实现)
- 多线程特性
- 网络支持
2.JAVA单元测试方法(库,方法要求)
- 使用系统库JUnit4来测试类方法的正确性。
- 单元测试:类编码完成后,在要测试的方法前加上注解@Test。通过双击方式来选中某个方法名,Run As->JUnit Test来运行该方法。
- 单元测试的优点:不必写很多含有main()方法的Java类来测试一个类的不同方法的正确性
3.eclipse动态调试方法
- 可单独使用,经常用来检查空指针异常(即使用了空值对象)的运行错误原因
- 动态调试模式Debug:视图跟踪
4.JAVA的程序编译、运行(普通和打包)命令
- 每个类编译完成后,会生成各自的字节码.class文件。
- 同一个JAVA源文件中,最多包含一个用public修饰的类。文件名必须与public修饰的类名完全相同。
- 同一个JAVA源文件中,类名不能重复。
- jar文件是JAVA文件封装的最小单元,是一种压缩的类包,运行jar文件的方法:
JAVA -jar 导出的jar文件名.jar
第二章
5.java命名规则(硬性要求)和java命名规范(建议和惯例)
- 标识符:以字母,下划线或$开头,后接字母,下划线,$或数字。区分大小写,不能是关键字,不能包含算术运算符和空格。
- 关键字与保留字:关键字(51)和保留字(2个 goto, const)
Java没有sizeof,sizeof不是关键字。
6.JAVA的基本数据类型和复合类型种类、基础数据类型长度
- 8种基本数据类型:
名称 | 关键字 | 字节数 | 数据范围 |
---|---|---|---|
字节型 | byte | 1 | -27 至 27 -1 |
短整型 | short | 2 | -215 至 215 -1 |
整型 | int | 4 | -231 至 231 -1 |
长整型 | long | 8 | -263 至 263 -1 |
浮点型 | float | 4 | |
双精度型 | double | 8 | |
字符型 | char | 2 | 0至65535 |
布尔类型 | boolean | 1 | true,false |
- Integer.MAX_VALUE表示int类型数据的最大值。数字类型数据的最大最小值,都已经封装到对应的包装类中去了。
- 引用数据类型:所有的系统类,数组类,自定义类。除了8种数据类型之外都是引用数据类型。
引用数据类型的变量,在内存中存储的是一个引用地址,这个地址指向对象的内存地址。
7.字符串的比较方法
- equals()
使用“==”比较两个字符串,是比较两个对象的的“地址”是否一致,本质就是判断两个变量是否指向同一个对象,如果是则返回true,否则返回的是false。而String类的equals方法则是比较两个字符串的内容是否一致,返回值也是一个布尔类型。
public class TestString{
public static void main(String[] args){
String str1 = "张三";
String str2 = "张三";
System.out.println(str1 == str2); //返回true
System.out.println(str1.equals(str2)); //返回true
String str3 = new String("李四");
String str4 = new String("李四");
System.out.println(str3 == str4); //返回false
System.out.println(str3.equals(str4)); //返回true
}
}
8.String和StringBuffer区别和特点
- String:不可变类,不允许修改其值
- StringBuffer:可变类,可以修改对象值
- 对StringBuffer对象应用类方法append(String str)完成字符串的追加
StringBuffer country=new StringBuffer("china\n");
country.append("中国");//追加字符串
System.out.println(country);
9.异常处理的原则(哪些必须处理,哪些可不处理)
- 必须处理:受控异常,不用try……catch 不可编译
- 不必要处理:不受控异常,不用try……catch也能编译
需要记住的几个异常:ArrayIndexOutOfBoundsException(数组下标出界) 、NumberFormatException(字符串到数字格式非法转换)、NullPointerException(非法使用空引用) - Exception类分为两大类:运行时异常和非运行时异常
第三章
10.类的结构
- 在java语言中,所有类都是Object类的直接或间接子类
- Boolean 默认为 false
- 内部类可以匿名,静态内部类不能访问外部类的非静态成员,内部类可以被声明为private或protected,内部类可以被定义为abstract
- JAVA不支持多继承,但一个类可以同时实现多个接口,使用接口间接实现多继承
- 多态 依赖方法的重写 动态绑定
- 使用关键字static定义静态成员和静态代码块
11.类及其成员的访问控制
- 四种访问控制符
访问控制符 | 修饰的元素 | 可访问范围 |
---|---|---|
public | 类、变量、方法 | 所有类 |
protected | 变量、方法 | 同一个包中的类、所有子类 |
default(默认) | 类、变量、方法 | 同一个包中的类 |
private | 变量、方法 | 本类 |
12.JAVA常用包的功能
- java.lang:提供Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等,不使用该包很难编写Java代码
- java.util:提供包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。
- java.io:通过文件系统、数据流和序列化提供系统的输入与输出。
- java.net:提供实现网络应用与开发的类。
- java.sql:提供使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。
- java.awt:这两个包提供GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。
- java.text:提供与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。
13.私有成员的继承和访问
- 私有成员可以被继承,不能被访问
14.重载和覆盖的概念
-
方法重载是指同一个类中的同名方法。为了实现同一个功能,而使用统一的方法处理不同类型的数据。方法重载除了方法名称相同,还要求满足下列条件之一:
- 参数个数不同(对类型无限制)
- 参数个数相同但参数类型不同
- 参数个数和类型都相同,但顺序不同
-
一个class里面可以有多个main(重载)
-
子类通过继承可以获得父类的属性和方法。在子类中定义一个方法,其名称、参数表及返回类型正好与父类中的相匹配,那么,新方法被称为旧方法的重写,也叫方法覆盖。
-
toString()是类Object定义的方法,所有子类都可以重写该方法。
-
子类可用通过super调用父类中被覆盖的方法。
-
只有非private方法才可以覆盖
第四章
15.线程生命周期
- 线程生命周期=五个状态:创建, 就绪, 运行, 阻塞,死亡
16.线程同步关键字用法
- 关键字:synchronized
- 修饰代码块时,一个时间段只能有一个线程得到执行,另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
- 修饰某个方法时,表明该方法只能执行一个线程,其他线程处于等待状态。
- 修饰某个类的声明时,表明这个类中的所有方法都是synchronized(同步)的。
synchronized(this){
方法
}
17.线程协作关键字用法
- wait()方法:用于释放已持有的锁、进入wait队伍
- notifyAll()方法:用于唤醒wait队列中所有的线程
- notify()方法:用于唤醒wait队列中的某个线程
- wait(),notifyAll()和notify()三种方法只能出现在synchronized作用的范围内
- 应用wait()方法后会阻塞线程
18.死锁的原理
- 当两个线程相互等待对方释放同步监视器时就会发生死锁,Java虚拟机没有监测、也没有采用措施来处理死锁情况,所以多线程编程时应该采取措施避免死锁的出现。
- 一旦出现死锁,整个程序既不会发生任何异常,也不会给出任何提示,只是所有线程处于阻塞状态,无法继续。
第五章
19.集合的遍历方法(iterable和iterator作用和区别
- 迭代接口Iterable
- Iterator用于遍历集合中元素,定义了三种方法:
1.hasNext():判断是否还有下一个元素。如果仍有元素可迭代,返回true
2.next():返回下一个元素
3.remove():删除当前元素 - 接口iterable和接口iterator是两个相关联的接口。
- 遍历Collection集合:
//先定义Collection集合对象coll
Iterator iter=coll.iterator();
while(iter.hasNext()){
Object ob=iter.next(); //对ob的操作
}
20.ArrayList和LinkedList区别
- ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
- 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针。
- 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
- 在ArrayList的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的。
21.map的功能和用法
22.集合排序方法(comparable和comparator区别)
- comparable:声明在类的内部
- comparator:写在要比较的类的外部,可以提供多种方法,优先级高
第六章
23.SWING的事件处理机制(GUI绘制操作单线程串行)
第七章
24.File类的功能
- 处理文件和获取文件信息
- 除了读写文件内容其他都可以做
25.字节流与字符流的区别
- FilterInputStream字节流不能直接通过new来创建实例对象
- 与用与读写字节流的InputStream和OutputStream类对应,java还提供了读写Unicode字符的字符流Reader和Writer类
- 实际上字节流在操作时不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
26.缓冲区作用
- 可以简单地把缓冲区理解为一段特殊的内存,某些情况下, 如果一个程序频繁地操作一个资源(如文件或数据库),则性能会很低,此时为了提升性能,就可以将一部分数据暂时读入到内存的一块区域之中,以后直接从此区域中读取数据即可,因为读取内存的速度会比较快,这样可以提升程序的性能。在字符流操作中,所有的字符都是在内存中形成的,在输出前会将所有的内容暂时保存在内存之中,所以使用了缓冲区暂存数据。
第八章
27.TCP SOCKET服务器编程步骤
- TCP协议是面向对象连接、可靠的、有序的,以字节流的方式发送数据。
- 基于TCP协议实现网络通信的类:
客户端----Socket类
服务器端----ServerSocket类
1.创建ServerSocket和Socket
2.打开链接到Socket的输入/输出流
3.按照协议对Socket进行读/写操作
4.关闭输入输出流、关闭Socket
28.UDP socket的收发方法
第九章
29.使用JDBC基本步骤
- 注册驱动
- 建立连接
- 创建statement
- 执行sql ,得到结果集ResultSet
- 遍历结果集
- 释放资源
30.事务机制的特性
1.原子性: 事务中所有操作是不可再分割的原子单元。事务中所有操作要么都执行成功,要么都执行失败。
2.一致性: 事务执行后,数据库状态与其他业务规则保持一致。如转账业务,无论事务执行成功与否,参与转账的两个账户余额之和应该保持不变。
3.隔离性: 隔离性是指在并发操作中,不同事务之间应该隔离开来,使每个并发中的事务不会互相干扰。
4.持久性: 一旦事务提交成功,事务中所有的数据操作都必须被持久化保存到数据库中,即使提交事务后,数据库崩溃,在数据库重启时,也必须能保证通过某种机制恢复数据。