刷java面试题第二天

1、 面向对象的三大基本特性
封装、继承、多态
封装:隐藏对象的属性和实现细节,仅对外公开接口,可以通过设置对象属性的访问级别。目的是增强安全性和简化代码,使得我们不需要考虑具体的实现细节,只需要使用对外提供的接口就行。
继承:子类继承父类的属性和方法,目的是对父类的属性和方法进行复用。
注意事项:
子类必须继承父类的一个构造方法(有参或者无参构造)
子类访问顺序为:子类 -》 父类 -》父类的父类等等
子类不能继承父类的私有属性和方法
子类的方法访问权限不能比父类的权限低
Java中只支持单继承
多态:同一个行为表现为不同的表现形式。
必要条件:继承、重写、父类引用指向子类对象
重写(Override):运行时的多态,运行的时候来判断是否是否执行子类的方法,还是执行父类的方法(方法为重写方法)
重载(Overload):编译时的多态,发生在同一个类中,通过方法名、参数名、参数顺序来判断
2、 java中有了基本数据类型为何还要包装类型
装箱与拆箱基本概念:将值类型与包装类型相互转化
装箱:值类型-》引用类型,通过调用包装类型的valueOf()方法实现
拆箱:引用类型-》值类型,通过调用xxxValue方法实现
原因:java是一门面向对象的语言,基本数据类型不具备面向对象的特点,因此需要把他包装成包装类型,这样就具备面向对象的特点,可以给他加属性和方法等一系列的操作。
3、“”与equals的区别
栈内存:主要存放基本数据类型与引用变量
堆内存:主要存放对象以及数组
栈中的变量指向的是堆中变量的首地址
刷java面试题第二天
”:如果是比较基本数据类型,就可以直接比较,但是如果比较引用类型(如对象),比较的是引用类型所在的首地址。
“equals”:比较的是具体的值,首先会比较是否是指向同一个地址,然后会比较内容。
4、 String StringBuilder StringBuffer的区别
String: 类中采用一个不可变的字符数组来存放字符串,一旦创建就不可变。
StringBuilder:采用的是可变的字符数组,可变字符串。
StringBuffer:采用的是可变的字符数组,可变字符串。
运行速度:StringBuilder > StringBuffer > String
安全性:StringBuffer是安全的,因为对StringBuffer的操作加了同步锁,但是StringBuilder没有加锁,是不安全的,因为如果涉及到多线程同时操作一个字符串,不加锁容易造成错误。