叨叨两句
搞定~下一个任务!
牛客网——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
cnt=5
cnt=2
cnt=3
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
The output is “Equal”
The output in “Not Equal”
An error at line 5 causes compilation to fall.
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
int a[][]=new int[][]
int b10=new int[][]
int c[][]=new int10
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
不管 try 语句块正常结束还是异常结束,finally语句块都是要被执行的
在try语句块或catch语句块中执行到System.exit(0)直接退出程序
finally块中的return语句会覆盖try块中的return返回
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
{company:4399}
{"company":{"name":[4399,4399,4399]}}
{[4399,4399,4399]}
{"company":[4399,4399,4399]}
{"company":{"name":4399}}
6
下列说法错误的有( )
正确答案: A B C D
Java面向对象语言容许单独的过程与函数存在
Java面向对象语言容许单独的方法存在
Java语言中的非静态方法属于类中的成员(member)
Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同
java不允许单独的方法,过程或函数存在,需要隶属于某一类中。——AB错
java语言中的方法属于对象的成员,而不是类的成员。不过,其中静态方法属于类的成员。——C错
D也错,方法属于接口
7
下列有关JAVA异常处理的叙述中正确的是()
正确答案: A B D
finally是为确保一段代码不管是否捕获异常都会被执行的一段代码
throws是用来声明一个成员方法可能抛出的各种非运行异常情况
final用于可以声明属性和方法,分别表示属性的不可变及方法的不可继承
throw是用来明确地抛出一个异常情况
throws用于在方法上声明该方法不需要处理的异常类型,用在方法上后面跟异常类名 可以是多个异常类
throw用于抛出具体异常类的对象,用在方法内 后面跟异常对象只能是一个异常类型实体.
try块必须和catch块或和finally同在,不能单独存在,二者必须出现一个.
finally块总会执行,不论是否有错误出现.但是若try语句块或会执行的catch语句块使用了JVM系统退出语句,finally块就不会被执行了. 一般我们把关闭资源的代码放在finally里面 保证资源总是能关闭
然后再看这一题 A肯定对了,C根本就跟异常处理没有关系,所以不选。就算有关系也错了
final用于声明属性、方法、类。分别表示属性不可更改、方法不能被覆盖、类不能被继承。
所以C选项说方法不能被继承错误,是不能覆盖
B、D咬文嚼字说是因为
B. throws是用来声明一个成员方法可能抛出的各种异常情况.
“情况”错了应该改成对象
我表示不能接受,D也一样。如果没有更好的理由
我觉得题目答案错了,就是ABD