2、代码String str=”123456a”;int i=Integer.parseInt(str);会报异常的是()
正确答案:B
A java.lang.NullPoninterException
B java.lang.NumberFormatException
C java.lang.RuntimeException
D java.lang.ArrayindexOutOfBoundsException
8、关于Java中参数传递的说法,哪个是错误的?
正确答案:D
A 在方法中,修改一个基础类型的参数不会影响原始参数值
B 在方法中,改变一个对象参数的引用不会影响到原始引用
C 在方法中,修改一个对象的属性会影响原始对象参数
D 在方法中,修改集合和Maps的元素不会影响原始集合参数
题解:
答案: D
解析: 注意!Java中方法的参数传递都是值传递
A. 在方法中,修改一个基础类型的参数不会影响原始参数值
public static void main(String []args){
int i = 5;
func(i);
System.out.println(i);
}
static void func(int j){
j = 10;
}
//输出结果
5
在主方法调用func(int j) 时 , 参数i是实际参数 , 值为5 , 参数j是形式参数 , 值是i给的 , 也是5 , i和j没有任何关系 , 是两个独立的参数 , 所以修改j的值时与i没有关系 , 仍然输出5。
B. 在方法中,改变一个对象参数的引用不会影响到原始引用
public static void main(String []args){
User rabbiter = new User();
rabbiter.setName(“rabbiter”);
func(rabbiter);
System.out.println(rabbiter.getName());
}
static void func(User user){
user = new User();
user.setName(“zhangsan”);
}
//输出结果
rabbiter
在主方法调用func(User user) 时 , 对象rabbiter保存的是一个地址值 , 本质上就是把rabbiter的地址值给了形参user , 所以此时实参rabbiter和形参user指向在堆中的同一个对象 , 他们的地址值相同 , 只是指向的对象一致 , 所以并不违反值传递的理论。
此时 , 如果修改形参user , new一个新的对象并让user指向它 , 修改的只是形参保存的地址 , 与实参rabbiter无关 , rabbiter指向的对象仍然是之前的那个对象。
C. 在方法中,修改一个对象的属性会影响原始对象参数
public static void main(String []args){
User rabbiter = new User();
rabbiter.setName(“rabbiter”);
func(rabbiter);
System.out.println(rabbiter.getName());
}
static void func(User user){
user.setName(“zhangsan”);
}
//输出结果
zhangsan
在主方法调用func(User user) 时 , 对象rabbiter保存的是一个地址值 , 本质上就是把rabbiter的地址值给了形参user , 所以此时实参rabbiter和形参user指向在堆中的同一个对象 , 他们的地址值相同 , 指向的对象一致 , 所以并不违反值传递的理论。
那么user对其指向的对象的属性name进行修改 , rabbiter指向的对象的name属性也就被修改了。
D. 在方法中,修改集合和Maps的元素不会影响原始集合参数
集合和Maps都是对象 , 所以此项跟C选项的解析一致。
9、下面有关JAVA异常类的描述,说法错误的是?
正确答案:D
A 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
B 非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
C Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
D RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获