Java基础
2025-12-18 13:56:26 0 举报
AI智能生成
Java是一种广泛使用的面向对象编程语言,它被设计为具有尽可能少的实现依赖性。核心内容包括面向对象的三大特性——封装、继承和多态,以及Java的基本数据类型和引用数据类型的声明、使用和管理。此外,Java提供了丰富的核心类库来处理文件、集合、网络通信、多线程等功能。文件类型通常指的是Java源代码文件(.java)和编译后生成的字节码文件(.class)。修饰语在这里可以理解为访问控制修饰符,如public、private和protected,它们在类、接口以及类成员上的使用确保了封装性,并控制了类成员的可见性。 Java程序遵循"编写一次,到处运行"的原则,这得益于其独特的Java虚拟机(JVM)架构,它可以跨平台执行字节码。Java经历了多年的演进,持续增加新的特性和标准库支持,目前广泛应用于企业级开发、移动应用(尤其是Android平台)和大型系统构建中。
作者其他创作
大纲/内容
多态
同一个接口,不同的实现
多态的三大条件
继承:必须有父子关系
方法重写:子类必须把父类的方法“重写”一遍
父类引用指向子类对象:父类名 变量名 = new 子类名();
访问规则
变量看“户口”,方法看“实力”
成员变量:“认户口”(编译和运行都看左边
成员方法:“看实力”(编译看左边,运行看右边)
作用
解耦
扩展性强:符合“开闭原则”(对扩展开放,对修改关闭)
弊端
类受父类/接口规范约束,灵活度受限
动态绑定有轻微性能损耗
无法直接访问子类特有成员 (需强转)
逻辑跳转复杂,调试和阅读难度大
存在运行时类型转换异常风险
数组(Array)
特点
底层结构: 连续内存,像整齐的书架
直接存 int, char
只能存同一种类型
长度固定
核心方法
Arrays.fill(arr, value)
把整个箱子填满同一种东西(比如全填满泡沫纸)
Arrays.sort(arr)
把箱子里的东西按顺序排好(默认升序)。
Arrays.binarySearch(arr, key)
在排好序的箱子里快速找东西(二分查找)。
Arrays.equals(arr1, arr2)
检查两个箱子里面的东西是否一模一样。
Arrays.copyOf(arr, newLength)
检查两个箱子里面的东西是否一模一样。
Arrays.toString(arr)
把箱子内容变成一行字打印出来(否则直接打印是乱码)。
集合 (Collection)
特点
长度灵活
只能存对象,但可通过泛型灵活控制
基础类型要包装(存 int 得用 Integer)
结构多样 (数组、链表、哈希表)
核心方法
通用集合 (Collection) 方法
add(E e)
添加
remove(Object o)
删除
contains(Object o)
查询:袋子里有没有这个东西? (返回 true/false)
clear()
清空
isEmpty()
判空
size()
数量
toArray()
转数组
unmodifiableCollection
让集合不能被修改
Map (键值对) 特有方法
put(K key, V value)
存值
get(Object key)
取值
remove(Object key)
删值
containsKey()/containsValue()
包含
keySet() / values()
获取所有
为什么集合不能直接存基本类型?
基础数据类型
byte
short
int
long
float
double
char
boolean
一个对象的创建过程做了哪些事情?
Student s = new Student()
1.将Student.class字节码文件加载到内存
2.在栈内存中,开辟一个空间存储s变量,用来记录Student对象的引用
3.在堆内存中,开辟一个空间存储 new Student()对象的成员信息
4.加载类中静态成员
5.执行类中静态代码块
6.加载对象中普通成员
7.执行构造代码块
8.执行构造方法
9.将new Student0)的地址赋值给s变量
常见的异常
NullPointerException
空指针
ClassCastException
类型强制转换失败
IllegalArgumentException
方法接收到非法参数
ArithmeticException
算术运算错误(最常见:除以 0)
IndexOutOfBoundsException
集合 / 字符串索引(下标)越界
ArrayStoreException
向数组中存放与声明类型不兼容对象异常
NumberFormatException
数字格式异常
ArrayList、Vector、LinkedList 的区别
底层结构
ArrayList:动态扩容的数组(Object[])
Vector:动态扩容的数组(Object [])
LinkedList:双向链表
线程安全
ArrayList:非线程安全(效率高)
Vector:线程安全(方法加 synchronized,效率低)
LinkedList:非线程安全
访问性能
ArrayList:随机访问快(O (1)),增删慢(中间 / 头部增删 O (n),需移动元素)
Vector:随机访问快(O (1)),增删慢(同 ArrayList,且加锁更慢)
LinkedList:随机访问慢(O (n),需遍历链表),增删快(头部 / 尾部 O (1),中间 O (n) 但仅需修改节点引用)
内存占用
ArrayList:连续内存,有「预留空间」(扩容后空数组位置),内存紧凑
Vector:连续内存,扩容倍数更大,内存浪费更严重
LinkedList:非连续内存,每个节点含前驱 / 后继指针,内存开销更大
IO流分类
字节流
字节输入流 InputStream
字节输出流 OutputStream
字符流
字符输入流Reader
字符输出流 Writer
string
核心方法
int length() 获取字符串长度(字符数
char charAt(int index) 获取指定索引的字符(索引从 0 开始)
int indexOf(String str) 查找子串首次出现的索引,无则返回 - 1
int lastIndexOf(String str) 查找子串最后出现的索引
String substring(int beginIndex) 截取从 beginIndex 到末尾的子串 String substring(int begin, int end) 截取 [begin, end) 区间的子串(左闭右开)
String replace(String old, String new) 替换所有指定子串
String trim() 去除首尾空白
boolean equals(Object obj) 比较字符串内容(区分大小写)
boolean isEmpty() 判断是否为空字符串
boolean contains(CharSequence s) 判断是否包含指定子串
特点
不可变性(Immutable)
String 类被 final 修饰,拼接或者新建实际是新创建对象
字符串常量池(String Pool)
字面量创建:先检查常量池,存在则复用,否则创建新对象放入常量池
拼接字符串
接口
核心价值
定义规范、解耦抽象与实现、支持多实现
多继承
解耦性:抽象与实现分离,接口定义规范,实现类负责具体逻辑,降低耦合。
无状态:仅含常量,无实例变量,无法存储对象状态
多态基础
无构造方法
成员变量 仅 public static final 常量
核心特性
纯契约性:核心价值是定义「做什么」,不关心「怎么做」
抽象类
核心特性
不可实例化,只能通过子类实例化
单继承限制:子类只能继承一个抽象类
多态基础:抽象类可作为引用类型,指向子类实例,实现多态。
部分抽象:既封装共性代码(具体方法),又约束子类必须实现的行为(抽象方法)
不能使用final修饰
抽象类存在构造方法
核心价值
复用共性代码 + 约束子类行为
使用场景
电商系统的「支付方式」
方法重载和重写的区别
重载(Overload):同一类中「同名不同参」的方法,是编译时多态(静态多态);
重写(Override):子类覆盖父类「同名同参同返回」的方法,是运行时多态(动态多态)
数据类型底层实现原理
HashSet的实现原理
HashSet 是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成,HashSet 不允许重复的值。
通过hashCode和equal来保持唯一的
HashMap的实现原理
HashMap 的核心是「哈希算法 + 数组 + 链表 / 红黑树」
哈希算法保证快速定位桶位置;
数组是核心存储容器,保证随机访问效率
链表解决哈希冲突,红黑树优化链表过长的性能问题
文件操作
exists:判断路径是否存在
createFile:创建空文件(若文件已存在,抛 FileAlreadyExistsException)
createDirectory:创建文件夹
delete:删除文件 / 空目录(不存在则抛 NoSuchFileException)
deleteIfExists(Path path):删除文件 / 空目录(不存在则返回 false,推荐使用,避免异常)
move:移动 / 重命名文件 / 目录
copy:复制文件 / 目录
size:查看文件个数
read:读取文件
write:写文件
BIO、NIO、AIO有什么区别?
BlockIO同步阻塞式IO,就是我们平常使用的传统IO,它的特点是模式简单使用方便,并发处理能力低。
NewIO同步非阻塞IO,是传统IO的升级,客户端和服务器端通过Channel(通道)通讯,实现了多路复用。
Asynchronous IO是NIO的升级,也叫NIO2,
实现了异步非堵塞1O,异步IO的操作基于事件
和回调机制。
收藏
收藏
0 条评论
下一页