java面试问题

题目1:
public class Test {
        public static void main(String[] args)
{
char x ='x';
int i=10;
System.out.println(false ? i : x); //输出120
System.out.println(false ? 10 : x); //输出x
}
}
运行结果:
---------- 运行 ----------
120
x


输出完成 (耗时 0 秒) - 正常终止


分析:
1、由于int i = 10中,i是个int类型变量,所以在输出x的时候,x进行了类型提升,字符x对应asiic值为120
2、java编程规范中,当后两个表达式有一个是常量表达式(本题是10),另一类型T可以表示这个常量,输出数据类型就为T这个类型。


题目2:
public class Test {
        public static void main(String[] args)
{
int i=10;
System.out.println(i<10 ? 10.9 : 9);
}
}
运行结果:
---------- 运行 ----------
9.0


输出完成 (耗时 0 秒) - 正常终止


分析:根据精度,进行类型的转换导致


题目3:
public class Test {
        public static void main(String[] args)
{
int i=32;
System.out.println(i>>32);
}
}
运行结果:
---------- 运行 ----------
32


输出完成 (耗时 0 秒) - 正常终止


分析:
位移运算符中<< n是扩大2的n次方倍,
位移运算符中>> n是缩小2的n次方倍,在进行的时候,首先将n进行与32进行取模求余运算得m,然后除以2的m次方。
本题中32%32=0,所以不变。如果换成一个15,则15%32=15,所以最后结果是0;


题目4:
实际开发过程中异常出现的一些问题:
1、过于庞大的try块
    为了方便,很多程序员把大量的代码都放到一个try模块中,用一个catch处理所有的异常行为,实际上这是一种坏习惯,
    原因就是为了图省事,不去分析代码中哪些代码会抛出异常、异常的具体类型是什么。造成的弊端就是对异常的定位比较困难。
    所以要根据实际分析定义异常的捕捉个数,用特定的异常来进行抛出。
2、异常的完整性
    如果一个函数运行过程中可能会向上层抛出异常,就需要在函数声明中显示注明(throws)
3、runtiemException异常,


题目5:
传值与传引用:
1、不管java传递的参数是什么,一律传的是副本。如果java是传值,那么传递的是值得副本,如果java传递的是引用,那么传递的是
   引用的副本。(think in java)
java中变量类型分两类:
1、由基本数据类型(int、double...),传递的是值得副本。修改副本不影响源
2、对象型变量,java传递的是引用的副本。修改副本会影响源
注意String也是一个对象型变量,所以也是传递的引用副本,只不过由于它是不可变,所以传值或引用没区别。

posted @ 2015-01-28 16:00  静以养身 俭以养德  阅读(206)  评论(0编辑  收藏  举报