第二次JAVA基础考试心得
错题总结
一
1,A--成员函数的重写是直接覆盖父类的(继承中),但是成员变量重写是不会进行覆盖的。从存储角度看,属性是存储进堆中的,而方法只是在栈中暂存,不做长时间保存,执行过就释放,因此属性不变。
D--只有子类继承父类的方法才可以覆盖,父类私有的方法不可以覆盖。final修饰的方法不可以被覆盖的。
2,A--instanceof的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。
B--因为没有默认值,声明的时候需要初始化。
D--如果子类也为抽象类,则可以不必全部实现抽象类的抽象方法,非抽象子类必须实现抽象父类的抽象方法。
E--向上转型的时候,子类和父类如果拥有相同名字的成员变量时,访问的是父类里的成员变量。
F--内部类访问外部类的方法时需要实例化外部类对象
G--静态内部类的变量是可以任意权限修饰的包括静态的.
3,A--不能和abstract一起使用的修饰符有static,final,private。可以和public一起使用。
C--接口中只能包含抽象方法和常量
D--局部内部类不可以用public,private修饰符修饰。
E--接口和抽象类都不能直接实例化
4,A--instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
D--对象是类的实例
6,B--如果有带参的构造函数,JVM不会生成一个默认的构造函数
7,A--因为父类中的方法是被final修饰的,不能被子类重写,而且子类的方法是一个有参的方法,所以第一个调用是调用的父类方法,输出为1,第二个调用的是子类的有参方法,所以输出为2,答案选A
8,
B--接口里的被赋值的属性是常量,默认会有publicstatic final前缀。不能和abstract一起使用的修饰符有static,final,private。
D--不能和abstract一起使用的修饰符有static,final,private。
F--若类中有finalabstract修饰的方法,abstract不能和final一起使用
10,A--instanceof的作用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。
B--普通成员内部类是不可以定义静态变量的
D--局部内部类不能用publicprivate等修饰符修饰。
E--要访问内部类先实例化外部类,再实例化内部类。
11,E--类实现接口,利用关键字implements完成。
12,B--抽象类的方法可以有普通方法,不一定全是抽象方法
C--继承抽象类的子类可以为普通类(实现了父类所有的抽象方法)
D--普通类也可以实现接口
14,A--因为子类继承父类,所以会先调用父类的构造函数,先输出B然后再调用子类的构造函数输出D,所以输出BD,答案为A
15,try必不可少,catch和finally可以任意选择
16,B--自定义异常类可以继承Throwable类或者Exception,而不要继承Error类。
D--肯定有意义,不然干嘛要自定义异常
18,A--向上转型的时候,父类与子类有相同名字的普通成员变量时,访问的时父类里面的,所以body.a先调用父类的为20,然后如果父类与子类有相同名字的普通成员方法时,访问的时子类里面的,但是由于子类没有含参方法,所以还是调用父类的方法,所以输出为20,答案选A。
20,A--Java抽象类不能被实例化
C--抽象类可以有普通方法
二
2,首先,里面有一个静态代码块,使优先于主函数执行的,i的默认值为0,然后++变为了1,Le.show()调用了show方法,输出为2,然后Lel = newLe(5,6),调用了有参构造函数Le,并传入俩个参数,把第二的参数6赋值给了this.i,再调用有参show()方法,有参show方法里面先调用无参show()方法,输出this.i++也就是7,然后输出传入的参数2,由于是先赋值再++,所以是输出2而不是3。最后再一次调用无参show()方法,也就是输出this.i++,7+1=8,所以答案是27 2 8。
3,编译错误,成员内部类的属性和方法不可以用static修饰
4,粗心,在System.out.println("age"+p1.age+p2.age);中,居然把p1.age和p2.ag当算术运算给相加了,直接输出就好。
三
重新编程如下:
1,使用二分法查找数组中int[]{10,20,30,40,50,60}中某个元素的位置
publicclass Demo03 {
publicstatic void main(String[] args) {
int[]is={10,20,30,40,50,60};
Arrays.sort(is);
System.out.println(myBinary(is,10));
for(int num:is){
System.out.print(num+"");
}
}
//二分法
publicstatic int myBinary(int[] is, int num) {
intlow = 0;
inthigh = is.length - 1;
while(low <= high) {
intmid = (low + high) / 2;
if(is[mid] > num) {
high= mid - 1;
}else if (is[mid] < num) {
low= mid + 1;
}else {
returnmid;
}
}
return-1;
}
}
2,编程找出1000以内的所有完数
publicclass Kaoshi0327 {
publicstatic void main(String[] args) {
for(int i = 1; i <= 1000; i++) {
intnum = 0;
for(int j = 1; j <= i; j++) {
if(i % j == 0) {
num= num + j;
if(num == i)
System.out.println(i);
}
}
}
}
}
由于时间大部分花在选择题上,导致只来得及看了题目便到了考试时间。但自己编程能力较差,也是一方面原因,以后要多加强自己的编程能力,勤加练习。
2017年3月26日