1、在 JAVA 编程中, Java 编译器会将 Java 程序转换为( )
正确答案: A 你的答案: A (正确)
字节码
可执行代码
机器代码
以上都不对
题解:
编译器将Java源代码编译成字节码class文件
类加载到JVM里面后,执行引擎把字节码转为可执行代码
执行的过程,再把可执行代码转为机器码,由底层的操作系统完成执行。
2、执行如下代码后输出结果为( )
public class Test { public static void main(String[] args) { System.out.println("return value of getValue(): " + getValue()); } public static int getValue() { int i = 1; try { i = 4; } finally{ i++; return i; } } }
正确答案: C 你的答案: C (正确)
return value of getValue(): 1
return value of getValue(): 4
return value of getValue(): 5
其他几项都不对
题解:
经过try之后i变成4,在经过finally,i变为5
3、命令javac-d参数的用途是?()
正确答案: A 你的答案: A (正确)
指定编译后类层次的根目录
指定编译时需要依赖类的路径
指定编译时的编码
没有这一个参数
题解:
javac -d 指定放置生成的类文件的位置
javac -s 指定放置生成的源文件的位置
4、关于Java的抽象类、接口,以下描述错误的是?
正确答案: C 你的答案: C (正确)
抽象类不一定含有抽象方法,接口中的方法都是抽象方法
一个类只能继承一个抽象类,但可以实现多个接口;一个接口可以继承多个接口
抽象类和接口中的方法都没有方法体
抽象类可以含有私有成员变量,接口不含有私有成员变量
题解:
A:抽象类不一定含有抽象方法,接口中的方法都是抽象方法。
接口中的方法默认修饰符有public abstract。
B:一个类只能继承一个一个抽象类,但可以实现多个接口;一个接口可以继承多个接口。
Java里类是单继承的,接口是可以多继承的,用关键字extends。
C:抽象类和接口中的方法都没有方法体。
抽象类中的方法是可以有方法体的。JDK1.8之后,接口中的方法也可以有方法体,用default关键字修饰方法。
D:抽象类可以含有私有成员变量,接口不含有私有成员变量。
接口中的成员变量都是public static final的,一般用作常量。
5、在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()
正确答案: B 你的答案: B (正确)
this.A(x)
this(x)
super(x)
A(x)
题解:
this的作用其中一个就是在一个构造方法中调用另一个构造方法,格式为this(参数);
super是调用父类的方法;
A(a)这种形式是在new一个类时使用。
6、下列哪个修饰符可以使在一个类中定义的成员变量只能被同一包中的类访问?
正确答案: B 你的答案: B (正确)
private
无修饰符
public
protected
题解:
无修饰符就是默认权限,也叫包访问权限,只能被同一包内类访问
7、下列Java代码中的变量a、b、c分别在内存的____存储区存放。
class A { private String a = “aa”; public boolean methodB() { String b = “bb”; final String c = “cc”; } }
正确答案: C 你的答案: C (正确)
堆区、堆区、堆区
堆区、栈区、堆区
堆区、栈区、栈区
堆区、堆区、栈区
静态区、栈区、堆区
静态区、栈区、栈区
题解:
a是类中的成员变量,存放在堆区
b、c都是方法中的局部变量,存放在栈区
堆区:只存放类对象,线程共享;
方法区:又叫静态存储区,存放class文件和静态数据,线程共享;
栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;
8、以下哪些方法是Object类中的方法
正确答案: A B C D 你的答案: A B C D (正确)
clone()
toString()
wait()
finalize()
题解:
都是
9、A,B,C,D 中哪些是 setvar的重载?
public class methodover
{
public void setVar(int a, int b, float c) {}
}
正确答案: A C D 你的答案: A C D (正确)
private void setVar(int a, float c, int b){}
protected void setVar(int a, int b, float c){}
public int setVar(int a, float c, int b){return a;}
public int setVar(int a, float c){return a;}
题解:
重载是在同一个类中,有多个方法名相同,参数列表不同(参数个数不同,参数类型不同),与方法的返回值无关,与权限修饰符无关,B中的参数列表和题目的方法完全一样了。
10、下面哪些描述是正确的:( )
public class Test { public static class A { private B ref; public void setB(B b) { ref = b; } } public static Class B { private A ref; public void setA(A a) { ref = a; } } public static void main(String args[]) { … start(); …. } public static void start() { A a = new A(); B b = new B(); a.setB(b); b = null; // a = null; … } }
正确答案: B C 你的答案: B C (正确)
b = null执行后b可以被垃圾回收
a = null执行后b可以被垃圾回收
a = null执行后a可以被垃圾回收
a,b必须在整个程序结束后才能被垃圾回收
类A和类B在设计上有循环引用,会导致内存泄露
a, b 必须在start方法执行完毕才能被垃圾回收
题解:
内存如下:
a -> “a(b)”
b -> “b”
a引用指向一块空间,这块空间里面包含着b对象
b引用指向一块空间,这块空间是b对象
A选项,b = null执行后b可以被垃圾回收。这里"b可以被垃圾回收"中的b指的是引用b指向的内存。这块内存即使不被引用b指向,还是被引用a指向着,不会被回收。
B选项,a = null执行后b可以被垃圾回收。从代码中可以看到,a = null是在b = null后执行的,该行执行后,引用a和b都没有指向对象,对象会被回收。
C选项,同理。
答案汇总:
1、正确答案: A
2、正确答案: C
3、正确答案: A
4、正确答案: C
5、正确答案: B
6、正确答案: B
7、正确答案: C
8、正确答案: A B C D
9、正确答案: A C D
10、正确答案: B C
以上部分题解来自牛客评论区,感谢评论区大佬的解释。