基础目录
- 1.Java面向对象编程的三大特性,封装、继承和多态。
- 2.String、StringBuffer和StringBuiled的区别是什么?
- 3.装箱与拆箱
- 4.在一个静态方法内调用一个非静态成员为什么是非法的?
- 5.在Java中定义一个不做任何事且没有参数的构造方法的作用?
- 6.java和javax有什么区别?
- 7.接口和抽象类的区别是什么?
- 8.成员变量与局部变量的区别有哪些?
- 9.创建一个对象用什么运算符?对象实体与对象引用有什么不同?
- 10.什么是方法的返回值,返回值在类的方法中的作用是什么?
- 11.一个类的构造方法有什么作用,若一个类没有声明构造方法,该程序能正确执行吗?为什么?
- 12.构造方法有哪些特性?
- 13.静态方法和实例方法有何不同?
- 14.对象的相等于指向他们引用相等有什么不同?
- 15.在调用子类构造方法之前会先调用父类的无参构造,目的是?
1.Java面向对象编程的三大特性,封装、继承和多态。
- 封装:封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性方法。
- 继承:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或功能,也可以用父类的功能,但不能选择性地继承父类。通过继承可以非常方便的复用代码。
- 子类拥有父类对象的所有属性和方法(包括私有属性和私有方法),但是父类中的私有属性和方法子类无法访问。
- 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
- 子类可以用自己的方式实现父类的方法(重写)
- 多态:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量的方法调用发出的方法调用在编程时并不确定。而是在程序运行期间才确定,即一个引用变量到底会指向那个类的实例对象,该引用变量发出的方法调用到底是哪个类实现的方法,必须在程序运行期间才能决定。
多态的两种实现方式:- 继承:多个子类对同一方法的重写。
- 接口:实现接口并覆盖接口中的同一方法。
2.String、StringBuffer和StringBuiled的区别是什么?
- 可变性:
- String类中使用final关键字修饰字符数组来保存字符串:
privat final char value[];
,所以String是不可变的。Java9之后,String类的实现改用byte数组来存储字符串private final byte[] value;
- StringBuilder和StringBuffer都继承自AbstractStringBuilder类。在AbstractStringBuilder中,也是使用字符数组保存字符串
char[] value;
但是没有使用final关键字修饰,所以这两种对象是可变的。
- String类中使用final关键字修饰字符数组来保存字符串:
- 线程安全性:
- String中的对象是不可变的,也就可以理解为常量,线程安全。
- StringBuffer对放方法加了同步锁或者对调用的方法加了同步锁,线程安全。
- StringBuilder没有对方法进行加同步锁,线程非安全。
- 性能:
- String对象每次改变的时候,都会生成一个新的String对象,然后将指针指向新的String对象;而StringBuffer和StringBuilder每次都对对象本身操作。相比之下String性能低。
- StringBuffer对方法进行加锁操作。相比于StringBuilder降低了性能,但是获得了线程安全。
StringBuilder > StringBuffer > String
- 总结:
- String:适合操作少量的数据。
- StringBuilder:适合单线程操作字符串缓冲区下操作大量数据。
- StringBuffer:适合多线程操作字符缓冲区下操作大量数据。
3.装箱与拆箱
- 装箱:将基本数据类型用它们对应的引用类型包装起来。
- 拆箱:将包装类型转换为基本数据类型。
4.在一个静态方法内调用一个非静态成员为什么是非法的?
由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。
5.在Java中定义一个不做任何事且没有参数的构造方法的作用?
Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”.。因此,如果父类中只定义了有参构造,而在子类中的构造方法中又没有用super()来调用父类中的构造方法,则编译时会发生错误,因为Java在父类中找不到没有参数的构造方法可供执行。解决方法便是在父类里面加上一个无参构造。
6.java和javax有什么区别?
- 一门语言的进行发展中的拓展。
- 最初时期JavaAPI必须的包都是java开头,javax是作为拓展API使用。随着时间的推移,javax逐渐成为Java API的组成部分。将javax转移到java中的代价太麻烦,所以直接将javax作为标准API的一部分。
7.接口和抽象类的区别是什么?
- 接口的方法默认是public,并且在接口中不能有实现。而抽象类可以有非抽象方法。(java8开始,接口方法可以有默认实现。)
- 接口中除了static和final变量,不能有其他变量。抽象类中不固定。
- 一个类可以实现多个接口,只能实现一个抽象类,接口本身也可以通过extends拓展多个接口。
- 接口方法的默认修饰符是public,抽象方法可以有public、protected和default修饰符,抽象方法是用来被重写的所以不可以使用private修饰。
- 设计层面讲:抽象是对类的抽象,是模板设计;接口是对行为的抽象,是行为规范。
8.成员变量与局部变量的区别有哪些?
- 语法形式:
- 成员变量是属于类的。局部变量是在方法中定义的变量或方法的参数;
- 成员变量可以被public、private和static修饰。局部变量不能被访问修饰符和static修饰。
- 都可以被final修饰。
- 内存上的存储方式:
- 如果成员变量使用static修饰,那么它属于类的。如果没有使用static修饰,它是属于实例的。
- 对象存在于堆内存,局部变量存在于栈内存。
- 内存上的生存时间:
- 成员变量是对象的一部分,随着对象的创建而存在。
- 局部变量随着方法的调用而消失。
- 初始化:
- 成员变量如果没有使用final修饰,那么会自动以类型的默认值赋值。
- 局部变量不会自动赋值。
9.创建一个对象用什么运算符?对象实体与对象引用有什么不同?
- 创建对象使用
new
运算符。 - new创建对象实例,存放在堆内存里;对象引用指向对象实例,存放在栈内存里。
- 一个对象引用可以指向0或1个对象实例。
- 一个对象实例可以有n个对象引用指向它。
10.什么是方法的返回值,返回值在类的方法中的作用是什么?
- 方法的返回值是指获取某个方法体中代码执行后产生的结果。
- 作用:接收处理的结果,使得可以用于其他操作。
11.一个类的构造方法有什么作用,若一个类没有声明构造方法,该程序能正确执行吗?为什么?
- 作用:完成对象的初始化工作。
- 没有声明构造也可以执行。
- 即使没有声明构造方法,也会有默认的无参构造。
12.构造方法有哪些特性?
- 名字和类名相同
- 没有返回值,也不能使用void
- 生成类的对象自动执行,无需调用
13.静态方法和实例方法有何不同?
- 调用方式:静态方法无需创建对象便可以访问;可以使用“类名.方法名”调用,也可以使用“对象名.方法名”调用.而实例方法只能使用“对象名.方法名”。
- 访问权限:静态方法在访问本类的成员(成员变量和成员方法)时,只能访问静态成员,而不能访问实例成员。实例方法没有限制。
14.对象的相等于指向他们引用相等有什么不同?
- 对象的相等,比较的是内存中存放的内容是否相等。
- 引用的相等,比较的他们指向的内存地址是否相等。
15.在调用子类构造方法之前会先调用父类的无参构造,目的是?
帮助子类做初始化工作