Java常见面试题总结_1

1. 数据类型相关

1.	(1) byte b1 = 3, b2 = 4, b;
	(2) b = b1 + b2;
	(3) b = 3 + 4;
	哪句编译失败?为什么呢?
	***(2)句编译失败, b1和b2都是byte类型的, 进行加法运算时会默认类型提升到int, 而左边的b类型还是byte类型和右边类型不一致, 编译器会报错。
	 	第(3)句正确, 等号右边是两个常量进行运算,只要结果不超过byte的范围,就不会报错。
	
2.	byte b = 130;有没有问题? 如果我想让赋值正确,可以怎么做?结果是多少呢?
	***	130超过byte的最大范围127, 肯定有问题。
		第一种办法:int b = 130; 把b定义为int类型, 结果还是130。
		第二种办法:byte b = (byte) 130;130强转为byte类型, 结果为-126。正数的最高符号位为0, 负数的最高符号位1, 强转为byte类型会损失精度,通过计算机的原码反码补码最后计算为-126

2. 运算符相关

1.  (1) short s = 1, s = s + 1;
	(2) short s = 1, s += 1;
	上面两个代码有没有问题,如果有,哪里有问题?
	***	第一句有问题, s + 1 运算时, short会默认类型提升到int, 而用short s接收会报错。
		第二句没问题, += 运算符其实隐含了默认转换功能 s += 1 其实等价于s = (s的数据类型)(s+1);
		
2.	请用最有效的方式写出 2 乘以 8 的结果。
	*** 2 << 3 ; 移位运算符的特点。

3. 流程控制语句相关

	byte类型可以是switch的表达式吗? long类型可以是switch的表达式吗? String类型可以是switch的表达式吗?
	***	switch语句中, 表达式的数据类型, 可以是byte, short, int, char, enum(枚举), jdk7以后可以接收字符串。

4. 代码块相关

1. 静态代码块,构造代码块,构造方法的执行顺序。
	class Student{
		static {
		System.out.println(“静态代码块”);
		}
		{
		System.out.println(“构造代码块”);
		} 
		public Student() {
		System.out.println(“构造方法”);
		}
	}
	***	静态代码块 > 构造代码块 > 构造方法
		输出结果为:
			静态代码块
			构造代码块
			构造方法

2.  class Fu {
		static {
			System.out.println("静态代码块Fu");
		} 
		{
			System.out.println("构造代码块Fu");
		} 
		public Fu() {
			System.out.println("构造方法Fu");
		}
	} 
	class Zi extends Fu {
		static {
			System.out.println("静态代码块Zi");
		} 
		{
			System.out.println("构造代码块Zi");
		}
		public Zi() {
			System.out.println("构造方法Zi");
		}
	} 
	Zi z = new Zi();  请执行结果。
	***	A:静态随着类的加载而加载。
		B:静态代码块 -- 构造代码块 -- 构造方法的执行流程
		静态代码块 -- 构造代码块 -- 构造方法
		C:只要有子父关系,肯定先初始化父亲的数据,然后初始化子类的数据。
		结果:
			静态代码块Fu
			静态代码块Zi
			构造代码块Fu
			构造方法Fu
			构造代码块Zi
			构造方法Zi

你可能感兴趣的:(java)