Java不会或做错的面试题总结
Posted littlemike
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java不会或做错的面试题总结相关的知识,希望对你有一定的参考价值。
1. 八种基本数据类型的封装类及其大小(字节)
答:byte Byte 1
short Short 2
int Integer 4
long Long 8
float Float 4
double Double 8
char Character 2
boolean Boolean - (boolean是JVM没有的数据类型,根据《Java虚拟机规范》,boolean会被JVM编译成int数据类型来代替,boolean数组则会被JVM编译成byte数组,每个boolean占8位,所以boolean单独使用是占4字节,而用boolean数组则每个boolean占1字节)
那JVM为什么要用int来代替boolean呢,用byte或short不是更节省内存空间吗?其实用int的原因是对于当下32位的CPU来说(这里是指32/64位系统,而是指CPU硬件层面),具有高效存取的特点
2.这题做错了,贴正确答案的理解出来
1 //int y = x++ + ++x; 先是x++为4,然后完成这一步就变成5了,然后++x为6,所以y为10 2 //如果是int y = ++x + x++;结果也为10,但是过程不一样:先是++x为5,然后x++也为5 3 int x = 4; 4 int y = x++ + ++x;//y=4+6=10,最后x的值为6 5 System.out.println(++x + y + x++);//7+10+7=24,所以打印出的值为24
3.==与equals的区别
i. 一般用==比较基本数据类型,用equals比较对象
ii. ==判断两个变量或者实例是不是指向同一个内存空间,是对内存地址进行比较;而equals判断两个变量或者实例指向的内存空间的值是否相同
iii. 简单来说就是==判断引用是否相同,equals判断值是否相同
4. A类有个x方法,B类继承A类,B类的x方法的访问修饰符(private, public这些)能改变吗?要怎么改?
答:只能向更可见的方向改,比如,A类的x方法是protected修饰的,那B类的x方法就只能是public,因为要避免父类方法可见而子类却不可见
5. A类有个x方法throw出异常,B类继承A类并重写了x方法,请问要throw怎样的异常?
答:只能向下throw,也就是throw A类x方法的异常的子类,比如A的x方法throw Exception,B的方法throw InterruptedException。这是因为编译器要求调用子类方法的时候捕捉的是父类方法的异常,所以如果B的x方法throw的异常是A异常的父类,那就捕捉不了A的x方法的异常了
6. public, protected, default, private这几个访问修饰符的区别
答:public : “公共的”,所有其修饰的类、属性和方法能被所有类访问(同类,同包不同类,不同包的子类,不同包的非子类)
protected: “保护形”,其修饰的类、属性和方法可被(同类,同包不同类,不同包的子类)访问,不可被(不同包的非子类)访问
default: “默认访问模式”,其修饰的类、属性和方法可被(同类,同包不同类)访问,不可被(不同包的子类,不同包的非子类)访问
private: “私有的”,其所修饰的类、属性和方法仅可被该类的对象访问,其他类要访问private的属性要用getter, setter方法
7. 初始化的顺序(这一题他是给了代码,B类继承A类,然后主方法里new了两个B类,问会打印出什么)
答:父类静态属性(只会调用一次)>父类静态代码块(只会调用一次)>子类静态属性(只会调用一次)>子类静态代码块(只会调用一次)
>父类非静态代码块>父类构造器>子类非静态代码块>子类构造器
Firstly written on October 16th, 2019
那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗。大多数人都会很自然的这样去想,我同样也有这个疑问,经过查阅资料发现,使用int的原因是,对于当下32位的处理器(CPU)来说,一次处理数据是32位(这里不是指的是32/64位系统,而是指CPU硬件层面),具有高效存取的特点。
以上是关于Java不会或做错的面试题总结的主要内容,如果未能解决你的问题,请参考以下文章