叨叨两句

  1. 搞定~下一个任务!

牛客网——java专项练习024

1

public class Test{

static int cnt = 6;
static{
    cnt += 9;
}

public static void main(String[] args){

System.out.println(“cnt =” + cnt);

}
static{

cnt /=3;
};

}
cnt的值是
正确答案: A

  1. cnt=5

  2. cnt=2

  3. cnt=3

  4. cnt=6

初始化顺序:
1.先父类,后子类
2.先属性,后构造函数
3.先静态,后非静态
4.静态初始化块,静态变量这两个是属于同一级别的,是按代码写得顺序执行
5.同一类型(非数据类型,指以上),按代码先后顺序
看了前面的解答,我想更正一下其中几位同学的解答。
如楼上有的同学说的,静态初始化块,静态变量这两个是属于同一级别的,是按代码写得顺序执行的!
而不是先执行静态变量后执行静态初始化块!这是错的。我举个例子:
public class Test{  static{  cnt = 6;
    }  static int cnt = 100;  public static void main(String[] args){
        System.out.println("cnt = " + cnt);
        //最后输出是50,如果按照错误说法就应该是3
        //按顺序执行就是cnt=6--->cnt=100---->cnt = 100/2 = 50.
    }  static{ cnt /= 2;
    }
}

2

public class IfTest{
    public static void main(string[]args){
        int x=3;
        int y=1;
        if(x=y)
            System.out.println(“Not equal”);
        else
            System.out.println(“Equal”);
     }
}

What is the result?
正确答案: C

  1. The output is “Equal”

  2. The output in “Not Equal”

  3. An error at line 5 causes compilation to fall.

  4. The program executes but does not print a message.

我来解析下:
其实这个是由于java和C语言的不同处理机制导致的:

C语言中
当if语句中的条件为赋值语句时,实际上是将赋值后的结果与0进行比较【左值】
if(1)  由于1>0  所以认为是true

java语言中,虽然也用了左值,但是不再与0比较,而是直接将0放入if()中
但是int类型,不能转换为boolean,所以会报错:“ Type mismatch: cannot convert from int to boolean ”

3

下面哪几个语句正确的声明一个整型的二维数组()
正确答案: C D

  1. int a[][]=new int[][]

  2. int b10=new int[][]

  3. int c[][]=new int10

  4. int []d[]=new int10

 二维数组的定义方式: 
             1.    int [][] array = new int[n][m]; 
             2.    int [][] array={{1,2,3,4},{1,2,3,4},{1,2,3,4}};
方式一: 定义二维数组可以指定不定义m,但是必须定义n. 

4

有关finally语句块说法正确的是( )
正确答案: A B C D

  1. 不管 try 语句块正常结束还是异常结束,finally语句块都是要被执行的

  2. 在try语句块或catch语句块中执行到System.exit(0)直接退出程序

  3. finally块中的return语句会覆盖try块中的return返回

  4. finally 语句块在 catch语句块中的return语句之前执行

结论:
1、不管有木有出现异常,finally块中代码都会执行;
2、当try和catch中有return时,finally仍然会执行;
3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4、finally中最好不要包含return,否则程序会提前退出,返回值不是try或catch中保存的返回值。

举例:

情况1:try{} catch(){}finally{} return;
显然程序按顺序执行。

情况2:try{ return; }catch(){} finally{} return;
程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,最后执行try中return;
finally块之后的语句return,因为程序在try中已经return所以不再执行。

情况3:try{ } catch(){return;} finally{} return;
程序先执行try,如果遇到异常执行catch块,
有异常:则执行catch中return之前(包括return语句中的表达式运算)代码,再执行finally语句中全部代码,
最后执行catch块中return. finally之后也就是4处的代码不再执行。
无异常:执行完try再finally再return.

情况4:try{ return; }catch(){} finally{return;}
程序执行try块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,因为finally块中有return所以提前退出。

情况5:try{} catch(){return;}finally{return;}
程序执行catch块中return之前(包括return语句中的表达式运算)代码;
再执行finally块,因为finally块中有return所以提前退出。

情况6:try{ return;}catch(){return;} finally{return;}
程序执行try块中return之前(包括return语句中的表达式运算)代码;
有异常:执行catch块中return之前(包括return语句中的表达式运算)代码;
则再执行finally块,因为finally块中有return所以提前退出。
无异常:则再执行finally块,因为finally块中有return所以提前退出。

最终结论:任何执行try 或者catch中的return语句之前,都会先执行finally语句,如果finally存在的话。
如果finally中有return语句,那么程序就return了,所以finally中的return是一定会被return的,
编译器把finally中的return实现为一个warning。

5

以下 json 格式数据,错误的是
正确答案: A C

  1. {company:4399}

  2. {"company":{"name":[4399,4399,4399]}}

  3. {[4399,4399,4399]}

  4. {"company":[4399,4399,4399]}

  5. {"company":{"name":4399}}

6

下列说法错误的有( )
正确答案: A B C D

  1. Java面向对象语言容许单独的过程与函数存在

  2. Java面向对象语言容许单独的方法存在

  3. Java语言中的非静态方法属于类中的成员(member)

  4. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同

java不允许单独的方法,过程或函数存在,需要隶属于某一类中。——AB错
java语言中的方法属于对象的成员,而不是类的成员。不过,其中静态方法属于类的成员。——C错 
D也错,方法属于接口

7

下列有关JAVA异常处理的叙述中正确的是()
正确答案: A B D

  1. finally是为确保一段代码不管是否捕获异常都会被执行的一段代码

  2. throws是用来声明一个成员方法可能抛出的各种非运行异常情况

  3. final用于可以声明属性和方法,分别表示属性的不可变及方法的不可继承

  4. throw是用来明确地抛出一个异常情况

throws用于在方法上声明该方法不需要处理的异常类型,用在方法上后面跟异常类名 可以是多个异常类
 throw用于抛出具体异常类的对象,用在方法内 后面跟异常对象只能是一个异常类型实体.
 try块必须和catch块或和finally同在,不能单独存在,二者必须出现一个. 
finally块总会执行,不论是否有错误出现.但是若try语句块或会执行的catch语句块使用了JVM系统退出语句,finally块就不会被执行了. 一般我们把关闭资源的代码放在finally里面 保证资源总是能关闭
然后再看这一题 A肯定对了,C根本就跟异常处理没有关系,所以不选。就算有关系也错了
final用于声明属性、方法、类。分别表示属性不可更改、方法不能被覆盖、类不能被继承。
所以C选项说方法不能被继承错误,是不能覆盖
B、D咬文嚼字说是因为
B. throws是用来声明一个成员方法可能抛出的各种异常情况.
“情况”错了应该改成对象
我表示不能接受,D也一样。如果没有更好的理由
我觉得题目答案错了,就是ABD

Wall_Breaker
2.1k 声望1.2k 粉丝

生死之间,就是我的跃迁之路,全程记录,欢迎见证