Java SE学习笔记
步骤
1、编写源文件 XXX.java
2、编译源文件,生成同名字节码(类)文件 它是Java的最小可执行单元
3、解释执行字节码文件,显示结果
类的简单定义
类名要见名知意,首字母大写
main方法的结构和意义
定义在类当中,静态,void 没有返回值。
args 自定义参数名称
只有一个String[]字符串数组参数
普通的Java程序永远从main方法开始执行
注释
文档注释:
/**
*
*
*/
单行注释:
//
多行注释
/*
*/
标识符和关键字
标识符:自定义的代表某种含义
关键字:具有专门的意义和用途,不能作为标识符使用
数据类型
基本数据类型
byte | short | int | long | float | double | char | boolean |
8bits | 16bits | 32bits | 64bits | 32bits | 64bits | 64bits | 8bits |
跨语言通用
char
JVM中采用 Unicode 编码 存储 0~65535范围内非负数
char 与 int 类型兼容 char可以直接赋值给 int 类型
数据类型转换
byte --> short,char,int,long,float,double
short --> char,int,long,float,double
char --> int,long,float,double
long --> float,double
float --> double
自然转换:由低精度向高精度数据类型转换
强制转换:由高向低(丢失精度)
低精度变量 = (低精度类型关键字)高精度常量、变量;
源补反的二进制
正数 | 负数 | |
源码 | 本身 | 本身 |
补码 | 与源码相同 | 源码数值位取反 |
反码 | 与源码相同 | 源码数值位取反+1 |
逻辑运算与位运算
逻辑与&& 逻辑或|| 短路,左侧确定结果,后面不运行
按位& 按位或| 不会短路
异或 同为 false 异为 true
左移运算;超出运算位数时,取模运算(要位移的位数%最大位数)
>>> 无符号右移
数组
char 默认为空格
整型 默认为 0
浮点型 默认为 0.0
引用类型 默认为 null
多维数组只需要确定一维,其他的可以单独设置
面向对象
指针放在 JVM 栈中
存储的数据放在 JVM 堆中 用 new 开辟出新的堆
访问属性
本类中 | 同包中 | 不同包中 | |
public | 1 | 1 | 1 |
protected | 1 | 1 | 子类允许 |
缺省(默认状态) | 1 | 1 | 0 |
private | 1 | 0 | 0 |
对象属性
char 默认为空格
整型 默认为 0
浮点型 默认为 0.0
引用类型 默认为 null
类static
static修饰的属性是类属性,归类所有,所有对象共享static属性的值
final 常量
用 类名.属性名 进行访问
不是new出来的,存储在JVM堆的静态区
静态数据随类的加载被加载,优先于实例数据
构造器
和类同名,没有返回值
构造方法:
public 类名(){ }
默认是自带的,用 new 创建
构造器的第一作用是用来创建对象
有多个构造器时,参数要不同。这种方法被称为构造器重载
this 关键字 在构造器及实例方法中,代表当前对象,、
this 可以避免同名出现的问题
默认无参构造器在你自己定义构造后会被覆盖,要用自己再定义
类方法
定义
[访问修饰符] 返回类型 方法名称([参数列表]){
功能代码... ...
[return ...]
}
方法被定义在类中
方法中可以调用方法
静态方法
静态方法中不能使用 this 关键字
不能访问实例属性
不能访问实例方法
不使用实例访问静态方法,不规范
方法重载
同一个类中,方法名相同,参数不同
继承:extends
特性
一个父类可以被多个子类继承,一个子类只能继承一个父类
final 修饰的不能被继承
继承具有传递性
限制
默认情况下父类的成员属性和方法都可以被子类继承
私有属性和方法无法在子类中直接访问
上转型对象不能访问子类中新添加的属性和方法
final 修饰的方法不能在子类中被重写
上转型对象
类型是父类,实例是子类
可以在需要的时候强制转换为实际的子类类型
方法重写
在子类中,方法名称与父类方法名称完全相同
参数个数和类型完全相同,返回类型完全相同
修饰符访问级别不低于父类同 名方法的访问级别
final 修饰的不能被重写
static 修饰的不能被重写,只能覆盖
super
super 必须位于子类构造器中的第一行,先有父,后有子
在子类的实例方法中代表父类对象,用来访问父类资源
静态方法,用父类类名访问
抽象: abstract
特点
抽象类不能实例化,只能作为父类使用 所有抽象类对象都是上转型对象
抽象类中可以有非抽象方法和抽象方法
抽象方法没有方法体,只有声明
不能使用 final 关键字修饰
抽象类就是用来被继承的
派生的子类必须实现所有抽象方法才能创建对象
抽象子类可以不实现抽象父类中的抽象方法
适配器
为抽象类定义适配器类,对所有抽象方法提供空实现
非抽象子类继承适配器类,只重写需要的父类方法
对象运行时多态
JVM在运行时创建和使用某个对象的时候
才能确定对象具体是哪种数据类型
接口: interface implements
可以称其为更高级的抽象
一个类可以实现多个接口
接口中只能有抽象方法 接口就是用来被实现的
接口中属性定义必须是公共的、静态的、常量
接口中只允许定义公共的、抽象的实例方法
定义时可以省略 public static final 关键字,效果是一样的
接口的继承:
接口只能由其他接口继承
子接口继承的目的在于拥有父接口功能后添加新的抽象定义
一个普通类实现接口时必须同时实现其父接口的抽象方法
接口被实现的目的就是实现业务功能具体化
内部类:
访问受限,通过外部类访问
定义的功能一般只为外部类提供
安全性提高
字节码文件:外部类名称$内部类名称.class

