目录
javaSE
1.java基础数据类型
2.变量和方法
成员变量和局部变量的区别??声明位置、作用域、生命周期、默认值
3.类和对象
面向对象和面向过程的区别??
多态的理解:
编译时多态与运行时多态的区别。 P5
接口和抽象类的区别??
访问权限修饰符:
static 和 final的区别:
重载和重写:
浅拷贝和深拷贝:(浅拷贝复制的是对象的引用,而深拷贝是复制对象的引用的对象)
this 和 super
方法区,堆区,栈区
String
String、StringBuffer、StringBuilder的区别
String常见的操作方法
字符串常量池概念
new String("abc")和String a = "abc"的区别
Object
“==”和equals的区别
hashCode()和equals()的关系
异常
throws用在方法声明上,throw用在手动抛出异常中。
编译异常(受检异常)必须被全部声明(throws),否则编译器会发出错误提醒。
try-catch-finally
子类重写父类带有throws的方法时
异常与线程
Exception 和 Error 有什么区别?
泛型
泛型的背景
反射
反射过程
反射的应用场景
javaSE
java语言特点:面向对象(封装,继承,多态)、平台无关性--》一次编写,到处执行(jvm实现,解释型语言),支持多线程。
jvm + 核心类库 --》jre + 开发工具---》jdk
字节码文件由十六进制值组成,jvm以两个为一组,即以字节为单位。
switch不支持 long型数据
访问修饰符 private,default(默认),protected,public的区别? |||default和protected不能修饰类。
static静态方法不可以引用非静态资源。static变量会被多个类的实例共享。
1.java基础数据类型
基本数据类型直接存储数据值,在栈上分配内存;而包装类型是对象动态分配内存,在堆上创建。
2.变量和方法
成员变量和局部变量的区别??声明位置、作用域、生命周期、默认值
**默认值
成员变量:
如果不显式初始化,会有默认值(例如,整数默认为
0
,对象引⽤默认为
null
等)。
局部变量:
不会⾃动初始化,必须在使⽤之前显式初始化。
3.类和对象
面向对象和面向过程的区别??
多态的理解:
因为⼦类其实是⼀种特殊的⽗类,因此
Java
允许把⼀个⼦类对象直接赋给⼀个⽗类引⽤变量,⽆须任何类型转换, 或者被称为向上转型,向上转型由系统⾃动完成。
当把⼀个⼦类对象直接赋给⽗类引⽤变量时,例如
BaseClass obj = new SubClass();
,这个
obj
引⽤变量的 编译时类型是 BaseClass
,⽽运⾏时类型是
SubClass
,当运⾏时调⽤该引⽤变量的⽅法时,其⽅法⾏为总是表 现出⼦类⽅法的⾏为特征,⽽不是⽗类⽅法的⾏为特征,这就可能出现:相同类型的变量、调⽤同⼀个⽅法时呈现 出多种不同的⾏为特征,这就是多态。
!!!注
运行时是后者的类型LinkedList为什么,list会报错,如下
List<Integer> list = new LinkedList<>();
list.addFirst(1);
在这种情况下,虽然list的运行时类型是LinkedList,但由于编译时类型是List,编译器只能根据List接口中定义的方法来进行类型检查,因此不能直接调用LinkedList特有的方法。
编译时多态与运行时多态的区别。 P5
接口和抽象类的区别??
构造方法不能重写。(子父类的构造方法名不可能相同,重写要求方法名相同)
访问权限修饰符:
在
Java
中,访问权限通过访问修饰符来控制。主要的访问修饰符有四个:
public
、
protected
、
default
(默 认修饰符)和 private
。这些修饰符可以⽤于类、变量、⽅法和构造⽅法。
修饰符 public
表示对所有类可⻅。⼀个类如果被声明为
public
,那么它可以被其他任何类访问。
修饰符 protected
表示对同⼀包内的类和所有⼦类可⻅。⼦类可以访问⽗类中声明为
protected
的成员, ⽽不管⼦类与⽗类是否在同⼀包中。
如果没有使⽤任何访问修饰符(即没有写 public
、
protected
、
private
),则默认为包级别访问。这意 味着只有同⼀包中的类可以访问。
修饰符 private
表示对同⼀类内可⻅。私有成员只能在声明它们的类中访问。
static关键字:静态,不需实例化。
static 和 final的区别:
当 final
⽤于修饰变量、⽅法或类时,表示它是不可变的。对于变量,⼀旦赋值后就不能再修改;对于⽅ 法,表示⽅法不能被⼦类重写;对于类,表示类不能被继承。
重载和重写:
重载是在同⼀个类中定义多个⽅法,⽅法名相同但参数列表不同。
重写是在⼦类中重新定义⽗类中已有的⽅法,⽅法名和参数列表必须相同。
重载与返回类型和访问修饰符⽆关,⽽重写要求⽅法签名相同。
重载是编译时多态,⽽重写是运⾏时多态。
浅拷贝和深拷贝:(浅拷贝复制的是对象的引用,而深拷贝是复制对象的引用的对象)
浅拷⻉复制对象,包括对象的引⽤,两者共享引⽤对象。
深拷⻉复制对象及其引⽤的对象,两者不共享引⽤对象,即引⽤对象也会被复制。
在
Java
中,浅拷⻉通常通过
clone
⽅法实现,深拷⻉可以通过⼿动实现
clone
⽅法、序列化和反序列化,或 者使⽤第三⽅库来实现。
this 和 super
this
可以作为当前对象的引⽤,但是
super
却不可以作为⽗类对象的引⽤
方法区,堆区,栈区
方法区存放静态不变的资源,如class文件
栈区存放引用和方法
堆区存放new 出来的对象
String
Java
中⽤双引号括起来的字符串,如:
"abc"
、
"def"
,都是直接存储在
“
⽅法区
”
的
“
字符串常量池
”
当中的。
String底层用的什么?
在
JDK1.9
以后,底层是
byte
类型的数组,之前是char数组。
String、StringBuffer、StringBuilder的区别
String 不可变 StringBuffer 可变,线程安全 StringBuilder 可变,线程不安全
String常见的操作方法
字符串常量池概念
Java
中,字符串是不可变的,这就意味着⼀旦创建了⼀个字符串对象,它的值就不能被修改。为了提⾼性能和减少内存占⽤,Java
使⽤了字符串常量池的概念。
当程序中创建字符串常量时,这些字符串常量会被存储在字符串常量池中。如果后续的代码中创建了相同内容的字 符串常量,Java
不会再创建新的对象,⽽是直接引⽤已经存在的字符串常量。这就意味着多个引⽤可以指向相同的字符串。
new String("abc")和String a = "abc"的区别
???
Object
“==”和equals的区别
hashCode()和equals()的关系
如果两个对象相等,则它们必须有相同的哈希码。
如果两个对象有相同的哈希码,则它们未必相等。
equals默认比较引用,要比较内容需要自己重写。
异常
Java的异常都是派⽣于Throwable类的⼀个实例,所有的异常都是由Throwable继承⽽来的
throws用在方法声明上,throw用在手动抛出异常中。
编译异常(受检异常)必须被全部声明(throws),否则编译器会发出错误提醒。
try-catch-finally
finally
⼀般⽤来关闭所占⽤的资源。如果代码抛出异常,就会终⽌剩余代码的处理,并且退出这个⽅法。 这样可能会导致⼀些程序占⽤的系统并不能被正确的释放。
子类重写父类带有throws的方法时
其声明的异常范围必须要在⽗类的⽀持范围内,即范围不能⽐⽗类⼤。 只能保持范围不变或者更精确,不能变⼤。如果⽗类没有throws
,那么⼦类也不能有
throws
,受检异常必须在⼦类内部捕获处理。
异常与线程
Java
中的异常是线程独⽴的,线程的问题应该由线程⾃⼰来解决,⽽不要委托到外部,
也不会直接影响到其它线程的执⾏
Exception 和 Error 有什么区别?
泛型
泛型的背景
反射
反射过程
反射的基本步骤包括获取
Class
对象、获取类的信息(构造函数、⽅法、字段等),然后通过
Constructor
、
Method
、
Field
等类的实例进⾏具体的操作。
反射的应用场景
Spring/Spring Boot
、
MyBatis
等等框架中都⼤量使⽤了反射机制。
这些框架中也⼤量使⽤了动态代理,⽽动态代
理的实现也依赖反射。
Spring
框架就是通过反射和注解来实现依赖注⼊
集合
Collection
list set queue
Map
概述
所有的集合都位于
java.util
包下,
Java
集合的基本接⼝是
Collection
接⼝和
Map
接⼝,所有的实现类都是这两个接⼝派⽣出来的。
Collection
⼀次存⼀个元素,是单列集合,
Map
⼀次存⼀对元素,是双列集合。
Map
存储的⼀对元素:键
–
值,键 (key
)与值
(value)
间有对应
(
映射
)
关系。
Hash 和 tree 区别
- 哈希表适合快速查找,适用于需要快速存取数据的场景。
- 树适合维护有序数据、支持范围查找、以及需要顺序遍历数据的场景
集合框架图
集合框架底层的数据结构:
集合框架底层使用了什么数据结构
线程安全不安全
List集合
ArrayList 和 Array 的区别?
ArrayList 和 LinkedList 的区别
ArrayList扩容机制
Set 集合
不同Set区别
LIst、Map 和 Set 区别
Queue集合
Map集合
map接口的实现类
hashmap 和 hashtable 的区别
hashmap 和 hashset 的区别
多线程
进程线程基础
什么是进程和线程
线程的创建方式
继承Thread类
实现runnable接口
使用Executor框架 (线程池)
线程的生命周期
run 和 start 的区别?