JDK和JRE的区别?
- JRE是Java运行环境(Java Runtime Environment),包含了JVM和Java核心类库
- JDK是Java开发工具包(Java Developer's Kit),包含了JRE和Java常见的开发工具
==与equals的区别?
- ==可以用来比较基本数据类型,也可以用来比较引用数据类型
- 当==用来比较基本数据类型时比较的是数值的大小
- 当==用来比较引用数据类型时比较的是地址
- equals只能用来比较引用数据类型:因为equals是Object的一个方法,要调用方法必须通过对象调用,而对象就是引用数据类型
- 默认的时候比较的是对象的地址值
- 可以通过重写Object类中的equals方法,来实现比较对象的属性
- ==可以用来比较基本数据类型,也可以用来比较引用数据类型
如果两个对象的hashCode值一样的时,用equals方法比较的时候也是true吗?
不是
hashCode和equals都是Object类中的两个独立的方法,这两个方法都可以通过子类重写,来实现子类自定义的逻辑
final的作用
- 修饰变量上---叫常量,该常量必须初始化,且初始化后不能被修改
- 修饰方法上---该方法不能被重写
- 修饰类上---该类不能被继承
String是基本数据类型吗?
- String是引用数据类型
- 基本数据类型有8种:int, short,byte,long, float, double,boolean, char
对字符串操作的有哪些类,有什么区别?
- 对字符串操作的有String,StringBuffer, StringBuilder
- 区别:
- String不可变,StringBuffer和StringBuilder可变
- StringBuffer线程安全,效率低StringBuilder线程不安全,效率高
String str="abc"与 String str = new String("abc")的 定义方法一样吗?
- 不一样
- String str="abc"是创建一个字符串对象到常量池里。
- String str = new String("abc")是创建了两个对象,"abc"字符串在常量池里,new String("")又创建一个对象
普通for和增强for的区别
- 作用与应用场景
- 普通for:可以用在所有需要重复执行的某些语句的场景
- 增强型for:只能用在数组和Collection集合
- 使用区别
- 如果使用普通for循环,需要用下标,可以修改数组的元素。
- 如果使用增强型for,不需要使用下标,但是不能修改数组的元素
- 另外,增强for循环只是一种语法糖,增强for循环遍历数组时编译器仍然会将对应代码转换为普通 for循环;增强for循环遍历Collection集合时编译器会将对应代码转换为Iterator迭代器遍历集合的代 码。
- 作用与应用场景
方法的重载(Overload)与重写(Override)的区别
- 方法的位置 :
- 重载:在同一个类中,或者在父子类中
- 重写:在子类中---->只有子类才能实现重写
- 权限修饰符
- 重载:跟权限修饰符无关
- 重写:
- private修饰的方法不能重写。
- 重写的权限修饰符要>=被重写方法的权限修饰符
- 其他修饰符
- 重载:无关
- 重写:final和static修饰的方法也不能被重写
- 返回值类型
- 重载:无关
- 重写:
- 基本数据类型和void必须相同
- 引用数据类型:重写的方法的返回值类型<=被重写的方法的返回值类型
- 方法名:
- 重载:必须相同
- 重写:必须相同
- 形参列表
- 重载:必须不同
- 重写:必须相同
- throws异常列表
- 重载:无关
- 重写:
- 被重写的方法如果没有throws异常,重写的方法也不能throws异常
- 如果被重写的方法throws异常,重写的方法throws异常类型必须<=被重写的方法
- 什么时候确认调用哪个方法
- 重载:在编译时期根据形参的不同确定调用的是哪一个方法
- 重写:在运行时期确定调用哪一个方法,这依赖于对象的实际类型
- 方法的位置 :
抽象类和接口的区别
- 抽象类:
- 继承限制:单继承
- 成员限制:
- 抽象类可以有多种类型的成员变量,包括静态变量和实例变量
- 抽象类中可以有构造方法,这有助于子类的初始化
- 抽象类可以包含代码块(静态代码块/非静态代码块)
- 抽象类可以包含抽象方法和普通方法
- 接口:
- 多实现:一个类可以实现多个接口
- 成员:
- 接口的成员变量默认是public,static,final的即常量
- 接口不允许有构造方法和代码块
- 接口的方法默认是public的。jdk9之后运行有private的方法
- jdk8之前接口的方法都默认是抽象的,jdk8之后可以包含默认方法和静态方法
- 抽象类:
谈谈你对面向对象三大特性的理解
- 面向对象的三大特性分别是:封装,继承和多态
封装:
将对象的属性和行为隐藏到类的内部只能通过方法的调用来访问属性。提高了代码的安全性和稳定性同时也提高了代码的可维护性
继承:
子类继承父类可以复用父类的属性和方法,也可以之际扩展父类的行为。减少了代码的重复。
多态: - 同一个对象以不同的角度(类型)展现不同的行为方法。使用父类或接口类型的引用指向子类对象,然后调用方法时,会根据对象的实际类型来决定调用哪个方法的实现。这样可以编写出更加灵活和可扩展的代码。
- 面向对象的三大特性分别是:封装,继承和多态