Java经典面试题总结——未完待续

Test01

public class Demo {
	public static void main(String[] args) {
		short s1 = 2;
		short s2 = 3;
		
		//报错,因为byte、short、char类型的数据运算时,会自动转型为int类型,无法赋值给short类型的s1
		s1 = s1 + s2;
		//正确,隐含强制类型转换 s1 = (short)(s1+s2);
		s1 += s2;
		//正确,底层会做一个判断,2+3=5,在short类型取值范围内,则赋值给short类型
		s1 = 2 + 3;
		//正确,隐含强制类型转换
		s1++;
	}
}


Test02

//在下划线位置填入什么代码,程序不会报错:
public class Demo {
	public static void main(String[] args) {
		int[] arr = { 1, 2, 3 };
		for (int i = 0; i < arr.length; i++) {
			if (i == 2) {
				__请填入代码__
			}
			if (i == 2) {
				arr[3] = 10;
			}
		}
	}
}

/*
A break		B continue 	C 什么都不填	 D arr=new int[4] 	E arr={1,2,3,4}   
*/

/*
对于A和B两个选项,程序执行到该位置则终止,系统不会报错
对于C选项,程序执行到此继续往下执行,逻辑层面是正确的,故编译期不会报错;由于数组只有三个元素,所以arr[3]是不存在的,所以代码执行层面有错误,故会报运行期错误
对于D选项,相当于在堆内存重新开辟内存空间,动态初始化一个数组长度为4的数组,将其堆内存空间的地址值赋值给了栈内存引用变量arr,故此时的arr指向的是堆内存长度为4的数组,与原来的数组断开了连接,所以此时arr[3]为0
对于E选项,不可以将数组直接赋值给栈内存引用变量,引用变量只能接收数组的地址值
*/



Test03

/**
 * 需要在横线处填入什么,得到如下结果:
 * 清华大学
 * 也叫五道口职业技术学院
 */
public class Student {
	public _____ String school = "清华大学";	
}
class Test{
	public static void main(String[] args) {
		Student s = new Student();
		System.out.println(s.school);
		_____.school = "也叫五道口职业技术学院";
		System.out.println(s.school);
	}
}


A static  Student	B final  Student	C final    new Student()     D static  new Student()



/**
 * 分析:1、被static修饰的成员表示类的属性,被类的所有成员共享,并且建议通过类名调用,也可以通过对象调用;static修饰的
 * 			成员变量如果重新赋值,相当于用一个新的值替换掉原来的值,原来方法区存储的值将不存在
 * 		2、被final修饰的成员变量,当为基本类型时,数值不可更改;当为引用类型时,索引值不可更改;String被初始化后直接
 * 			方法区存储String类型的值,每次改变其值都需要重新开辟内存空间,相应的索引值也改变,所以String类型的数值
 * 			一旦赋值不可改变。
 * 	所以,BC选项是错的,对于AD选项,通过类型访问和对象访问效果一样,建议通过类名访问
 */



Test04

/**
 *该程序最终的执行结果是多少?
 *
 *这段代码中return的作用:
 *1. 返回一个值给调用方
 *2. 结束当前方法, 如果碰到异常中有finally先执行finally中的代码,然后再结束方法.
 */
public class Demo{

	public static void main(String[] args) {
		int number = getNum();
		
		System.out.println("number = " + number);
		
	}
	
	public static int getNum(){
		
		int num = 10;
		try{
			// Java处理异常的方式是中断处理,一旦产生异常,try中后面的代码不运行了,直接跳转到catch代码
			int a = 1/0;
			//注意:此处如果用浮点类型,结果为无限大,这和JDK的处理机制有关,喜欢钻研的小伙伴可以研究下源码
			
			System.out.println("try : num = " + num);
			
			return num;
		}catch(ArithmeticException e){
			num = 20;
			return num;// 做两件事情:1. 将num的值保存一份到缓冲区,   2. 然后再去执行finally中的代码
			
		}finally{
			num = 30;
			System.out.println("finally中的代码执行了 num = " + num);
		}
	}
}
	//所以执行结果为:finally中的代码执行了 num = 30
						number = 20
		如果将finally中的代码改为如下所示:

	finally{
			num = 30;
			System.out.println("finally中的代码执行了 num = " + num);
			return num;// 1.将num的值保存一份到缓冲区,现在的值变成了30;
			}	

	//程序执行结果为:finally中的代码执行了 num = 30
						number = 30





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值