Java牛客 -- 专项练习(8)

前因:

记录在牛客上刷题的错题记事本

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,

主要考核了这几个知识点:

  1. 静态内部类才可以声明静态方法
  2. 静态方法不可以使用非静态变量
  3. 抽象方法不可以有函数体

5. JAVA反射机制主要提供了以下哪些功能?

A : 在运行时判断一个对象所属的类
B : 在运行时构造一个类的对象
C : 在运行时判断一个类所具有的成员变量和方法
D : 在运行时调用一个对象的方法

答案选 A B C D。

普通的java对象是通过new关键字把对应类的字节码文件加载到内存,然后创建该对象的。

反射是通过一个名为Class的特殊类,用Class.forName(“className”);得到类的字节码对象,然后newInstance()方法在虚拟机内部构造这个对象(针对无参构造函数)。

也就是说反射机制让我们可以先拿到java类对应的字节码对象,然后动态的进行任何可能的操作,包括:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任意一个对象的方法
发布了15 篇原创文章 · 获赞 1 · 访问量 3119

猜你喜欢

转载自blog.csdn.net/ZeroWdd/article/details/104571549