好文档 - 专业文书写作范文服务资料分享网站

Java高级编程阶段测试(B)--答案

天下 分享 时间: 加入收藏 我要投稿 点赞

Java高级阶段试题(B)答案

注意:

考试时间为150分钟;试卷总分100分;60分以上为及格。

请遵守考试纪律,严禁各种形式作弊,一经发现,成绩按0分处理。 请在规定时间内,完成考试,延迟交卷成绩按0分处理。 选择题没有在题目后特殊提示多选,默认都是单选题。

1 B 11 B 21 BC 选择题(30分, 每题1分)

2 C 12 C 22 B 3 D 13 CD 23 C 4 D 14 B 24 C 5 C 15 A 25 C 6 C 16 C 26 E 7 B 17 A 27 C 8 A 18 BC 28 ABC 9 D 19 C 29 B 10 C 20 B 30 A 二 简答题(40分,共12题)

1 List Set Map 三个接口及常用实现类各自什么特点? Collection List ArrayList, Vector, LinkedList Set HashSet, TreeSet Map Hashtable Properties HashMap TreeMap

集合类型主要有3种:set(集)、list(列表)和map(映射) 集 Set:

它的对象不按特定方式排序,只是简单的把对象加入集合中

对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。 列表 List:

List接口与其实现类是容量可变的列表,可以按照索引访问集合中的元素,是有序的集合;列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。常用的有ArrayList vector 映射 Map:

映射中每个项都是成对的,Map是把键对象和值对象进行关联的容器。

映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,关键字应该是唯一的,常用的有HashMap,HashTable 2 线程和进程的区别?实现多线程的方式有哪几种?如何实现多线程同步? 区别:

1

线程和进程是不同的,每个进程都是一个独立运行的程序,拥有自己的变量,且不同进程间的变量不能共享;而 线程是运行在进程内部的,每个正在运行的进程至少有一个线程,而且不同的线程之间可以在进程范围内共享数据。也就是说进程有自己独立的存储空间,而线程是 和它所属的进程内的其他线程共享一个存储空间。 实现多线程的方法:

1、继承java.lang.Thread,并重写它的run()方法,将线程的执行主体放入其中。 2、实现java.lang.Runnable接口,实现run()方法,并将线程执行主体放入其中。 如何实现线程同步:

给一个方法增加synchronized修饰符之后就可以使它成为同步方法,这个方法 可以是静态方法和非静态方法,但不能是抽象类的抽象方法,也不能是接口中的接口方法

3 异常体系结构?Error和Exception区别?什么是编译时异常和运行时异常?

Error表示系统级的错误和程序不必处理的异常, Exception表示需要捕捉或者需要程序进行处理的异常。

编译时异常(checked)

在编译时,必须进行处理;如果不处理,则无法通过编译。 除了RuntimeException类及其子类,其他类都是编译时异常类。 运行时异常(unchecked)

Java编译器允许程序不对其进行处理,直接由运行时系统来处理。 RuntimeException及其子类都是运行时异常类。

4 请分别写出至少四个常见的编译时异常和运行时异常 常见的编译时异常: ? ? ? ? ?

ClassNotFoundException FileNotFoundException IOException ParseException SQLException

1

? ? ? ? ? ?

InterruptedException

ArrayIndexOutOfBoundsException StringIndexOutOfBoundsException NullPointerException ClassCastException ArithmeticException

常见的运行时异常:

? NumberFormatException

5 什么是 java 序列化和反序列化(Serializable)?如何实现一个Student类对象的序列化和反序列化? 什么是序列化和反序列化

序列化:将内存中的对象保存到文件系统中。 反序列化:保存在文件系统中的对象读取到内存中。 如何实现序列化和反序列化

通过ObjectInputStream和ObjectOutputStream类实现。 1-序列化对象的类必须实现Seriablizable接口。

2-通过ObjectOutputStream的writeObject方法实现。 1-使用ObjectInputStream的readObject方法。

2-要保证序列化和反序列化的类是同一个类,且seriaVersionUID要一致。 /*描述学生*/

//为了保证学生对象可以被序列化,我们让Student类来实现Serializable接口

public class Student implements Serializable {

//属性

private String name; private int age;

public Student(String name, int age) { this.name = name; this.age = age; }

public String getName() { return name; }

public void setName(String name) { this.name = name; }

public int getAge() { return age; }

public void setAge(int age) { this.age = age;

1

实现序列化的步骤:

实现反序列化的步骤

} } /*将学生对象序列化持久到硬盘文件中*/ public class ObjectOutputStreamDemo { public static void main(String[] args) throws IOException { //创建学生对象 Student s = new Student(\黑旋风\//把创建出来的学生对象持久化保存在硬盘中 //创建序列化对象 创建输出流对象并关联目标文件 ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(\ } } //使用序列化对象中的方法持久化学生对象 oos.writeObject(s); //关闭资源 oos.close(); /*演示反序列化操作*/ public class ObjectInputStreamDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { //创建反序列化对象,指定一个字节输入流用来读取持久文件 ObjectInputStream ois = new ObjectInputStream(new FileInputStream(\ }

6 简述final, finally,finalize?

final:修饰符(关键字) 有三种用法:如果一个类被声明为final,意味着它不能再派生出新的子

类,即不能被继承,因此它和abstract是反义词。将变量声明为

final,可以保证它们在使用中不被改变,被声明为final的变量必须在声明时给定初值,而在以后 的引用中只能读取不可修改。被声明为final的方法也同样只能使用,不能在子类中被 重写。

finally:通常放在try…catch…的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要JVM不关闭都能执行,可以将释放外部资源的代码写在finally块中。

finalize—方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类

1

} //使用反序列化对象ois调用函数进行读取数据 Student s = (Student) ois.readObject(); System.out.println(s.getName()+\//关闭资源 ois.close();

覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。

7 描述Java线程状态及转换过程

1. 新建(NEW):新创建了一个线程对象。

2. 可运行(RUNNABLE):线程对象创建后,其他线程(mai线程)调用该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu的使用权 。 3. 运行(RUNNING):可运行状态(runnable)的线程获得cpu时间片(timeslice),执行程序代码。

4. 阻塞(BLOCKED):阻塞状态是指线程因为某种原因放弃了cpu 使用权,也即让出了cpu timeslice,暂时停止运行。直到线程进入可运行(runnable)状态,才有机会再次获得cpu timeslice 转到运行(running)状态。阻塞的情况分三种:

(一). 等待阻塞:运行(running)的线程执行o.wait()方法,JVM会把该线程放入等待队列

(waitting queue)中。

(二). 同步阻塞:运行(running)的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池(lock pool)中。

(三). 其他阻塞:运行(running)的线程执行Thread.sleep(long ms)或t.join()方法,或者发出了I/O请求时,JVM会把该线程置为阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入可运行(runnable)状态。 5. 死亡(DEAD):线程run()、main() 方法执行结束,或者因异常退出了run()方法,则该线结束生命周期。死亡的线程不可再次复生。 8

什么是死锁?为什么会出现死锁?编写一个死锁的案例说明

所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 public class LockThread implements Runnable{ static ArrayList al1 = new ArrayList(); static ArrayList al2 = new ArrayList(); boolean flag ; public LockThread(boolean flag) { this.flag = flag; } @Override public void run(){ if(flag){ synchronized(al1) { System.out.println(\获得al1对象的锁\ try{ Thread.sleep(5000); } catch (InterruptedException e){ 1

Java高级编程阶段测试(B)--答案

Java高级阶段试题(B)答案注意:考试时间为150分钟;试卷总分100分;60分以上为及格。请遵守考试纪律,严禁各种形式作弊,一经发现,成绩按0分处理。请在规定时间内,完成考试,延迟交卷成绩按0分处理。选择题没有在题目后特殊提示多选,默认都是单选题。一1B11B21BC选择
推荐度:
点击下载文档文档为doc格式
06nwn8xq324mg6283nif6msol1o4p300uye
领取福利

微信扫码领取福利

微信扫码分享