那些年走过笔试、面试的坑、

决定专门用一篇文章来记录一下笔试中遇到的坑~

1、给出以下代码,请问程序的运行结果是什么?

 1 public class Example{
 2     private int i=giveMej();
 3     private int j=10;
 4     private int giveMej(){
 5         return j;
 6     }
 7     public static void main(String[] args){
 8         System.out.println(new Example().i);
 9     }
10 }
A、打印输出:10
B、第8行代码编译错误
C、打印输出:0
D、第2行代码编译错误

对、我掉坑了,闭着眼选了A。

其实正确答案应该为C,打印输出0。

通过debug调试发现原因是当调用实例对象i时,会跳到giveMej方法执行,此时由于是从第2行代码直接跳到第四行中,也就是说j此时还未进行赋值,因此giveMej方法输出的j值为默认值0。所以赋给i也就为0。试了试把第三行和第四行代码调换位置后会打印输出10。

 

2、我们经常使用的system.out.println到底是个啥玩意、system是啥、out是啥、println又是个啥。通过源码发现:

System其实是个类

out是在system类中定义的一个PrintStream类对象,如下所示。

println和print都是PrintStream类中的方法,通过源码可以发现,println是调用了print方法的

print方法中又调用了write方法

 

 

还要注意PrintStream类是继承FileOutputStream类的

write方法中会用到两个类变量textout和out,其中textout为BufferedWriter对象,out则为FileOutputStream的父类OutputStream类的对象

既然说到这儿了,呢就复习一下输入输出类的继承关系吧:https://www.cnblogs.com/April1995/p/9548201.html

 

3、以下对基本数据类型的赋值,能正确编译通过的是?

A、byte a=128;

B、float d=3.0;

C、short c=32768;

D、char b=10;

A选项:Type mismatch: cannot convert from int to byte

B选项:Type mismatch: cannot convert from double to float

C选项:Type mismatch: cannot convert from int to short

 做题的时候纠结在B选项和D选项了,原来带小数点的定义Java自动认定为double型。另外选项B还可以修改为float d=3.0f

同样,既然说到这里了,就唠唠Java数据类型的隐式自动转化。简单数据类型的转化如下所示:

byte(1)-->char(2)-->short(2)-->int(4)-->long(8)-->float(4)-->double(8)

 

4、面试:挂起和阻塞的区别

挂起是一种主动的行为,线程在挂起期间不释放CPU,一般用于程序调试中的条件中断,当出现某个条件的情况下挂起,然后进行单步调试。注意如果当前挂起线程的优先级较高,就永远轮不到其他任务执行。

阻塞是一种被动行为,一般在等待某种资源或者信号量时出现。线程被阻塞时会释放CPU。

转载于:https://www.cnblogs.com/April1995/p/9676115.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值