`

java中易出错的且常被面试的几点 .

    博客分类:
  • j2se
 
阅读更多

一、关于Switch 
代码:

 

 

 

 

结果: 




分析: 
少了break;所以2以下的case和default都执行了一遍。 

switch case 原理是:1.当遇到匹配的项后如有break,则结束,不再执行后面的语句,如果没有break,则执行完匹配的项后,后面的语句不管是否匹配一律执行;2.如果一直没有匹配的项会执行default

二、Equals和==运算符 
代码:

 

 

 

 

结果: 
x+y equals z:true 
a == z:false 
x == hello:true 
a == helloworld:true 
a == x+y:false 

分析: 
1.String.equals()方法比较的是字符串的内容,所以(x + y).equals(z)为true. 
2.“==”比较的是 String 实例的引用,很明显 a 和z 并不是同一个 String 实例,所以(a == z)为false. 
3.根据常量池的知识,容易得知(x == "hello")和(a == "hello" + "world")都为true. 
(常量池指的是在编译期被确定并被保存在已编译的.class 文件中的一些数据。它包含了 
关于方法、类、接口等,当然还有字符串常量的信息。也就是所谓的持久代。) 
4.那么(a == (x + y))为什么是false呢?这点暂点有点不大清楚。初步认为是x+y是引用相加,不能放入常量池。 

三、Override覆盖 
代码:

 

 

 

 

结果: 
parent static say 
child say 
分析: 
1.我们创建了一个Parent类的实例。变量 p 的数据类型为 Parent 类 但是它仍旧是 Child 类的一个实例。因为Child类覆盖了Parent类的方法say2(),所以p.say2()调用为子类的方法。 
2.为什么p.say()却是调用父类Parent的方法呢?因为Java中规定“实例方法被覆盖,静态方法被隐藏”. 
关于Override的一些规则: 
用子类的静态方法隐藏父类中同样标识的实例方法是不合法的,编译器将会报错; 
用子类的实例方法覆盖父类中同样标识的静态方法也是不合法的,编译器同样会报错; 
带关键字 final的方法(静态和实例方法)都不能被覆盖; 
实例方法能够被覆盖; 
抽象方法必须在具体类中被覆盖。 

四、Java强类型 
代码:

 

 

 

结果: 
7.0 

分析: 
Java 是强类型的 strongly type,它支持8 种基本数据类型。通过对这些基本数据类型用法的严格检查 Java 编译器能够及时地在开发过程中捕捉到许多简单细微的错误。基本数据类型的转换可以隐性地发生,所以转换时会有精度损失。由于1/4和3/4发生隐性类型转换,精度损失,不会生成0.25和0.75,所以有分号的数都为0。 

五、假构造函数 
代码:

 

 

 

 

结果: 
The value of c :0 

分析: 
public void Constructor()并不是一个真正的构造函数,而是一个方法。所以c的值为默认值0. 


六、提前引用 
代码:

 

 

 

结果: 
first = 0 

分析: 
由于在初始化second之前test方法就访问了它,那么方法得到的是second的默认值,即 0。 因此输出结果first= 0,而不是2。假如你使用方法调用来初始化静态变量,那么你必须保证 这些方法并不依赖于在它们之后声明的其它静态变量。静态变量以及静态初始化块是在类被加载进 JVM 时执行初始化操作的。Java 语言规范8.5节指出“静态初始化块和静态变量是按照其在代码中出现的顺序依次执行初始化操作的,而不能在类变量声明出现之前就引用它”。 


七、对象引用 
代码:

 

 

 

结果: 
ab,b 
ab,ab 


分析: 
大家来分析一下这题,我还没有完全理解。 
我的分析,可能是错的,哈哈,算是抛砖引玉。 
1.a.append(b);-->ab 。因为a是引用,所以调用a的方法,相当于直接调用jvm中的a,所做的append也相当于直接在对象上操作,生效。 
2.append方法中第一次b=a,-->b。因为a,b都为main方法内局部变量,跨append方法作用域b对a的引用不生效。 
3.main方法中第二次b=a,-->ab。因为在同一作用域方法中,b对a的引用生效,。

http://blog.csdn.net/lifuxiangcaohui/article/details/8109833

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics