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。

数据类型:

八种基本的数据类型:

img

img

基本数据类型的转换方式,会出什么问题?

低精度转高精度可以自动转换

高精度转低精度需要强制转换可能会发生数据溢出或精度损失

引用数据类型转换问题:

img

装箱拆箱:

img

弊端:
创建多余对象

为什么用BigDemical不用double?

img

说下Integer的缓存?

img

面向对象:

怎样理解面向对象,和面向对象的三大特性:

将事务抽象成对象。

三大特性:

封装:把对象的属性和行为结合在一起

继承:子类共享父类的数据和方法。是代码复用的重要手段
多态:不同的对象对同一个接口做出不同的反应

多态:

体现:

方法重载和重写

接口的实现

解决的问题:

提高了代码的复用性和扩展性。

普通类,抽象类,接口:

普通类和抽象类:

抽象类不能实例化不能被final修饰,可以存在没有实现的方法。

接口和抽象类:
就是类和接口的区别

Object:

==和equal:

在 Java 中,== 操作符和 equals() 方法用于比较两个对象:

①、==:用于比较两个对象的引用,即它们是否指向同一个对象实例。

如果两个变量引用同一个对象实例,== 返回 true,否则返回 false

对于基本数据类型(如 int, double, char 等),== 比较的是值是否相等。

②、equals() 方法:用于比较两个对象的内容是否相等。

默认情况下,equals() 方法的行为与 == 相同,即比较对象引用。

然而equals() 方法通常被各种类重写。例如,String 类重写了 equals() 方法,以便它可以比较两个字符串的字符内容是否完全一样。

equal和hashcode:

因为基于哈希的集合类(如 HashMap)需要基于这一点来正确存储和查找对象。

什么是 hashCode 方法?

hashCode() 方法的作⽤是获取哈希码,它会返回⼀个 int 整数,定义在 Object 类中, 是一个本地⽅法。

1
public native int hashCode();

为什么要有 hashCode 方法?

目的就是获取一个对象的key

为什么hashCode相同但是它们也不一定相等?

可能存在hash冲突

hashCode 和 equals 方法的关系?

如果两个对象通过 equals 相等,它们的 hashCode 必须相等。否则会导致哈希表类数据结构的行为异常。

关键字:

final的作用:

修饰类时类不能被继承

修饰方法时方法不能被重写

修饰变量时赋值后就不能被改变

泛型:

为什么需要泛型:

多种数据类型需要执行相同代码,使用泛型不需要强制类型转换。

异常处理:

异常的处理方式:

img

注解:

注解可以标记在类上、方法上、属性上等,标记自身也可以设置一些值

2个属性:

注解可以标记在类上、方法上、属性上等

注解生命周期有三大类,分别是:

  • RetentionPolicy.SOURCE:给编译器用的,不会写入 class 文件
  • RetentionPolicy.CLASS:会写入 class 文件,在类加载阶段丢弃,也就是运行的时候就没这个信息了
  • RetentionPolicy.RUNTIME:会写入 class 文件,永久保存,可以通过反射获取注解信息

反射和代理:

硬编码和软编码

反射:

java实现软编码的一种方式,可以通过改变字符串的值来创建不同的对象,让代码来控制代码。

应用场景:

通过类名来获取对应对象

两个对象进行转换

代理:

代理模式的核心就是“包装”原对象,因此必须有两个对象:一个是原对象,一个是代理对象。
代理对象内部持有原对象的引用,通过转发、增强、控制访问等方式实现功能扩展。

序列化:

什么是序列化?什么是反序列化?

序列化(Serialization)是指将对象转换为字节流的过程,以便能够将该对象保存到文件、数据库,或者进行网络传输。

反序列化(Deserialization)就是将字节流转换回对象的过程,以便构建原始对象。

常见的序列化方式:

img