JavaSE面试
①.简述面向对象的三大特征
封装、继承、多态
1.封装:
概念:
是将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
好处 :
①便于修改,增强了代码的可维护性。
②隐藏了实现细节,还要对外提供可以访问的方式。便于调用者的使用。
③提高了安全性。
实现:
使用private修饰符实现属性私有化,并提供setter和getter方法
2.继承:
概念:
继承是把多个类中相同的内容给提取出来定义到一个类中,这个类就叫做父类,又称超类或基类,而多个类就是子类
好处:
①提高了代码的复用度,减少了代码的重复,提高软件开发效率
②继承的出现让类与类之间产生了关系,提供了多态的前提
实现:
通过关键字extends可以声明一个类是从另外一个类继承而来
3.多态
概念:
接口的多种不同实现方式,父类型引用指向子类型对象。
好处:①简化了代码
②提高了维护性和扩展性
缺点:①通过父类引用操作子类对象时,只能使用父类中已有的方法,不能操作子类特有的方法
实现:
①存在继承关系
②存在方法重写
③父类型引用指向子类型对象
接口和抽象类的区别
接口 抽象类
构造方法 无 有,用于子类实例化使用
抽象方法/具体方法 只有抽象方法 可以有抽象方法和具体方法
修饰符 只有private 四种修饰符都有(public 、缺省、protected、private)
成员变量 只能是常量(省略 public static final ) 可以是变量,也可以是常量
具体方法:静态方法、默认方法
1.为什么要引入静态方法?
解决接口的修改与现有的实现不兼容问题。因为以前要加入抽象方法时,抽象类必须要实现方法,加入默认方法后,后续实现的接口,对他们没有多大影响。
2.为什么要引入默认方法?
引进静态方法之后,可以通过接口名来调用,不用通过new实现类了。
重写
1.发生在子类中
2.方法名、形参列表、返回类型都相同,权限修饰符的范围要大于父类方法,声明异常范围要小于父类方法
3.子类和父类再同一个包中,子类可以重写父类所有的方法。除了声明为private和final的方法和构造方法
重载
1.发生在同一类中
2.方法名相同,参数列表、返回类型、权限修饰符可以不同
基本类型和封装类型
包装类
直接能够将简单类型的变量。在执行变量类型相互转换时,会使用大量包装类
基本类型 VS 包装类型
基本类型 包装类型
声明方式不同 不需要new来创建 需要通过new的关键字的方式来创建
存储方式及位置不同 是直接存储变量的值保存在堆栈中能高效的存取 需要通过应用指向实例,具体的实例保存在堆中
初始值不同 视具体值而定 初始值为null
使用方式不同 eg:集合类合作使用时只能使用包装类型
基本类型和包装类型相互转换
基本类型--->包装类型: 通过new Integer(6);
包装类型--->基本类型: 通过parseInt();
原文链接:https://blog.csdn.net/qq_44419734/article/details/131348078
- ==
1.如果比较的对象时基本类型,则比较数值是否相等
2.如果比较的是应用数据类型,则比较的对象是内存地址是否相等
- equals
用来比较两个对象的内容是否相等
String 类能被继承吗,为什么
String 是一个 final 修饰的类,被final 修饰类不可以被继承
原因:
1. 效率性,String 类作为最常用的类之一,禁止被继承和重写,可以提高效率
2.安全性,String 类中有很多调用底层✁本地方法,调用了操作系统的API,如果方法可以重写,可能被植入恶意代码,破坏程序
原文链接:https://blog.csdn.net/qq_44419734/article/details/131348078
final:
可以修饰全局变量,表示此变量必须赋初值,且后期不可更改。 可以修饰局部变量,表示该局部变量可以不赋初值,一旦赋值后不可更改。
可以修饰类,表示该类不可被继承
可以修饰方法,表示该方法,不可以被重写
finally:
通常与try-catch联用,声明在finally的语句代码块一定会被执行。 一般用于资源释放。
finalize:
是垃圾回收机制中使用到的方法。