总结一些java学习过程中的面试题

总结一些java学习过程中的面试题

说明:面试题有点少,毕竟才初学,写着写着就变成知识点总结了,有空再写个难点总结。

1.数据类型转换

1.1下面两种方式有区别吗?
float f1 = 12.345f;
float f2 = (float)12.345;
答: 有,f1其实是通过一个double类型转换过来的。
而f2本身就是一个float类型。推荐第一种定义方式,第二种定义方式会损失精度。

1.2 下面的程序有问题吗,如果有,在哪里呢?
byte b1 = 3;
byte b2 = 4;
(1)byte b3 = b1 + b2;
(2)byte b4 = 3 + 4;
答:(1) b = b1 + b2;是有问题的。
因为变量相加,会首先看类型问题,做加法会有类型提升,最终把结果赋值的也会考虑类型问题。
(2) 常量相加,首先做加法,然后看结果是否在赋值的数据类型byte范围内,如果不是,才报错。

1.3byte b = 130;有没有问题?如果我想让赋值正确,可以怎么做?结果是多少呢? 下面的操作结果是什么呢? byte b = (byte)130;
答:因为byte的范围是:-128到127,130不在此范围内,所以报错,但是可以使用强制类型转换。要想知道结果是多少,就得知道计算机中的数据的运算都是用补码进行的,
分析过程:
a:获取130的二进制
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码。
b:做截取操作,截成byte类型
10000010
这个结果是补码
C:已知补码求原码。
符号位 数值位
补码: 1 0000010

反码: 1 0000001

原码: 1 1111110
再将其转为数据,即最后输出结果为-126

1.4字符参与运算
是查找ASCII里面的值
‘a’ 97
‘A’ 65
‘0’ 48

(1) System.out.println(‘a’);//直接输出一个字符
(2)System.out.println(‘a’ + 1);//输出一个字符和一个整数做加法
答:(1)a (2)98
1.5字符串参与运算
这里其实是字符串的连接
字符串数据和其他数据做+,结果是字符串类型。
这里的+不是加法运算,而是字符串连接符。
System.out.println(“hello”+‘a’+1);//helloa1
System.out.println(‘a’+1+“hello”);//98hello
System.out.println(“5+5=”+5+5);//5+5=55
System.out.println(5+5+"=5+5");10=5+5

2.运算符

2.1 (1)short s = 1;
s = s + 1;

(2)short s = 1;
s += 1;
请问上面的代码哪个有问题?
答:(1)有问题
s+1将数据类型转换为了int之后才又转换回short,不能将一个int类型的值赋给short类型的值。
(2)没有问题
扩展的赋值运算符其实隐含了一个强制类型转换,
s += 1;

不是等价于 s = s + 1;
而是等价于 s = (s的数据类型)(s + 1);s的数据类型没有变

2.2请实现两个变量的交换
方式一:采用第三方变量
int c = a;
a = b;
b = c;
System.out.println(“a:”+a+",b:"+b);
方式二:用位异或运算符
a = a ^ b;
b = a ^ b; //a ^ b ^ b = a
a = a ^ b; //a ^ b ^ a = b
System.out.println(“a:”+a+",b:"+b);
左边a b a ,右边 a^b
方式三:采用变量相加的做法
a = a + b;
b = a - b;
a = a - b;
System.out.println(“a:”+a+",b:"+b);
方式四:一句话搞定
b = (a+b) - (a=b);
System.out.println(“a:”+a+",b:"+b);
2.3请用最有效率的方式计算出2乘以8的结果
2<<3

3.switch语句

3.1switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
答:可以,不可以,JDK7以后可以

4.数据初始化

4.1Override和Overload的区别?Overload是否可以改变返回值类型?
答:方法重写(Override):
在子类中,出现和父类中一模一样的方法声明的现象。
方法重载(Overload):
同一个类中,出现的方法名相同,参数列表不同的现象。
方法重载能改变返回值类型,因为它和返回值类型无关。
4.2this关键字和super关键字分别代表什么?以及他们各自的使用场景和作用。
答:this:代表当前类的对象引用。
super:代表父类存储空间的标识,可以用super访问父类的成员。
场景:
成员变量:
this.成员变量
super.成员变量
构造方法:
this(…)
super(…)
成员方法:
this.成员方法
super.成员方法
4.3a:一个类的初始化过程
成员变量进行初始化
默认初始化
显示初始化
构造方法初始化

b:子父类的初始化(分层初始化)
先进行父类初始化,然后进行子类初始化。
4.4一个类的静态代码块,构造代码块,构造方法的执行流程
静态代码块 > 构造代码块 > 构造方法
静态的内容是随着类的加载而加载
静态代码块的内容会优先执行
子类初始化之前先会进行父类的初始化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值