3、方法重载指的是在一个类中可以声明多个同名的方法,而方法中参数的个数或者数据类型不一致。
调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。
六、编程题
1、参考答案
publicclassTest01{
publicstaticvoidmain(String[]args){
intsum=0;
for(inti=1;i<100;i++){
if(i%2!
=0)
sum+=i;
}
}
}
2、参考答案
publicclassTest02{
publicstaticvoidmain(Stringargs[]){
inty=function(0);
}
publicstaticintfunction(intx){
inty;
if(x>0){
y=x+3;
}elseif(x==0){
y=0;
}else{
y=x*x-1;
}
returny;
}
}
3、参考答案
publicclassTest03{
publicstaticvoidmain(String[]args){
int[]arr={25,24,12,76,101,96,28};
for(inti=0;i<-1;i++){
ewChild();
();
}
}
第3章面向对象(下)
一、填空题
1、继承
2、方法,抽象类
3、import
4、子类、父类、基类
5、Exception
6、final
7、super
8、Object
9、try、catch
10、jar–cvf,java–jar
二、判断题
1、错2、对3、错4、对5、对
三、选择题
1、B2、C3、ABC4、ABCD5、C6、AC7、C8、D9、A10、B
四、程序分析题
1、程序编译能通过,这是因为intx=2/0;这两条语句使用了try块,捕获了程序因为除以0而产生的异常情况,之后程序会继续向下执行,输出“进入catch代码块”,“进入finally代码块”。
2、程序编译不通过,这是因为在程序中使用了final关键字修饰Animal类,使得Animal类不能被继承。
shout()方法中同样使用了final关键字,使得该方法不能被重写。
3、程序编译能通过,输出结果为“动物叫!
”和“汪汪……”,因为在程序中调用shout()方法时,首先会通过()调用父类的方法说出“动物叫!
”之后再输出“汪汪……”
4、程序编译不通过,因为接口中定义的方法不能有方法体,所以定义的eat()方法是错误的。
接口中的方法必须在子类中全部实现,由于run()方法在子类中并没有重新实现,所以这也是错误的。
五、简答题
1、在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写(覆盖)父类的方法。
2、多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。
简单的说,多态就是使用父类类型的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。
3、在Java中,使用abstract关键字修饰的类称之为抽象类。
抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。
抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。
由于接口的特殊性,在定义时需要使用interface关键字。
六、编程题
1、参考答案
classStudent{
publicStringname;
publicintage;
publicStudent(Stringname,intage){
=name;
=age;
}
publicvoidshow(){
}
}
classUnderGraduateextendsStudent{
publicStringdegree;
publicUnderGraduate(Stringname,intage,Stringdegree){
super(name,age);
=degree;
}
publicvoidshow(){
}
}
publicclassTest01{
publicstaticvoidmain(String[]args){
Studentstudent=newStudent("zhangsan",16);
();
UnderGraduateunderGraduate=newUnderGraduate("lisi",20,"bechalor");
();
}
}
2、参考答案
interfaceShape{
doublearea(doublegivenValue);
}
classSquareimplementsShape{
publicdoublearea(doublesideLength){
returnsideLength*sideLength;
}
}
classCircleimplementsShape{
publicdoublearea(doubler){
return*r*r;
}
}
publicclassTest02{
publicstaticvoidmain(String[]args){
Shapesquare=newSquare();
Shapecircle=newCircle();
}
}
3、参考答案
classNoThisSongExceptionextendsException{
publicNoThisSongException(){
super();
}
publicNoThisSongException(Stringmessage){
super(message);
}
}
classPlayer{
publicvoidplay(intindex)throwsNoThisSongException{
if(index>10){
thrownewNoThisSongException("您播放的歌曲不存在");
}
}
}
publicclassTest03{
publicstaticvoidmain(String[]args){
Playerplayer=newPlayer();
try{
(13);
}catch(NoThisSongExceptione){
}
}
}
第4章多线程
一、填空题
1、线程、通信
2、Thread、Runnable
3、就绪
4、synchronized、对象、this
5、进程
6、新建状态(New)、就绪状态(Runnable)、运行状态(Running)、阻塞状态(Blocked)、死亡状态(Terminated)
7、10、1
8、开启一个新线程、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、();
五、简答题
1、一种是继承包下的Thread类,覆写Thread类的run()方法,在run()方法中实现运行在线程上的代码。
newThread(){
publicvoidrun(){}
}.start();
newThread(newRunnable(){
publicvoidrun(){}
}).start()
2、调用sleep()方法,正在执行的线程主动让出CPU去执行其他线程,在sleep()方法指定的时间过后,CPU才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep()方法并不会释放锁,即使当前线程使用sleep()方法让出了CPU,但其它被同步锁挡住了的线程也无法得到执行。
wait()在一个已经进入了同步锁的线程内进行调用,让当前线程暂时让出同步锁,以便其它正在等待此锁的线程可以得到同步锁并运行。
当其它线程调用了notify()方法后,调用wait()方法的线程就会解除wait状态,当再次获得同步锁后,程序可以继续向下执行。
六、编程题
1、参考答案
publicclassMyThreadextendsThread{
publicMyThread(Stringname){
super(name);
}
publicvoidrun(){
}
publicstaticvoidmain(String[]args){
newMyThread("Thread1").start();
newMyThread("Thread2").start();
}
}
2、参考答案
publicclassMyRunnableimplementsRunnable{
publicvoidrun(){
for(inti=0;i<50;i++){
"new");
}
}
publicstaticvoidmain(String[]args){
newThread(newMyRunnable()).start();
for(inti=0;i<100;i++){
"main");
}
}
}
3、参考答案
publicclassTest01{
publicstaticvoidmain(String[]args){
Teachert=newTeacher();
newThread(t,"陈老师").start();
newThread(t,"高老师").start();
newThread(t,"李老师").start();
}
}
classTeacherimplementsRunnable{
privateintnotes=80;
publicvoidrun(){
while(true){
dispatchNotes();tart();
}
for(inti=0;i<10;i++){
threadList[i].join();
}
}
}
第5章JavaAPI
一、填空题
1、String、StringBuffer
2、Date、Calendar、DateFormat
3、getRuntime()
4、sqrt()
5、DateFormat
6、π、e
7、Random、
8、length()
9、静态
10、edcba
二、判断题
1、错2、错3、对4、错5、对
三、选择题
1、C2、C3、D4、C5、C6、B7、C8、A9、A10、B
四、程序分析题
1、程序编译能通过,输出结果如下
5
-5
2、程序编译能通过,输出结果如下
():
15
(0):
d
lastIndexOf(m):
10
substring(2,4):
fe
indexOf(g):
5
五、简答题?
1、String类是不可变类,即字符串值一旦初始化后就不可能改变。
StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。
2、Date类用来表示某个特定的瞬间,能够精确到毫秒。
而在实际应用中,往往需要把一个日期中的年、月、日等信息单独返回进行显示或处理,这个类中的大部分方法都已被标记过时。
Calender类基本取代了Date类,该类中定义了一系列用于完成日期和时间字段操作的方法。
Calendar的getTime()方法,getTime()返回一个表示Calendar时间值的Date对象,同时Calendar有一个setTime(Datedate)方法,setTime()方法接收一个Date对象,将Date对象表示的时间值设置给Calendar对象,通过这两个方法就可以完成Date和Calendar对象之间的转换。
六、编程题
1、参考答案
publicclassTest01{
publicstaticvoidmain(String[]args){
Stringstr="HelloWorld";
oLowerCase());
}elseif(ch[i]>='a'&&ch[i]<='z'){
(ch[i]).toUpperCase());
}
}
}
}
2、参考答案
publicclassTest02{
publicstaticvoidmain(String[]args){
Calendarcalendar=();
100);
Datedate=();
DateFormatformat=;
Stringstring=(date);
}
}
3、参考答案
publicclassTest03{
publicstaticvoidmain(String[]args){
Randomrand=newRandom();
int[]num=newint[5];
for(inti=0;i<;i++){
num[i]=20+(31);
}
}
}
第6章集合类
一、填空题
1、集合
2、Comparator
3、有序、可重复,无序、不可重复
4、hashNext()、next()
5、Collection、Map
6、键、值
7、ListIterator
8、ArrayList、LinkedList,HashSet、TreeSet,HashMap、TreeMap
9、put()、get()
10、Collections、Arrays
二、判断题
1、错2、对3、对4、错5、对
三、选择题
1、BC2、A3、D4、ABD5、C6、AB7、D8、AB9、ABC10、B
四、程序分析题
1、程序可以编译通过,输出结果是“a、b、c”,因为TreeSet集合不允许存放重复元素,第2次增加的元素c会覆盖之前存入的元素c,所以输出结果是“a、b、c”,而不是“a、b、c、c”。
2、程序不可以编译通过,这是由于向ArrayList集合中存入元素时,集合并不能记住元素的类型,因此在取出元素时,只能使用Object类型,而不能使用String类型。
3、程序可以编译通过,但是什么也没有打印。
使用ListIterator进行从后向前的遍历集合,可以使用以下两种方法,一是使用listIterator(intindex)方法将索引index的值设置为集合元素的数目,也就是ListIteratorit=(3);,二是将程序先从前向后遍历,然后再从后向前遍历。
4、程序编译不通过,由于Map集合在遍历的过程中不能使用集合对象本身删除元素,这会导致并发修改异常,若想删除集合中的元素,可以使用Iterator的remove()方法。
五、简答题
1、为了使程序能方便的存储和操作数目不固定的一组数据,JDK提供了一套类库,这些类都位
于包中,统称为集合。
集合框架中包含3个接口,分别是List、Set、Map。
2、List的特点是元素有序、元素可重复。
List接口的主要实现类有ArrayList和LinkedList。
Set的特点是元素无序、元素不可重复。
Set接口的主要实现类有HashSet和TreeSet。
Map的特点是存储的元素是键(Key)、值(Value)映射关系,元素都是成对出现的。
Map接口的主要实现类有HashMap和TreeMap。
3、Collection是一个单例集合接口。
它提供了对集合对象进行基本操作的通用方法。
Collections是一个工具类。
它包含各种有关集合操作的方法。
六、编程题
1、参考答案
import.*;
publicclassTest01{
publicstaticvoidmain(String[]args){
ArrayListlist=newArrayList();
for(inti=0;i<10;i++){
("A"+i);
}
Iteratorit=();
while()){
Objectobj=();
}
}
}
2、参考答案
import.*;
publicclassTest02{
publicstaticvoidmain(String[]args){
HashSethashSet=newHashSet();
Personp1=newPerson("Jack",25);
Personp2=newPerson("Rose",23);
Personp3=newPerson("Jack",27);
(p1);
(p2);
(p3);
for(Objectobj:
hashSet){
Personp=(Person)obj;
}
}
}
classPerson{
Stringname;
intage;
publicPerson(Stringname,intage){
super();
=name;
=age;
}
publicinthashCode(){
return();
}
publicbooleanequals(Objectobj){
if(this==obj)
returntrue;
if(obj==null)
returnfalse;
Personother=(Person)obj;
}
}
3、参考答案
import.*;
publicclassTest03{
publicstaticvoidmain(String[]args){
TreeMapmap=newTreeMap(newMyComparator());
("1"