第3章面向对象(上)
一、填空题1、封装、继承、多态2、new3、成员变量、局部变量4、类、类5、this6、finalize()
7、静态变量8、内部类9、javadoc10、private二、判断题1、对2、对3、错4、对5、错三、选择题1、B2、D3、B4、ABC5、ABCD6、ACD7、ABCD8、ABCD9、D10、D四、程序分析题1、程序不能编译通过,因为在类A中的成员变量secret用private修饰,所以在类Test1中无法访问。
2、程序不能编译通过,因为在静态方法method()中不能访问非静态成员变量x。
3、程序能够编译通过,运行的结果为“inner”。
五、简答题1、构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。
而普通方法只有在使用的时候才会被调用。
在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值2、单例模式可以保证在整个程序运行期间针对该类只存在一个实例对象。
六、编程题1、参考答案
classStudent{privateStringname;privatedoublegrade;publicStudent(){}publicStudent(Stringname,doublegrade){this.name=name;this.grade=grade;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicdoublegetGrade(){returngrade;}publicvoidsetGrade(doublegrade){this.grade=grade;}}publicclassTest01{publicstaticvoidmain(String[]args){Studentstu1=newStudent();
stu1.setName("zhangsan");stu1.setGrade(99);Studentstu2=newStudent("lisi"100);}}
2、参考答案
classFather{
privateStringname="zhangjun";classChild{publicvoidintroFather(){System.out.println("MyFather'snameis"+name);}}}publicclassTest02{publicstaticvoidmain(String[]args){Father.Childchild=newFather().newChild();child.introFather();}
}
第4章面向对象(下)
一、填空题1、继承2、方法,抽象类3、import4、子类、父类、基类5、Exception6、final7、super8、Object9、try、catch10、jar–cvf,java–jar二、判断题1、错2、对3、错4、对5、对三、选择题1、B2、C3、ABC4、ABCD5、C6、AC7、C8、D9、A10、B四、程序分析题1、程序编译能通过,这是因为intx=2/0;System.out.println(x);这两条语句使用了try块,捕获了程序因为除以0而产生的异常情况,之后程序会继续向下执行,输出“进入catch代码块”,“进入finally代码块”。
2、程序编译不通过,这是因为在程序中使用了final关键字修饰Animal类,使得Animal类不能被继承。
shout()方法中同样使用了final关键字,使得该方法不能被重写。
3、程序编译能通过,输出结果为“动物叫!
”和“汪汪……”,因为在程序中调用shout()方法时,首先会通过super.shout()调用父类的方法说出“动物叫!
”之后再输出“汪汪……”4、程序编译不通过,因为接口中定义的方法不能有方法体,所以定义的eat()方法是错误的。
接口中的方法必须在子类中全部实现,由于run()方法在子类中并没有重新实现,所以这也是错误的。
五、简答题1、在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写(覆盖)父类的方法。
2、多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。
简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。
3、在Java中,使用abstract关键字修饰的类称之为抽象类。
抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。
抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。
由于接口的特殊性,在定义时需要使用interface关键字。
六、编程题1、参考答案
classStudent{publicStringname;publicintage;publicStudent(Stringname,intage){this.name=name;this.age=age;}publicvoidshow(){System.out.println("name:
"+name+"age:
"+age);}}classUnderGraduateextendsStudent{publicStringdegree;publicUnderGraduate(Stringname,intage,Stringdegree){super(name,age);this.degree=degree;}publicvoidshow(){System.out.println("name:
"+name+"age:
"+age+"degree:
"+degree);}}publicclassTest01{publicstaticvoidmain(String[]args){Studentstudent=newStudent("zhangsan"16);student.show();UnderGraduateunderGraduate=newUnderGraduate("lisi"20,"bechalor");underGraduate.show();}
}
2、参考答案
interfaceShape{doublearea(doublegivenValue);}classSquareimplementsShape{publicdoublearea(doublesideLength){returnsideLength*sideLength;}}classCircleimplementsShape{publicdoublearea(doubler){returnMath.PI*r*r;}}publicclassTest02{publicstaticvoidmain(String[]args){Shapesquare=newSquare();Shapecircle=newCircle();System.out.println(square.area
(2));System.out.println(circle.area(3));}}
3、参考答案
classNoThisSongExceptionextendsException{publicNoThisSongException(){super();}publicNoThisSongException(Stringmessage){super(message);}}classPlayer{publicvoidplay(intindex)throwsNoThisSongException{if(index>10){thrownewNoThisSongException("您播放的歌曲不存在");}System.out.println("正在播放歌曲");}}publicclassTest03{publicstaticvoidmain(String[]args){Playerplayer=newPlayer();try{
player.play(13);}catch(NoThisSongExceptione){System.out.println("异常信息为:
"+e.getMessage());}}}
第5章多线程
一、填空题1、线程、通信2、Thread、Runnable3、就绪4、synchronized、对象、this5、进程6、新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、死亡状态(Terminated)7、10、18、开启一个新线程、run()方法9、wait()、notify()、notifyAll()10、setDaemon(true)、start()二、判断题1、错2、对3、对4、错5、错三、选择题1、B2、AC3、ABC4、BC5、ABD6、ABC7、C8、D9、AB10、ABCD四、程序分析题1、程序不能编译通过,因为RunHandler类没有实现Runnable接口,因此RunHandler的实例对象不能作为参数传递给Thread的构造方法。
2、程序不能编译通过,因为Thread的子类A重写的run()方法的访问级别不能低于父类run()方法的。
访问级别3、程序不能编译通过,因为同步方法中调用wait()方法的对象必须为同步锁对象。
4、t.start();五、简答题1、一种是继承java.lang包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。
newThread(){publicvoidrun(){}}.start();
另一种就是实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。
newThread(newRunnable(){publicvoidrun(){}}).start()
2、调用sleep()方法,正在执行的线程主动让出CPU去执行其他线程,在sleep()方法指定的时间过后,CPU才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep()方法并不会释放锁,即使当前线程使用sleep()方法让出了CPU,但其它被同步锁挡住了的线程也无法得到执行。
wait()
在一个已经进入了同步锁的线程内进行调用,让当前线程暂时让出同步锁,以便其它正在等待此锁的线程可以得到同步锁并运行。
当其它线程调用了notify()方法后,调用wait()方法的线程就会解除wait状态,当再次获得同步锁后,程序可以继续向下执行。
六、编程题1、参考答案
publicclassMyThreadextendsThread{publicMyThread(Stringname){super(name);}publicvoidrun(){System.out.println(this.getName());}publicstaticvoidmain(String[]args){newMyThread("Thread1").start();newMyThread("Thread2").start();}}
2、参考答案
publicclassMyRunnableimplementsRunnable{publicvoidrun(){for(inti=0;i<50;i++){System.out.println("new");}}publicstaticvoidmain(String[]args){newThread(newMyRunnable()).start();for(inti=0;i<100;i++){System.out.println("main");}}}
3、参考答案
publicclassTest01{publicstaticvoidmain(String[]args){Teachert=newTeacher();newThread(t,"陈老师").start();newThread(t,"高老师").start();newThread(t,"李老师").start();}}classTeacherimplementsRunnable{privateintnotes=80;publicvoidrun(){while(true){
dispatchNotes();//调用售票方法if(notes<=0){break;}}}privatesynchronizedvoiddispatchNotes(){if(notes>0){try{Thread.sleep(10);//经过的线程休眠10毫秒}catch(InterruptedExceptione){e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"---发出的笔记"+notes--);}}}
4、参考答案
publicclassAccumulatorextendsThread{privateintstratNum;publicstaticintsum;publicAccumulator(intstartNum){this.stratNum=startNum;}publicstaticsynchronizedvoidadd(intnum){sum+=num;}publicvoidrun(){intsum=0;for(inti=0;i<10;i++){sum+=stratNum+i;}add(sum);}publicstaticvoidmain(String[]args)throwsException{Thread[]threadList=newThread[10];for(inti=0;i<10;i++){threadList[i]=newAccumulator(10*i+1);threadList[i].start();}for(inti=0;i<10;i++){threadList[i].join();}
System.out.println("Sumis:
"+sum);}}
第6章JavaAPI
一、填空题1、String、StringBuffer2、Date、Calendar、DateFormat3、getRuntime()4、sqrt()5、DateFormat6、π、e7、Random、java.util8、length()9、静态10、edcba二、判断题1、错2、错3、对
4、错5、对6、B7、C8、A9、A10、B
三、选择题1、C2、C3、D4、C5、C四、程序分析题1、程序编译能通过,输出结果如下
57.0-8.0-58.1-6.1
2、程序编译能通过,输出结果如下
str.length():
15str.charAt(0):
dlastIndexOf(m):
10substring(2,4):
feindexOf(g):
5
五、简答题1、String类是不可变类,即字符串值一旦初始化后就不可能改变。
StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。
2、Date类用来表示某个特定的瞬间,能够精确到毫秒。
而在实际应用中,往往需要把一个日期中的年、月、日等信息单独返回进行显示或处理,这个类中的大部分方法都已被标记过时。
Calender类基本取代了Date类,该类中定义了一系列用于完成日期和时间字段操作的方法。
Calendar的getTime()方法,getTime()返回一个表示Calendar时间值的Date对象,同时Calendar有一个setTime(Datedate)方法,setTime