前因:
记录在牛客上刷题的错题记事本
1. 以下哪项陈述是正确的?
A : 垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收
B : 垃圾收集允许程序开发者明确指定释放 哪一个对象
C : 垃圾回收机制保证了JAVA程序不会出现 内存溢出
D : 进入”Dead”状态的线程将被垃圾回收器回收
E : 以上都不对
答案选 E,
- A : 垃圾回收在jvm中优先级相当相当低。
- B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制。
- C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出。
- D:进入DEAD的线程,它还可以恢复,GC不会回收
2. 抽象类方法的访问权限默认都是public。( )
A : 正确
B : 错误
答案 B,
关于抽象类 :
- JDK 1.8以前,抽象类的方法默认访问权限为protected
- JDK 1.8时,抽象类的方法默认访问权限变为default
关于接口 :
- JDK 1.8以前,接口中的方法必须是public的
- JDK 1.8时,接口中的方法可以是public的,也可以是default的
- JDK 1.9时,接口中的方法可以是private的
3. 以下程序的输出结果为
class Base{
public Base(String s){
System.out.print("B");
}
}
public class Derived extends Base{
public Derived (String s) {
System.out.print("D");
}
public static void main(String[] args){
new Derived("C");
}
}
A : BD
B : DB
C : C
D : 编译错误
答案选 D, 在调用子类构造器之前,会先调用父类构造器,当子类构造器中没有使用"super(参数或无参数)"指定调用父类构造器时,是默认调用父类的无参构造器,如果父类中包含有参构造器,却没有无参构造器,则在子类构造器中一定要使用“super(参数)”指定调用父类的有参构造器,不然就会报错。
4. 往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:
public class OuterClass{
private float f=1.0f;
//插入代码到这里
}
// A
class InnerClass{
public static float func(){return f;}
}
// B
abstract class InnerClass{
public abstract float func(){}
}
// C
static class InnerClass{
protected static float func(){return f;}
}
// D
public class InnerClass{
static float func(){return f;}
}
答案选A B C D,
主要考核了这几个知识点:
- 静态内部类才可以声明静态方法
- 静态方法不可以使用非静态变量
- 抽象方法不可以有函数体
5. JAVA反射机制主要提供了以下哪些功能?
A : 在运行时判断一个对象所属的类
B : 在运行时构造一个类的对象
C : 在运行时判断一个类所具有的成员变量和方法
D : 在运行时调用一个对象的方法
答案选 A B C D。
普通的java对象是通过new关键字把对应类的字节码文件加载到内存,然后创建该对象的。
反射是通过一个名为Class的特殊类,用Class.forName(“className”);得到类的字节码对象,然后newInstance()方法在虚拟机内部构造这个对象(针对无参构造函数)。
也就是说反射机制让我们可以先拿到java类对应的字节码对象,然后动态的进行任何可能的操作,包括:
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时调用任意一个对象的方法