把金钱视为工具,而不是财富java
人与人最美好的关系,是彼此成就程序员
关于 Java 线程,下面说法错误的是()。
正确答案: C异步
建立线程的方法有两种:实现Runnable接口和继承Thread类函数
java利用线程使整个系统成为异步工具
新线程一旦被建立,它将自动开始运行线程
建立线程的方法有三种: (1)继承Thread类,重写run方法; (2)实现Runnable接口,并将对象实例做为参数传递给Thread类的构造方法; (3)实现callable接口,并实现call方法,而且线程执行完毕后会有返回值。 注意:(1)和(2)都是调用start()方法启动线程的,而后JVM虚拟机将此线程放到就绪队列中,有处理机可用时,则执行run方法。这两种方法都重写了run方法,可是没有返回值。
关于抽象类叙述正确的是? ( )code
正确答案: B对象
抽象类不能实现接口继承
抽象类必须有“abstract class”修饰接口
抽象类必须包含抽象方法
抽象类也有类的特性,能够被实例化
A.抽象类是能够实现接口的,并且抽象类也能够继承自抽象类 B.对 C.抽象类指有abstract修饰的class,其能够包含抽象方法,也能够不包含 D.抽象类和接口都是不能被实例化的,只有具体的类才能够被实例化
下列哪些语句关于 java 内存回收的说明是正确的?
正确答案: B
程序员必须建立一个线程来释放内存
内存回收程序负责释放无用内存
内存回收程序容许程序员直接释放内存
内存回收程序能够在指定的时间释放内存对象
A:垃圾回收程序是通常是在堆上分配空间不够的时候会本身进行一次GC,程序员不须要也不能主动释放内存。 B:Java的内存释放由垃圾回收程序来进行释放 C:在Java里,内存的释放由垃圾回收程序进行管理,程序员不能直接进行释放。 D:程序员能够调用System.gc()运行垃圾回收器,可是不能指定时间。
如下代码的输出结果是?
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
静态块 构造块 构造块 构造块
构造块 静态块 构造块 构造块
构造块 构造块 静态块 构造块
构造块 构造块 构造块 静态块
开始时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 静态块