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也是一个对象型变量,所以也是传递的引用副本,只不过由于它是不可变,所以传值或引用没区别。
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也是一个对象型变量,所以也是传递的引用副本,只不过由于它是不可变,所以传值或引用没区别。