JAVA基础总结

92 阅读6分钟

JAVA基础总结

一.数据类型

1.引用数据类型
2.基础数据类型:

四类八种:

整数:

byte:1字节(-128~127),默认值是0

shot:2字节,默认值是0

int:4字节,默认值是0,包装类Integer

long:8字节,默认值0

小数:

folat:4字节,默认值是0.0(定义后面要加F)

double:8字节,默认值是0.0

字符

char:2字节(0~65535),默认值是''(空字符)

布尔

boolean:true/false,默认值是false

注:整数字节数记1、2、4、8

二.关键字

关键字不能用来做标识符(变量名,方法名等)

1.static关键字

特点:随着类的加载而加载

修饰类:一般作为内部类

修饰变量:静态变量,在方法区中,被多个当前类的对象共享。有线程安全问题。可以直接通过类名访问,也可以通过对象访问但是不建议。

修饰方法:静态方法,在方法区中,可以直接通过类名访问,只能访问静态变量

修饰代码块:静态代码块,先于构造器之前执行,且只会执行一次

注:静态优先于非静态之前,静态修饰的方法不能被重写

2.final关键字

修饰类:最终类,不能被继承。(String类就是被final修饰的)

修饰变量:常量,只能初始化一次(常量建议要求都大写),初始化时机可以说变量进行初始化或构造器中初始化。

修饰方法:最终方法,不能被重写

final、finally、finalize 的区别:

finally一般用于try...catch块中华,表示一定会执行的方法(如果try中有return语句,也会在return之前先执行finally里的语句,但是如果try中有System.exit(0);语句就会直接关掉jvm虚拟机,就不会执行finally里的语句了)

finalize方法:Object类的方法,GC时会调用,JDK9之后,方法过时了

三.Java特性

封装

优点:提高内聚性,封装方法和类

三部曲:属性私有化,公开getter/setter方法,setter编写合理逻辑

继承

本质:子类is a 父类

复用性:公有内容抽取到父类中

子类可以继承父类的非私有方法(有争议)

构造子类对象:会先调用父类的构造器,用super实现,super必须出现在构造器的第一行,this和super只能出现一个

抽象类:抽象类不能直接创建对象,其中的抽象方法由子类去继承重写。(抽象类可以没有抽象方法,但是由抽象方法的类必须是抽象类)

方法重写:前提是继承,父类方法无法满足子类需求时,就需要重写父类的方法(被重写的方法一般会定义为抽象方法)

重写和重载:

重写是在继承的情况下,子类重写父类的方法,声明和父类方法一样,方法体不一样

重载是在同一个类中,方法名相同,方法参数的个数或种类不同。

多态

优点:提高了扩展性

父类引用指向子类实例

编译看父类,运行看子类

条件:要有继承或实现,由方法的重写

注:多态不能直接调用子类的特有方法和属性,必须通过强制类型转换,可以用instanceof 判断对象的实际类型。如下

对象名 instanceof 类名  //是该类型返回true,否则返回false
接口

本质:类has a接口

方法重写:需要重写接口类里的抽象方法

注:java8之后接口里可以放公开抽象方法、默认方法和静态方法,能放公开静态常量

四.异常

体系:

在项目中的使用:

屏幕截图 2025-07-06 142643.png

自定义异常:继承RuntimeException方法,定义方法,有参构造器(String message)。在业务中如果愮抛出异常,一定是抛出自定义异常。

全部局异常处理器:定义多个处理异常的方法,对不同的异常给出不同的处理。同时会声明一个专门处理Exception异常的方法作为兜底方案

声明式事务:@Transactional(rollbackFor=Exception.class)

面试题:

1.说说你常见的运行时异常?

至少说出上面六种异常

2.项目中对异常是怎么控制的?

通过throws向上声明异常,由最高层try...catch处理异常

五.Object方法

toString:转为字符串

equals:比较传入的对象和当前对象是否相等,底层使用的是==

hashCode:获取Hash值

getClass:获取字节码(类.class 或 对象.getClass)

wait:在同步代码块中,用于让当前线程处于等待状态,会释放锁。等待其他线程调用 notify 或 notifyAll 唤醒,再执行。于sleep的区别是,sleep是线程的静态方法,用于指定线程的休眠时间,不会释放锁。

notify: 用于唤醒在该对象上调用 wait() 而进入等待状态的某一个线程

notifyAll:唤醒所有在该对象上调用 wait() 进入等待状态的线程。

clone:克隆对象,只有实现了 Cloneable 接口才能克隆,该接口无任务内容(标记型接口),起到标记作用。告知JVM,这个对象是可克隆。分为深克隆和浅克隆。

六.String

常量类(最终类),是一个对象

String str =new String("abc"); 这里早了两个对象:"abc"在常量池中,newnew String(指向常量池中abc的地址):在堆中

JDK8后对String做了优化:String str =new String("abc"); 只有一个对象了。由存储的char数组 改为 byte数组,字节存储操作,性能提升

String:常量类

StringBuilder:用来操作String、提升性能的类库,线程非安全

StringBuffer:用来操作String、提升性能的类库,线程安全

StringJoiner:用于更好的拼接字符串,可以选择声明开头什么结尾还有用什么分隔

String的常用方法:

length:获取字符串长度

trim:去除前后空格

getBytes:获取byte型数组

subString:前包后不包,从字符串中取一段

indexOf、lastIndexOf: 查找元素第一次出现的位置 , 查找元素最后一次出现的位置

split:分割,返回字符串数组

equals:重写了Object类的方法,用于比较两个字符串的内容是否一致

toUpperCase:全转为大写

toLowerCase:全转为小写

valueOf:转为String型

七.== 和 equlas的区别

== 是关系运算符,比较两个对象是否相等:

用于基本数据类型,比较值

用于引用数据类型:比较地址

equlas底层默认使用的是==

但是重写了equlas和hashCode方法,可以比较对象是否完全相一样