一、面向对象的特征?
- 抽象
- 抽象是指将同一类的对象的共同特征总结出来,构造新类的过程。抽象只关心对象的属性与行为,并不关心行为的具体实现细节。
- 继承
- 继承是指从已有类得到继承信息,创建新类的过程,提供继承信息的类为父类,得到继承信息的类为子类。
- 多态
- 多态是指不同子类的对象对同一消息,做出不同的响应,也就是父类引用变量指向子类对象,调用同样的方法,做出不同的事情。多态分为编译时的多态性与运行时的多态性,方法的重载就是编译时的多态性,方法的重写就是运行时的多态性。
- 封装
- 封装是指数据与操作数据的方法绑定起来,通过已定义的接口对数据进行访问。
二、访问修饰符的区别?
三、Java中的基本类型有哪些?
Java中有八大基本类型:byte short int long float doble char boolean
其余都是引用类型
四、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗?
short s1 = 1; s1 = s1 + 1; 因为1时int类型,s1位short类型,在使用时,不能将int转换为int类型,所以不对。
short s1 = 1; s1 += 1; 因为1时int类型,s1位short类型,在使用时,s1发生了强制类型的转换,相当于 s1 = (short)(s1+1);
五、关于基本类型与它们的包装类型?
示例一:
Integer a = new Integer(3);
Integer b = 3;// 将3自动装箱成Integer类型
int c = 3;
System.out.println(a == b); // false 两个引用没有引用同一对象
System.out.println(a == c); // true a自动拆箱成int类型再和c比较
System.out.println(b == c); // true b自动拆箱成int类型再和c比较
示例二:
Integer f1 = 100;
Integer f2 = 100;
Integer f3 = 150;
Integer f4 = 150;
System.out.println(f1 == f2);
System.out.println(f3 == f4);//整型字面量的值在-128到127之间,如果超过,则会new新的Integer对象。
六、简单解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。
Java虚拟机中内存空间的分配图:
一个完整的栈帧包含:局部变量表、操作数栈、动态连接信息、方法正常完成信息和方法异常完成信息
Java虚拟机栈的特征
线程私有
后进先出(LIFO)栈
存储栈帧,支持Java方法的调用、执行和退出
可能出现OutOfMemoryError异常和StackOverflowError异常
Java本地方法栈的特征
线程私有
后进先出(LIFO)栈
作用是支撑Native方法的调用、执行和退出
可能出现OutOfMemoryError异常和StackOverflowError异常
有一些虚拟机(如HotSpot)将Java虚拟机栈和本地方法栈合并实现
局部变量表概念和特征
由若干个Slot组成,长度由编译期决定
单个Slot可以存储一个类型为boolean,byte,char,short,float,reference和returnAddress的数据,两个Slot可以存储一个类型为long或double的数据
局部变量表用于方法间参数传递,以及方法执行过程中存储基础数据类型的值和对象的引用
操作数栈的概念和特征
是一个后进先出栈,由若干个Entry组成,长度由编译期决定
单个Entry即可以存储一个Java虚拟机中定义的任意数据类型的值,包括long和double类型,但是存储long和double类型的Entry深度为2,其他类型的深度为1
基本数据类型的变、一个对象的引用、方法调用的时候 都是保存在JVM中的栈空间。
通过new关键字、构造器创建的对象则放在堆空间,堆是垃圾收集器管理的主要区域。
String str = new String("hello");
str 在栈空间中
new创建出来的字符串独享放在堆空间中
"hello"这个字面量放在方法区中