java基础八股
抽象类
- 抽象类只有方法,没有实现,下面的子类继承父类,并且子类可以有自己的方法,比如Integer、Double包装类继承了Number类,Number类是一个抽象类,只有定义没有实现。如何体现多态?我们可以写父类的方法,但是调用的是不同的子类重写的方法。这就是运行时多态(即“动态绑定”)的典型体现。
1 | public static void printValue(Number value) { |
装箱和拆箱
自动装箱/拆箱就是基本数据类型和包装类的转换。
弊端:如果创建类型不同,会造成GC的负担
1 | Integer sum; |
就会一直浪费时间装箱拆箱,生成5000个无用的对象,增加了GC的负担。
Java中为什么要有Integer
- Integer是int被包装成Object对象,对象封装有很多好处,可以把属性和方法结合在一起;
- 为了支持泛型和集合框架。在创建集合的时候,集合类只能放对象,比如ArrayList
java是面向对象语言,很多API只能接受对象
什么是集合和泛型?
- 集合是Java中用来统一存储一组对象的数据结构,比如列表、集合、映射等,属于java.util包
类型 说明 示例 List 有序、可重复 ArrayList
、LinkedList
Set 无序、不可重复 HashSet
、TreeSet
Map 键值对结构,键不可重复 HashMap
、TreeMap
- 泛型是 Java 提供的一种类型参数化机制,让你在写集合或类的时候不必固定元素类型,而是用占位符
等代替。
封装继承多态
父类引用指向子类对象,调用的方法在运行时根据对象的实际类型动态决定,实现“同一操作不同实现”。
示例:Person p = new Student(); p.getInfo() 实际调用的是 Student 的重写方法。
抽象类和接口有什么区别?
- 抽象类是对一类事物的抽象,接口是对能力的抽象。
- 抽象类可以包含字段、构造方法、普通方法和抽象方法;接口只能包含常量和抽象方法(Java 8+ 允许 default/static 方法)。
- 类只能继承一个抽象类,但可以实现多个接口。
- 抽象类不能实例化,只能被继承;接口不能实例化,只能被实现。
- 父类类型变量不能直接调用子类实现的接口方法,除非强制类型转换。
抽象类不能被final修饰,final修饰符用于禁止类被继承或方法被重写,抽象类和final是互斥的。
String
就有final修饰,保证了String类的不可变性和安全性。final主要用于修饰类,方法,以及对象,保证不可变性。
引用不可变是什么?
- 引用指的是创建出来的变量其实指向了堆内存中的一个对象,这个变量就是一个引用变量
1 | StringBuilder sb = new StringBuilder; |
- 这个sb就是一个引用变量,指向了
堆内存里一个StringBuilder对象
。- 理解sb为一个遥控器
- sb指向的对象是电视
引用不可变指的是,我这个遥控器只能控制这一台电视,不可以控制别的电视(如下,这是非法的),但是可以更改电视播放的内容,(如sb = 123)这是可以的
1 | sb = new StringBuilder("new"); |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Explainfuture's Blog!