Java日常刷题第八天

选择题

1.Java Applet在被浏览器加载的时候首先被执行且在applet整个生命周期中被运行一次的方法是(A)
A.init()
B.stop()
C.opreationcrawl()
D.reader()
解析:Applet 是一种在 Web 环境下,运行于客户端的Java程序组件。Applet 必须运行于某个特定的“容器”,这个容器可以是浏览器本身,也可以是通过各种插件,或者包括支持 Applet 的移动设备在内的其他各种程序来运行。与一般的Java应用程序不同,Applet 不是通过 main 方法来运行的。Applet运行之前,先调用 Init() 方法,然后调用 start() 方法,最后调用 paint() 方法。
先init()方法进行初始化,然后start()进行就绪,最后调用paint()进行绘制
2.“先进先出”的容器是:(B )
A.堆栈(Stack)
B.队列(Queue)
C.字符串(String)
D.迭代器(Iterator)
解析:堆栈是具有先进后出的特点;队列具有先进先出的特点。字符串是一个存储数据的结构,没有严格的出入要求,迭代器的数据读取取决于迭代方式。
3.下面关于构造方法的说法不正确的是 (B)
A.构造方法也属于类的方法,可以创建对象的时候给成员变量赋值
B.构造方法不可以重载
C.构造方法没有返回值
D.构造方法一定要和类名相同
解析:(1.)构造方法也是类的方法,可以在创建对象时为成员变量赋值
(2).构造方法可以进行重载,但是参数列表必须不相同,不以返回值和访问级别进行区分
(3.)构造方法没有返回值
(4).构造方法一定要与类同名,此类不一定需要是public的。
4.在jdk 1.7中,以下说法正确的是(A )。
A.Java中所有的非抽象方法都必须在类内定义
B.Java中主方法可以不在类内定义,其他方法都必须定义在类内
C.Java中主方法必须定义在类内,其他方法可以不必定义在类内
D.Java中所有方法都不必在类内定义
解析:Java是纯粹的面向对象语言,所有的方法都必须存在于类中。类才有封装,继承,多态的特性。 在一些非纯粹的面向对象语言中,如PHP,定义的方法是可以脱离类而单独存在的。
5.当使包含 applet 程序的页面最小化时,以下选项中的哪个方法将被执行?( D)
A.init()
B.start()
C.destroy()
D.stop()
解析:在Applet中:
init(): 初始化;
start() 激活;
stop(): 当Applet被覆盖时,可用stop()方法停止线程, 典型作用是挂起一个线程;
destroy() :终止Applet,释放Applet的所有资源
6.ArrayList list = new ArrayList(20);中的list扩充几次(A)
A.0
B.1
C.2
D.3
解析:ArrayList的构造函数总共有三个:
(1)ArrayList()构造一个初始容量为 10 的空列表。
(2)ArrayList(Collection<? extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
(3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。
调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容,所以选择A
7.It is an important feature of the Java language that it always provides a default constructor to a class.(A)
A.FALSE
B.TRUE
解析:题目:总是为一个类提供了一个默认的构造函数是Java语言的一个重要特性 。
事实上只有在我们没有显示声明任何构造方法时java才会为我们提供一个默认的无参构造函数。
8.下列代码执行结果为(A)

public static void main(String args[])throws InterruptedException{
            Thread t=new Thread(new Runnable() {
                public void run() {
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                    System.out.print("2");
                }
            });
            t.start();
             
            t.join();
            System.out.print("1");
        }

A.21
B.12
C.可能为12,也可能为21
D.以上答案都不对
解析:join()的作用是:“等待该线程终止”,这里需要理解的就是该线程是指的主线程等待子线程的终止。也就是在子线程调用了join()方法后面的代码,只有等到子线程结束了才能执行。因为子线程的休眠时间太长,因此主线程很有可能在子线程之前结束也就是输出结果是12,但是子线程用了join函数,因此主线程必须等待子线程执行完毕才结束因此输出结果只能是21
thread.Join把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
t.join(); //使调用线程 t 在此之前执行完毕。
t.join(1000); //等待 t 线程,等待时间是1000毫秒
9.以下哪项不属于java类加载过程?(B)
A.生成java.lang.Class对象
B.int类型对象成员变量赋予默认值
C.执行static块代码
D.类方法解析
解析:类的加载包括:加载,验证,准备,解析,初始化。
选项A:生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。
选项B:既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。
选项C:这个会调用。可以用反射试验。
选项D:类方法解析发生在解析过程。
类加载过程:

1, JVM会先去方法区中找有没有相应类的.class存在。如果有,就直接使用;如果没有,则把相关类的.class加载到方法区

2, 在.class加载到方法区时,会分为两部分加载:先加载非静态内容,再加载静态内容

3, 加载非静态内容:把.class中的所有非静态内容加载到方法区下的非静态区域内

4, 加载静态内容:

4.1、把.class中的所有静态内容加载到方法区下的静态区域内

4.2、静态内容加载完成之后,对所有的静态变量进行默认初始化

4.3、所有的静态变量默认初始化完成之后,再进行显式初始化

4.4、当静态区域下的所有静态变量显式初始化完后,执行静态代码块

5,当静态区域下的静态代码块,执行完之后,整个类的加载就完成了。
10.有关静态初始化块说法正确的是?(ABC)
A.无法直接调用静态初始化块
B.在创建第一个实例前或引用任何静态成员之前,将自动调用静态初始化块来初始化
C.静态初始化块既没有访问修饰符,也没有参数
D.在程序中,用户可以控制合适执行静态初始化块
解析:JAVA的初始化顺序:

扫描二维码关注公众号,回复: 3754493 查看本文章

父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法

注意:

1.静态成员和静态代码块只有在类加载的时候执行一次,再次创建实例时,不再执行,因为只在方法区存在一份,属于一整个类。

2.上述的是通用的加载顺序,如果没有则省略。

猜你喜欢

转载自blog.csdn.net/yangyuCISCO/article/details/83244422