一、异常处理
1.异常的对象的根类是哪个类?
是Throwable类
2.Throwable类有哪两个分支?
分成Error类和Excepion类两个分支
Error类表示严重错误
Exception类表示可以在程序中处理的错误
3.Exception类有哪两个分支?
分成运行时异常和非运行时异常(已检查异常)
运行时异常编译不检查,在运行时才会发生异常
非运行时(已检查)异常编译时就会作检查,不处理异常则通不过编译
4.如果在try块中发生异常,那么程序将会跳转到哪?
会跳转到catch语句块
5.catch语句可以用父类类型捕获子类异常吗?
因为有多态特点,是可以的
6.处理异常代码finally语句会在什么时候执行?
finally代码在任何时候都会执行,不管有没有发生异常。
7.如何声明已检查异常,由谁来处理这个异常?
用throws语句来声明一个已检查异常,由方法的调用者来处理这个异常
8.如何抛出一个异常?
用throw语句抛出
9.如何创建一个自定义的异常类?
创建一个类,只要让它继承任何一个现有的异常类就可以了
10.覆盖方法对于异常有什么要求?
覆盖方法不能比父类方法抛出更多异常
二、反射,代理,标注
1.获得一个类型的Class对象有哪几种途径?
方法1:对象.getClass()
方法2:类型名.class
方法3:Class.forName()
2.反射相关的类型都有哪些?
Class 代表一个运行时类
Field 代表一个类的属性
Method 代表一个类的方法
Constructor 代表一个类的构造器
3.如何声明一个自定义标注?
[<修饰符>] @interface <标注名>{
返回值方法名称();
返回值方法名称();
……
}
例如:
public @interface MyComment {
int id();
String info();
}
4.java有几个内置标注?
有3个
@Override——用于修饰此方法覆盖了父类的方法,而非重载。
@Deprecated——用于修饰已经过时的方法。
@SuppressWarnings——用于通知Java编译器禁止特定的警告。
三、java常用类
1.字符串String是可变类还是不可变类?
是不可变类,一经创建就不能修改其内容了
2.字符串的常用方法有哪些?
charAt方法:可以返回指定位置的字符
substring方法:可以截取子字符串
length方法:返回字符串长度
indexOf方法:查找子串的位置
lastIndexOf方法:反向搜索字串的位置
replaceAll方法:替换字符串
split方法:分解字符串
toLowerCase, toUpperCase方法:字符串大小写转换
3.StringBuffer类和String类有什么区别?
StringBuffer是可变类,String是不可变类
4.StringBuffer类和StringBuilder类有什么区别?
StringBuffer类是线程安全的,StringBuilder类是线程不安全的
5.Math类主要提供了哪些方法?
Math类提供了大量的和数学运算相关的静态方法
6.Set集合和List集合共同的父接口是什么?
是Collection集合
7.Set集合和List集合有什么区别?
Set: Collection的子接口,不记录元素的保存顺序,且不允许有重复元素
List: Collection的子接口,记录元素的保存顺序,且允许有重复元素
8.ArrayList和LinkedList有什么不同?
ArrayList的内部实现是基于内部数组Object[],所以从概念上讲它更像数组
LinkedList的内部实现是基于一组连接的记录,所以它更像一个链表结构,所以它们在性能上有很大的差别。
ArrayList随机访问比较快,但插入和删除元素比较慢
LinkedList插入和删除元素比较快,但随机访问比较慢
9.HashTable和HashMap有什么不同?
HashTable是线程安全的,HashMap是线程不安全的
10.Vector和ArrayList有什么不同?
Vector是线程安全的,ArrayList是线程不安全的
四、IO流
1.流分成哪两类?
按照单位划分分成字节流和字符流。
按输入输出分成输入流和输出流
2.和文件流相关的有那几个类?
FileInputStream文件输入字节流
FileOutputStream文件输出字节流
FileReader文件输入字符流
FileWriter文件输出字符流
3.文件流操作应该用字节流还是字符流?
如果是纯文本文件应该用字符流
如果是二进制文件应该用字节流
4.文件操作用哪个类?
用java.io.File类
五、线程
1.创建一个线程类的两种方式?
继承Thread类
实现Runnable接口
2.线程体应该放在哪个方法里面?
run方法
3.启动新的线程用什么方法?
用start方法
4.一个线程对象能够用start多次启动吗?
不可以,一个线程方法只能start一次
5.线程有哪几种主要状态?
有五种,分别是:
新建状态,就绪状态,阻塞状态,运行状态,死亡状态
6.线程的同步需要用什么方法?
旧的方法是用synchronized关键字
新的方法是用ReentrantLock类的lock和unlock方法