牛客网专项练习——Java 专项练习(11 ~ 20)

11、以下哪些方法是Object类中的方法

A. clone()

B. toString()

C. wait()

D. finalize()

答案: ABCD

解析:

Object 类中方法及说明如下:

  • registerNatives() //私有方法
  • getClass() //返回此 Object 的运行类。
  • hashCode() //用于获取对象的哈希值。
  • equals(Object obj) //用于确认两个对象是否“相同”。
  • clone() //创建并返回此对象的一个副本。
  • toString() //返回该对象的字符串表示。
  • notify() //唤醒在此对象监视器上等待的单个线程。
  • notifyAll() //唤醒在此对象监视器上等待的所有线程。
  • wait(long timeout) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或 者超过指定的时间量前,导致当前线程等待。
  • wait(long timeout, int nanos) //在其他线程调用此对象的notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
  • wait() //用于让当前线程失去操作权限,当前线程进入等待序列
  • finalize() //当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
12、下面程序的运行结果:( )
public static void main(String args[]) {
    Thread t = new Thread(){
        public void  run(){
            dianping();    
        }
    };
    t.run();
    System.out.print("dazhong");
}

static void dianping(){
    System.out.print("dianping");
}

A. dazhongdianping

B. dianpingdazhong

C. a和b都有可能

D. dianping循环输出,dazhong夹杂在中间

答案: B

解析:

如果调用 run(),选 B;如果调用start(), 选 C。

因为在上面 main() 方法中,并没有创建一个新的线程,仅仅是调用了 run() 方法,程序就只能顺序执行;开启线程是调用 start() 方法,这样才能并发执行。

13、以下代码的输出结果是?
public class B{
    public static B t1 = new B();
    public static B t2 = new B();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
        B t = new B();
    }
}

A. 静态块 构造块 构造块 构造块

B. 构造块 静态块 构造块 构造块

C. 构造块 构造块 静态块 构造块

D. 构造块 构造块 构造块 静态块

答案: C

解析:

程序入口 main 方法要执行首先要加载类 ,而加载类时首先加载的是静态域而不是静态块。加载完毕后,使用 new 创建对象时,才依次执行构造块和构造方法。

注意两点:

  • 静态域:分为静态变量、静态方法、静态块。其中需要初始化的是静态变量和静态块,而它们两个的初始化顺序是根据它们的位置决定的,并且静态域只加载一次(意思是说,有多个静态变量或者静态块的时候,类加载时只加载最前面的那个,剩下的顺序执行)
  • 每次 new 对象时,会执行一次构造块和构造方法,并且构造块在构造方法前执行。

上面的代码中,有两个静态变量和一个静态块,加载类时先初始化第一个静态变量:static B t1 = new B(),这里 new 类对象要调用构造块和构造方法,这时候类已经加载完毕,所以 new 的时候就不会再去初始化其它静态成员了。static B t2 = new B() 和静态块依次执行。初始化完毕,执行 main() 方法。

14、以下代码输出结果为():
String str = "";
System.out.print(str.split(",").length);

A. 0

B. 1

C. 出现异常

答案: B

解析:

(1)第一点,上面代码中调用的是 length,而不是 length()。因为 split() 方法返回的是一个字符串数组,所以上述代码打印的是拆分之后得到的数组的长度;
在这里插入图片描述
(2)因为原字符串不包含分隔符,所以直接返回原字符串,分割出来只有一个空的字符串数组,所以结果是1。(注意:虽然原字符串为空,存到字符串数组为空,但是这个空也会算一个元素)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值