java基础
java概述:
什么是java?
同时,Java 又是一门平台无关的编程语言,即一次编译,处处运行。
Java 没有了指针的概念,实现了内存的自动管理,而 C 语言需要使用 malloc 和 free 来手动管理内存。
java的语言特性:
①、面向对象
②、平台无关性
③、支持多线程
④、支持 JIT 编译,编译与解释并存
jvm,jdk,jre的区别:
JVM:也就是 Java 虚拟机,是 Java 实现跨平台的关键所在,不同的操作系统有不同的 JVM 实现。JVM 负责将 Java 字节码转换为特定平台的机器码,并执行。
JRE:也就是 Java 运行时环境,包含了运行 Java 程序所必需的库,以及 JVM。
JDK:在JRE的基础上有了编译器,能将java源代码编译成字节码文件
简单来说,JDK 包含 JRE,JRE 包含 JVM。
数据类型:
八种基本的数据类型:


基本数据类型的转换方式,会出什么问题?
低精度转高精度可以自动转换
高精度转低精度需要强制转换可能会发生数据溢出或精度损失
引用数据类型转换问题:

装箱拆箱:

弊端:
创建多余对象
为什么用BigDemical不用double?

说下Integer的缓存?

面向对象:
怎样理解面向对象,和面向对象的三大特性:
将事务抽象成对象。
三大特性:
封装:把对象的属性和行为结合在一起
继承:子类共享父类的数据和方法。是代码复用的重要手段
多态:不同的对象对同一个接口做出不同的反应
多态:
体现:
方法重载和重写
接口的实现
解决的问题:
提高了代码的复用性和扩展性。
普通类,抽象类,接口:
普通类和抽象类:
抽象类不能实例化不能被final修饰,可以存在没有实现的方法。
接口和抽象类:
就是类和接口的区别
Object:
==和equal:
在 Java 中,== 操作符和 equals() 方法用于比较两个对象:
①、==:用于比较两个对象的引用,即它们是否指向同一个对象实例。
如果两个变量引用同一个对象实例,== 返回 true,否则返回 false。
对于基本数据类型(如 int, double, char 等),== 比较的是值是否相等。
②、equals() 方法:用于比较两个对象的内容是否相等。
默认情况下,equals() 方法的行为与 == 相同,即比较对象引用。
然而equals() 方法通常被各种类重写。例如,String 类重写了 equals() 方法,以便它可以比较两个字符串的字符内容是否完全一样。
equal和hashcode:
因为基于哈希的集合类(如 HashMap)需要基于这一点来正确存储和查找对象。
hashCode() 方法的作⽤是获取哈希码,它会返回⼀个 int 整数,定义在 Object 类中, 是一个本地⽅法。
1 | public native int hashCode(); |
目的就是获取一个对象的key
为什么hashCode相同但是它们也不一定相等?
可能存在hash冲突
如果两个对象通过 equals 相等,它们的 hashCode 必须相等。否则会导致哈希表类数据结构的行为异常。
关键字:
final的作用:
修饰类时类不能被继承
修饰方法时方法不能被重写
修饰变量时赋值后就不能被改变
泛型:
为什么需要泛型:
多种数据类型需要执行相同代码,使用泛型不需要强制类型转换。
异常处理:
异常的处理方式:

注解:
注解可以标记在类上、方法上、属性上等,标记自身也可以设置一些值
2个属性:
注解可以标记在类上、方法上、属性上等
注解生命周期有三大类,分别是:
- RetentionPolicy.SOURCE:给编译器用的,不会写入 class 文件
- RetentionPolicy.CLASS:会写入 class 文件,在类加载阶段丢弃,也就是运行的时候就没这个信息了
- RetentionPolicy.RUNTIME:会写入 class 文件,永久保存,可以通过反射获取注解信息
反射和代理:
硬编码和软编码
反射:
java实现软编码的一种方式,可以通过改变字符串的值来创建不同的对象,让代码来控制代码。
应用场景:
通过类名来获取对应对象
两个对象进行转换
代理:
代理模式的核心就是“包装”原对象,因此必须有两个对象:一个是原对象,一个是代理对象。
代理对象内部持有原对象的引用,通过转发、增强、控制访问等方式实现功能扩展。
序列化:
什么是序列化?什么是反序列化?
序列化(Serialization)是指将对象转换为字节流的过程,以便能够将该对象保存到文件、数据库,或者进行网络传输。
反序列化(Deserialization)就是将字节流转换回对象的过程,以便构建原始对象。
常见的序列化方式:
