}
}
super.test();
System.out.print(\
A、产生编译错误 B、代码可以编译运行,并输出结果AB C、代码可以编译运行,但没有输出 D、编译没有错误,但会产生运行时异常
四、分析题
阅读下面的程序,分析代码是否能编译通过,如果能编译通过,请列出运行的结果。如果不能编译通过,请说明原因。 代码一:进入catch代码块
进入finally代码块(程序编译能通过,这是因为int x = 2 / 0; System.out.println(x);这两条语句使用了try块,捕获了程序因为除以0而产生的异常情况,之后程序会继续向下执行,输出“进入catch代码块”,“进入finally代码块”。)
public class Test01 {
public static void main(String[] args) { }
try {
int x = 2 / 0;
System.out.println(x);
} catch (Exception e) { }
System.out.println(\进入catch代码块\System.out.println(\进入finally代码块\} finally {
}
代码二:不能,final修饰shout,不能被重写(程序编译不通过,这是因为在程序中使用了final关键字修饰Animal类,使得Animal类不能被继承。shout()方法中同样使用了final关键字,使得该方法不能被重写。)
final class Animal { }
class Dog extends Animal {
public final void shout() { }
// 程序代码
}
public void shout() { }
// 程序代码
class Test02 { }
public static void main(String[] args) { }
Dog dog=new Dog();
代码三:动物叫!
汪汪……
class Animal { }
class Dog extends Animal { }
public class Test03 { }
public static void main(String[] args) { }
Animal animal = new Dog(); animal.shout();
void shout() { }
super.shout();
System.out.println(\汪汪……\void shout() { }
System.out.println(\动物叫!\
代码四:不能,Dog没有实现Animal所有方法,Dog为抽象类不能创建对象(程序编译不通过,因为接
口中定义的方法不能有方法体,所以定义的eat()方法是错误的。接口中的方法必须在子类中全部实现,由于run()方法在子类中并没有重新实现,所以这也是错误的。)
interface Animal { }
class Dog implements Animal {
public void breathe() { void breathe(); void run(); void eat(){};
System.out.println(\’m breathing\}
public void eat() {
System.out.println(\’m eathing\} }
public class test04 {
public static void main(String [] args) { Dog dog = new Dog(); dog.breathe(); dog.eat(); } }
五、简答题
1、什么是方法重写?
在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写(覆盖)父类的方法。
2、什么是多态?
多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。
3、抽象类和接口的区别?
在Java中,使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。 接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。由于接口的特殊性,在定义时需要使用interface关键字。
六、编程题
请按照题目的要求编写程序并给出运行结果。
1、 设计一个学生类Student和它的一个子类Undergraduate,要求如下:
1) Student类有name(姓名)、和age(年龄)属性,一个包含两个参数的构造方法,用于给name和age
属性赋值,一个show()方法打印Student的属性信息
2) 本科生类Undergraduate增加一个degree(学位)属性。有一个包含三个参数的构造方法,前两个
参数用于给继承的name和age属性赋值,第三个参数给degree专业赋值,一个show()方法用于打印Undergraduate的属性信息
3) 在测试类中分别创建Student对象和Undergraduate对象,调用它们的show()。 2、设计一个Shape接口和它的两个实现类Square和Circle,要求如下:
1)Shape接口中有一个抽象方法area(),方法接收有一个double类型的参数,返回一个double类型的结果
2)Square和Circle中实现了Shape接口的area()抽象方法,分别求正方形和圆形的面积并返回 在测试类中创建Square和Circle对象,计算边长为2的正方形面积和半径为3的圆形面积
3、自定义一个异常类NoThisSoundException和Player类,在Player的play()方法中使用自定义异常,要求入下:
1) NoThisSongException继承Exception类,类中有一个无参和一个接收一个String类型参数的构
造方法,构造方法中都使用super关键字调用父类的构造方法。
2) Player类中定义一个play(int index)方法,方法接收一个int类型的参数,表示播放歌曲的索引,
当index>10时,paly()方法用throw关键字抛出NoThisSongException异常,创建异常对象时,调用有参的构造方法,传入“您播放的歌曲不存在”。
3) 在测试类中创建Player对象,并调用play()方法测试自定义的NoThisSongException异常,使
用try…catch语句捕获异常,调用NoThisSongException的getMessage()方法打印出异常信息。
第5章 多线程
一、填空题
1、一个应用程序中有多条并发执行的线索,每条线索都被称作一个线程______,它们会交替执行,彼此
间可以进行_通信_____。
2、在实现多线程的程序时有两种方式,一是通过继_Thread_____承类,二是通过实现Runnable______接口。
3、yield()方法只能让相同优先级或者更高优先级、处于_就绪_____状态的线程获得运行的机会。 4、在Java语言中,同步方法需要用到关键字_synchronized_,对于同步方法而言无需指定同步锁,它
的同步
锁是方法所在的_对象_____,也就是_this_____(关键字)。
5、在多任务系统中,每个独立执行的程序称之为_线程_____,也就是“正在运行的程序”。
6、线程的整个生命周期分为五个阶段,分别是_新建_____、就绪______、_运行_____、_阻塞_____、和死亡_____。
7、线程的优先级用1~10之间的整数来表示,其中__10___代表优先级最高,__1___代表优先级最低。 8、在Thread类中,提供了一个start()方法,该方法用于启动线程______,当新线程启动后,系统会自动调用__run()____方法。
9、要想解决线程间的通信问题,可以使用__wait()____、notify()______、_notifyALL()_____方法。 10、要将某个线程设置为后台线程,需要调用该线程的_setDaemon(true)_____方法,该方法必须在
_start()_____方法之前调用。
二、判断题
1、当我们创建一个线程对象时,该对象表示的线程就立即开始运行。错 2、如果前台线程全部死亡,后台线程也会自动死亡。对 3、同步代码块中的锁对象可以是任意类型的对象。对