Java面试题每天五道题(二)

温馨提示:先做题,后附答案和解释,这样效果会更好一些

第一题:

下列代码执行结果为()

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.以上答案都不对



第二题:

关于下面的程序Test.java说法正确的是( )。

public class Test {
    
    
    static String x="1";
    static int y=1;
    public static void main(String args[]) {
    
    
        static int z=2;
        System.out.println(x+y+z);
    }
}

A.3

B.112

C.13

D.程序有编译错误



第三题:

以下代码的输出结果是?

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.构造块 构造块 构造块 静态块



第四题:

以下 _____ 不是 Object 类的方法

A.clone()

B.finalize()

C.toString()

D.hasNext()



第五题:

Consider the following code:

String s=null;

Which code fragments cause an object of type NullPointerException to be thrown?(多选题)
会英语不?不会?不要紧,我来给你翻译一遍(下面那个选项会造成空指针异常?)

A.if((s!=null)&(s.length()>0))

B.if((s!=null)&&(s.length()>0))

C.if((s==null)|(s.length()==0))

D.if((s==null)||(s.length()==0))



在这里插入图片描述

答案在下面!!!!!!!!!!!!!!!!

======================================================================================

第一题答案:这道题的答案选 :A

此题就是考察了线程中的join();这个方法的作用,t.join();就是将t这个线程加入到此线程当中,也就是说可以将两个可以交替执行的线程合并为一个可以顺序执行的线程,假设在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。



第二题答案:这道题的答案选 :D

被static修饰的变量称为静态变量,静态变量属于整个类,而局部变量属于方法,只在该方法内有效,所以static不能修饰局部变量



第三题答案:这道题的答案选 :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了对象,调用构造函数输出(‘构造块’)
1.程序入口main方法要执行首先要加载类B 2.静态域:分为静态变量,静态方法,静态块。这里面涉及到的是静态变量和静态块,当执行到静态域时,按照静态域的顺序加载。并且静态域只在类的第一次加载时执行 3.每次new对象时,会执行一次构造块和构造方法,构造块总是在构造方法前执行(当然,第一次new时,会先执行静态域,静态域〉构造块〉构造方法) 注意:加载类时并不会调用构造块和构造方法,只有静态域会执行 4.根据前三点,首先加载类B,执行静态域的第一个静态变量,static b1=new B,输出构造块和构造方法(空)。ps:这里为什么不加载静态方法呢?因为执行了静态变量的初始化,意味着已经加载了B的静态域的一部分,这时候不能再加载另一个静态域了,否则属于重复加载 了(静态域必须当成一个整体来看待。否则加载会错乱) 于是,依次static b2 =new B,输出构造块,再执行静态块,完成对整个静态域的加载,再执行main方法,new b,输出构造块。



第四题答案:这道题的答案选 :D

> 这里是引用
Object中没有hasNext() 方式,这个方法是迭代器中的

第五题答案:这道题的答案选 :A,C

s为null,因此只要调用了s.length()都会抛出空指针异常。因此这个题目就是考察if语句的后半部分会不会执行。
A,单个与操作的符号& 用在整数上是按位与,用在布尔型变量上跟&&功能类似,但是区别是无论前面是否为真,后面必定执行,因此抛出异常
B,与操作,前半部分判断为假,后面不再执行
C,这里跟 & 和&& 的区别类似,后面必定执行,因此抛出异常
D,或语句,前面为真,整个结果必定为真,后面不执行

以上题目和答案如果有不足的地方欢迎指出!你我共勉,互相学习!!!!

以上题目均选自牛客网,如有侵权请联系我删除!!!!

个人邮箱[email protected]或者[email protected]

猜你喜欢

转载自blog.csdn.net/qq_41857955/article/details/104694107