1. JAVA面向对象编程三大特征
- 封装:将一个对象的属性私有化。提供一些可以被外界访问的属性方法,如果属性不想被外界访问,可以不被提供方法给外界访问。
- 继承:使用已存在类的定义作为基础建立新类的技术,新类必须继承父类,可以增加新的功能和数据。
(1) 子类拥有父类对象所有的属性和方法,父类中的私有属性和方法子类无法访问,只是拥有;
(2) 子类可以拥有自己的属性和方法;
(3) 子类可以用自己的方式实现父类的方法。 - 多态:程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,在程序运行期间才确定。
两种方式:1.继承——多个子类对同一方法的重写;2.接口——实现接口并覆盖接口中同一方法。
- 继承:使用已存在类的定义作为基础建立新类的技术,新类必须继承父类,可以增加新的功能和数据。
2. String/StringBuffer/StringBuilder的区别
String | StringBuffer | StringBuilder | |
---|---|---|---|
可变性 | 不可变 | 继承自AbstractStringBuilder类 | 继承自AbstractStringBuilder类 |
线性安全性 | 对象不可变,线性安全 | 加了同步锁或对调用的方法加了同步锁,线程安全 | 非线性安全 |
性能 | 每次改变都会生成一个新的String对象 | 对StringBuffer对象本身进行操作 | 可以获得10%~15%左右的性能提升 |
总结 | 操作少量数据 | 多线程 | 单线程 |
3. 自动装箱与拆箱
- 装箱:将基本类型用它们对应的引用类型包装起来;
- 拆箱:将包装类型转换为基本数据类型。
4. 在静态方法内调用一个非静态成员为什么是非法的?
由于静态方法可以不通过对象进行调用,因此在静态方法里不能调用其他非静态变量,也不可以访问非静态变量成员。
5. 在JAVA中定义一个不做事且没有参数的构造方法的作用
如果Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类的没有参数的构造方法。如果没有这个方法,则会在编译时发生错误。
6. import java和javax的区别
最开始javax是扩展的JavaAPI,随着时间的推移,现在javax已经成为标准API的一部分。
java和javax没有本质的区别。
7. 接口和抽象类的区别
接口 | 抽象类 | |
---|---|---|
方法 | 默认public | 可以有非抽象方法 |
变量 | 只有static和final变量 | 可以有其他变量 |
一个类 | 可以实现多个接口,接口本身可以通过extends关键字扩展多个接口 | 只能实现一个抽象类 |
修饰符 | 默认public | public、protected、default修饰符 |
设计层面 | 对行为的抽象,是一种行为的规范 | 抽象是对类的抽象,是一种模板设计 |
8. 成员变量和局部变量的区别
成员变量 | 局部变量 | |
---|---|---|
语法 | 1. 属于类;2. 可以被修饰符所修饰;3. 两者均能被final修饰 | 1. 在方法中定义的变量或者是方法的参数; 2. 不能被访问控制修饰符以及static所修饰 |
存储方式 | 1. 如果使用static修饰,属于类; 2. 没有使用static,属于实例 | 对象存在于堆内存,局部变量也存在于堆内存 |
生存时间 | 随着对象创建而存在 | 随着方法的调用自动消失 |
没有赋初值 | 自动以类型的默认值赋值(final除外) | 不会自动赋值 |
19. 创建对象用什么运算符?
使用new运算符创建对象实例(对象实例在堆内存中)。
20. 对象实体和对象引用的不同?
对象引用指向对象实例,可以指向0或1个对象。
一个对象可以有n个引用指向它。
21. 什么是方法的返回值?返回值在类的方法里的作用是什么?
方法的返回值是指获取到某个方法体中的代码执行后产生的后果。
作用:接收结果,使其可以进行其他的操作。