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

前因:

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

1. 有以下类定义: 运行后:正确的是

class Foo {
    final int i;
    int j;
    public void doSomething() {
        System.out.println(++j + i);
    }
}
A : 0
B : 1
C : 2
D : 不能执行,因为编译有错

正确答案选D, 类的final成员变量必须满足以下其中一个条件

  • 在构造函数中赋值
  • 初始化赋值

2. 以下不是修饰符final的作用的是( )。

A : 修饰常量
B : 修饰不可被继承的类
C : 修饰不可变类
D : 修饰不可覆盖的方法

答案选C, final的作用:

  • 修饰变量,变量的引用地址不可变,但是地址中的内容可以变。
@Data
@AllArgsConstructor
class Student {
    private Integer id;
    private String name;
}
public static void main(String[] args) {
    final Student student = new Student(1,"张三");
    System.out.println(student);
    student.setName("李四");
    System.out.println(student);
}
Student(id=1, name=张三)
Student(id=1, name=李四)
  • 修饰方法,方法不可被重写,但是还是可以重载

  • 修饰类,类不可继承。

不可变类,说的是一个类一旦被实例化,就不可改变自身的状态。常见的比如String和基本数据类型的包装类,对于这种不可变类,一旦在进行引用传递的时候,形参一开始就和实际参数指向的不是一个地址,所以在方法中对形参的改变,并不会影响实际参数。

3. 在Java中,对于不再使用的内存资源,如调用完成的方法,“垃圾回收器”会自动将其释放。( )

A : 正确
B : 错误

答案选B, JVM 内存可简单分为三个区:

  • 堆区(heap):用于存放所有对象,是线程共享的(注:数组也属于对象)
  • 栈区(stack):用于存放基本数据类型的数据和对象的引用,是线程私有的(分为:虚拟机栈和本地方法栈)
  • 方法区(method):用于存放类信息、常量、静态变量、编译后的字节码等,是线程共享的(也被称为非堆,即 None-Heap)

Java 的垃圾回收器(GC)主要针对堆区

4. java中下面哪些是Object类的方法()

A : notify()
B : notifyAll()
C : sleep()
D : wait()

答案选A,B,D,Object类中方法:

  • protected Object clone()创建并返回此对象的一个副本。

  • boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。

  • protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

  • class getClass()返回此 Object 的运行时类。

  • int hashCode()返回该对象的哈希码值。

  • void notify()唤醒在此对象监视器上等待的单个线程。

  • void notifyAll()唤醒在此对象监视器上等待的所有线程。

  • String toString()返回该对象的字符串表示。

  • void wait()在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。

  • void wait(long timeout)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。

  • void wait(long timeout, int nanos)在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。

发布了15 篇原创文章 · 获赞 1 · 访问量 3131

猜你喜欢

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