【285天】我爱刷题系列(44)

叨叨两句

  1. 搞定~下一个任务!java

牛客网——java专项练习024

1

public class Test{json

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

public static void main(String[] args){数组

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

}
static{函数

cnt /=3;
};

}
cnt的值是
正确答案: Acode

  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语句以前执行

结论:
一、无论有木有出现异常,finally块中代码都会执行;
二、当try和catch中有return时,finally仍然会执行;
三、finally是在return后面的表达式运算后执行的(此时并无返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是以前保存的值),因此函数返回值是在finally执行前肯定的;
四、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