面试错题总结

一:输出语句中字符串的拼接问题

          如下程序运行后输出为

public class MyJava {
       public static void main(String[] args){
           char m = 'a';
           int n = 2;
           System.out.println(m+n+"java");  //输出"99java"
           System.out.println("java"+m+n); //输出"javaa2"
       }
}

第一句输出"99java",由于前面是char和int,所以二者先做加法运算,然后和"java"拼接为字符串。

第二句输出为"javaa2",由于"java"字符串在前,故"java"先和char做字符串拼接,在和int做字符串拼接。

 

二:System.exit(1)和System.exit(0)的区别;

         System.exit(1):是非正常退出

         System.exit(0):是正常退出

         二者在try ,catch中的应用

        如下程序执行结果为:        

public class MyJava {
    public static void main(String[] args) {
        try {
            System.out.println("try run");
            System.exit(1);
            System.out.println("MyJava run");
            return;
        } catch (Exception e) {
            System.out.println("catch run");
        } finally {
            System.out.println("finally run");
        }

    }
}

   直接运行会报错,System.exit(1)表示jvm非正常退出,如果改成System.exit(0),那么只会输出"try run"

 

三:局部变量必须要赋值,成员变量有默认值,故不赋值编译也不会报错

         如下程序执行的结果:

public class MyJava {
    public static void main(String[] args) {
        String s;
        if(s instanceof String){
            System.out.println("s is String");
        }else{
            System.out.println("s is not String");
        }
    }
}

这样编译会报错,因为局部变量s没有赋值,不能参与运算。

如果仅仅只是定义为没有运算,则不会报错。

如果将局部变量换成成员变量会如何:

public class MyJava {
    private static String s;
    public static void main(String[] args) {
        if(s instanceof String){
            System.out.println("s is String");
        }else{
            System.out.println("s is not String");
        }
    }
}

由于成员变量的字符串默认是null值,故输出"s  is not String" ,注意:这里的s要使用static修饰,如果没有static还是会报错,因为main函数是static修饰的

五:如下代码执行的结果    

public class MyJava {
    public static void main(String[] args) {
        try {
            throw new Exception();
            System.out.println("MyJava run");
        } catch (Exception e) {
            System.out.println("catch run");
        } finally {
            System.out.println("finally run");
        }
    }
}

结果:编译报错,因为抛出了异常,下面的输出语句根本执行不到。

 

六:break,continue,return的区别

        break: 跳出上一层循环,结束当前循环体,离break最近的循环体。

        continue : 跳出本次循环,继续执行下一次循环。

        retrun :结束方法,不再执行下面的代码。

        如下程序分别在循环体中采用break,continue,return后执行的结果是多少

       

public class MyClass {
    public static void main(String[] args){
        for(int i=0; i<2;i++){
            System.out.println("i="+i);
            for (int j=0;j<3;j++){
                if (j==1){
                    break;//continue//return
                }
                System.out.println("j="+j);
            }
        }
    }
}

            break输出:i=0  j=0 

                                     i=1  j=0

                                     这里的break离内循环更近,故结束的是内循环

           continue输出:i=0  j=0  j=2

                                           i=1  j=0  j=2

                                           当j==1时,这里会跳出此次内循环,开始下一次内循环

           return输出 :i=0  j =0

                                        当循环到j==1时,直接结束此方法。



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值