1.请描述异常的继承体系
异常继承体系为:异常的根类是 java.lang.Throwable,其下有两个子类:java.lang.Error 与 java.util.Exception 。而Exception又分为编译时期异常:checked异常,与运行时期异常:runtime异常
2.请描述对错误(Error)的理解
Error:表示不可修复的恶性的错误,只能通过修改代码规避错误的产生,通常是系统级别的,所以很严重。
3.描述对异常(Expection的理解)
Exception:表示可修复的良性(相对于错误)的异常,异常产生后程序员可以并且应该通过代码的方式纠正,使程序继续运行,是必须要处理的。
4.请描述对运行时异常(RuntimeException)的理解
运行时期异常:runtime异常。在运行时期,检查异常.在编译时期,运行异常不会编译器检测(不报错)。
5.在main方法中创建并启动两个线程。第一个线程循环随机打印100以内的整数,直到第二个线程从键盘读取了“Q”命令。
public class TestStop{
public static void main(String[] args){
OutInfo out = new OutInfo();
Thread t = new Thread(out);
InputInfo input = new InputInfo(out);
Thread t2 = new Thread(input);
t.start();
t2.start();
}
}
class OutInfo implements Runnable{
private boolean flag = false;
public void run(){
while(!flag){
System.out.println((int)(Math.random()*100));
}
}
public void isStop(boolean flag){
this.flag = flag;
}
}
class InputInfo implements Runnable{
private OutInfo outInfo;
public InputInfo(OutInfo outInfo){
this.outInfo = outInfo;
}
public void run(){
Scanner scan = new Scanner(System.in);
String line = scan.next();
while(line != null){
System.out.println("============> " + line);
if(line.equalsIgnoreCase("Q")){
// 创建的对象不是同一个对象
//OutInfo outInfo = new OutInfo();
//outInfo.isStop(true);
outInfo.isStop(true);
break;
}
line = scan.next();
}
}
}
6.编写程序,在main方法中创建一个线程。线程每隔一定时间(200ms以内的随机时间)产生一个0-100之间的随机整数,打印后将该整数放到集合中;共产生100个整数,全部产生后,睡眠30秒,然后将集合内容打印输出;在main线程中,唤醒上述睡眠的线程,使其尽快打印集合内容。
public class TestSleep{
public static void main(String[] args){
Thread main = Thread.currentThread();
Test test = new Test(main);
Thread t = new Thread(test);
t.start();
try{
Thread.sleep(200 * 100);
}catch(InterruptedException e){
System.out.println("main被唤醒...");
}
t.interrupt();
}
}
class Test implements Runnable{
private List<Integer> list = new ArrayList<Integer>();
private Thread main;
public Test(Thread main){
this.main = main;
}
public void run(){
for(int i = 0; i < 100; i++){
try{
Thread.sleep((int)(Math.random() * 200));
}catch(InterruptedException e){
System.out.println("在生成100个数的过程中被唤醒...");
}
int num = (int)(Math.random() * 100);
System.out.print(num + "\t");
list.add(num);
}
System.out.println("100个数已生成");
// 唤醒处于阻塞状态的main线程
main.interrupt();
try{
Thread.sleep(1000 * 30);
}catch(InterruptedException e){
System.out.println("睡眠30的时候被唤醒...");
}
for(Integer num : list){
System.out.print(num + "\t");
}
System.out.println();
}
}
自用、复习。