Computer.Cpu cpu = new Computer().new Cpu(); //创建普通内部类 Computer.Cpu cpu = new Computer.Cpu() //创建静态内部类
匿名内对象:
没有对象名称类型的对象
经常作为接口或抽象类的实现
可以减少接口或抽象实现类的定义
匿名类对象一定属于它实现的父级类型
静态代码块
静态代码块的内容:
允许访问静态属性
允许调用静态方法
允许定义局部变量及常量
允许定义局部类
不能访问实例属性和方法以及定义方法
不能访问非静态字段及方法
不允许定义接口
静态代码块的加载:
静态随类的加载而加载
在静态属性初始化后与调用构造器之前
只加载一次
异常
1)Java 异常组织结构
Java语言设计及编写程序的核心是面向对象,对于异常处理Java仍然是以面向对象为核心进行设计错误异常处理。
任何一个错误/异常的出现都被看做是一个异常对象。异常对象必需属于某个错误/异常类型。java中异常对象的出现导致此方法调用终止,程序将转向异常处理程序。
异常处理能够让编程者跟踪错误信息,确定程序中的错误异常的
位置,从而调试应用程序,使之调整后重新运行。
Throwabe 异常顶级父类
Error 虚拟机内部出现的错误,无法调试
virtualMachineError IOError TreadDeath
Exception 可以被调试的
RuntimException IOException SQLException
2)异常的声明和抛出
方法名称() throws 异常类型1,异常类型2{
throw 异常对象;
}
3)异常的捕获和处理
声明了编译型异常的方法调用时必须进行异常捕获和处理
使用 try 块捕获异常或使用 throws 在调用方法中继续声明
使用 catch 块处理 try 块捕获的异常
使用 finally 块强制执行必须执行的代码 // 一般用于释放资源
try{
声明定义了异常的方法调用;
} catch(Exception e){
处理异常的代码;
} finally{
强制执行必需执行的代码;
}
异常常用的方法
public String getMessage(); //返回错误消息
public void printStackTrace(); //打印异常轨迹
4)自定义异常
自定义异常必需直接或间接继承 Exception 类
通常在 Java 预定义异常不能满足要求时自定义异常
自定义异常通常是编译型异常
自定义异常可以重写父类的相关方法
输入输出流和文件操作
1)File 类
Java 语言中 File 类是唯一表示文件对象和目录对象的数据类型。在java 语言中文件路径分隔符使用 ‘ / ’ 或 ‘ \\ ’。
文件可以存储字节或字符;目录不能直接存储字节或字符,只能存储文件后子目录。
文件可以被读取和写入,而目录不能执行读写操作,只能建立、删除以及获取其中包含的子目录及文件。
对于文件和目录通常要严格区分,File 类提供方法可以判断此 File 对象是文件还是目录。
创建文件对象
File(File dir,String child)
File(String pathName)
File(String parent, String name)
// URI 作为构建File对象的参数必需保证其字符串描述前缀(资源格式)为file,而且路径分隔符必须是 / 斜线(file: URI)
File(URI uri)
System.dirSep //分隔符
常用方法:
boolean canWrite() boolean canRead() booolean createNewFile() throws IOException boolean delete() boolean exists() boolean isDirectory() //判断是否为目录 boolean isFile() File[ ] listFiles() //得到该对象代表目录下的File对象数组,若不为目录,返回null String[ ] list() //同上,返回的是 String 数组 legth() //返回大小,若不存在,返回值为0L String toString() String getParent() //文件父路径 String getName() //文件名称 String getPath() //文件路径 String AbssolutePath() //获取绝对路径 boolean renameTo //改路径名 boolean mkdir() //创建目录 boolean mkdirs() //创建目录,包含不存在的子目录
2)File 文件流分类
方向: 输入(input)流 —— 读取文件
输出(output)流——写入文件
内容: 字节(Byte)流——读写二进制文件
字符(Char)流——读写文本文件
方式 节点流——针对文件建立 //直接指向文件
处理流——针对其他文件流建立 //指向另一个流
3)输入流
①输入流是指建立在文件或其他文件流上的用来对目标文件进行读取的文件流。
②输入流只能对文件进行读取。
③读取二进制文件使用字节输入流,读取文本文件使用文本输入流。
顶级父类:InputStream 子类有:FileInputStream、ObjectInputStream、ByteArrrayInputStream
FileInputStream 的子类又有 BuffreredInputStream、DataInputStream
字节输入流
主要方法:
public abstract int read() throws IOException // 返回实际读到的字节数
public int read(byte[ ] b) throws IOException // 接收的放入数组b中
// off 表放在数组b中的偏移量,len 表读多长
public int read(byte[ ] b, int off, int len) throws IOException
public void close() throws IOException
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理