【280天】我爱刷题系列(39)

叨叨两句

  1. 把金钱视为工具,而不是财富java

  2. 人与人最美好的关系,是彼此成就程序员

牛客网——java专项练习019

1

关于 Java 线程,下面说法错误的是()。
正确答案: C异步

  1. 建立线程的方法有两种:实现Runnable接口和继承Thread类函数

  2. java利用线程使整个系统成为异步工具

  3. 新线程一旦被建立,它将自动开始运行线程

建立线程的方法有三种:
(1)继承Thread类,重写run方法;
(2)实现Runnable接口,并将对象实例做为参数传递给Thread类的构造方法;
(3)实现callable接口,并实现call方法,而且线程执行完毕后会有返回值。
注意:(1)和(2)都是调用start()方法启动线程的,而后JVM虚拟机将此线程放到就绪队列中,有处理机可用时,则执行run方法。这两种方法都重写了run方法,可是没有返回值。

2

关于抽象类叙述正确的是? ( )code

正确答案: B对象

  1. 抽象类不能实现接口继承

  2. 抽象类必须有“abstract class”修饰接口

  3. 抽象类必须包含抽象方法

  4. 抽象类也有类的特性,能够被实例化

A.抽象类是能够实现接口的,并且抽象类也能够继承自抽象类
B.对
C.抽象类指有abstract修饰的class,其能够包含抽象方法,也能够不包含
D.抽象类和接口都是不能被实例化的,只有具体的类才能够被实例化

3

下列哪些语句关于 java 内存回收的说明是正确的?
正确答案: B

  1. 程序员必须建立一个线程来释放内存

  2. 内存回收程序负责释放无用内存

  3. 内存回收程序容许程序员直接释放内存

  4. 内存回收程序能够在指定的时间释放内存对象

A:垃圾回收程序是通常是在堆上分配空间不够的时候会本身进行一次GC,程序员不须要也不能主动释放内存。
B:Java的内存释放由垃圾回收程序来进行释放
C:在Java里,内存的释放由垃圾回收程序进行管理,程序员不能直接进行释放。
D:程序员能够调用System.gc()运行垃圾回收器,可是不能指定时间。

4

如下代码的输出结果是?

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();
}

}

正确答案: C

  1. 静态块 构造块 构造块 构造块

  2. 构造块 静态块 构造块 构造块

  3. 构造块 构造块 静态块 构造块

  4. 构造块 构造块 构造块 静态块

开始时JVM加载B.class,对全部的静态成员进行声明,t1 t2被初始化为默认值,为null,又由于t1 t2须要被显式初始化,因此对t1进行显式初始化,初始化代码块→构造函数(没有就是调用默认的构造函数),咦!静态代码块咋不初始化?由于在开始时已经对static部分进行了初始化,虽然只对static变量进行了初始化,但在初始化t1时也不会再执行static块了,由于JVM认为这是第二次加载类B了,因此static会在t1初始化时被忽略掉,因此直接初始化非static部分,也就是构造块部分(输出''构造块'')接着构造函数(无输出)。接着对t2进行初始化过程同t1相同(输出'构造块'),此时就对全部的static变量都完成了初始化,接着就执行static块部分(输出'静态块'),接着执行,main方法,一样也,new了对象,调用构造函数输出('构造块')
以前我一直有一个误区!就是认为静态块必定是最早初始化的!可是,阿里爸爸今天又用一记重拳猛击个人脸,额,好疼....当时的状况是这样的:
我在牛客网找虐中,碰到了这样的一道题,心中充满了鄙夷,心想"这tm还用看吗,确定先是静态块,再接着三个构造块,弱鸡题",可是 = = ,答案倒是"构造块 构造块 静态块 构造块".
......[黑线|||||||||]
因而总结了一下,以警后世 - -
正确的理解是这样的:
并非静态块最早初始化,而是静态域.(BM:啊!多么痛的领悟!)
而静态域中包含静态变量、静态块和静态方法,其中须要初始化的是静态变量和静态块.而他们两个的初始化顺序是靠他们俩的位置决定的!
So!
初始化顺序是 t1 t2 静态块
相关文章
相关标签/搜索