type
status
date
slug
summary
tags
category
icon
password
一、Java开发
1.JDK,JRE,JVM
1.1.JDK:
Java标准开发包,它提供了编译、运行Java程序所需的各种工具和资源,包括Java编译器、Java运行时环境,以及常用的Java类库等
1.2.JRE:
Java运行环境,用于解释执行Java的字节码文件。
1.3.JVM:
Java虚拟机,是JRE的一部分。负责解释执行字节码文件,是可运行java字节码文件的虚拟计算机
区别联系:
- JDK包含JRE,JDK和JRE中都包含JVM。JDK出了包含jre还包含一些常用开发工具和基础类
- JDK用于开发,JRE 用于运行java程序
- JVM是java编程语言的核心并且具有平台独立性
2.开发Java程序需要的3个步骤
- 编写源文件
- 编译源文件生成字节码
- 加载运行字节码
3.Java程序运行过程
- javac:java源文件—>class字节码文件(0,1)
- java:运行class文件
4.Java程序语句执行的顺序
java程序语句执行的顺序包括4种基本控制结构:顺序、选择、循环、异常处理
二、编程基础
1.Java的基本语法
1.1.方法格式:
1.2.权限修饰符:
修饰符 | 类内部 | 同包内 | 子类 | 跨包访问 |
public | ✅ | ✅ | ✅ | ✅ |
protected | ✅ | ✅ | ✅(跨包时需继承) | ❌ |
default(无修饰符) | ✅ | ✅ | ❌ | ❌ |
private | ✅ | ❌ | ❌ | ❌ |
1.3.注释:
1.4.关键字:
分类 | 关键字 |
访问控制修饰符 | public protected private |
类、方法修饰符 | static final abstract synchronized volatile transient native strictfp |
流程控制 | if else switch case default while do for break continue return try catch finally throw throws assert |
数据类型 | byte short int long float double char boolean |
类和对象 | class interface extends implements new this super |
包和模块 | package import module requires exports |
多线程相关 | synchronized volatile |
其他关键字 | enum instanceof null true false goto const |
1.5.标识符:
- 由字母、数字、下划线和美元符号$组成
- 不能以数字开头
- 不能是Java中关键字
2.变量、常量
2.1.变量定义
- 按所属的数据类型划分:
- 基本数据类型
- 引用数据类型
- String、数组、接口、类
- 实际数据存储在堆,在栈被调用
数据类型 | 大小 | 默认值 | 范围 |
byte | 1 字节 (8 位) | 0 | -128 到 127 |
short | 2 字节 (16 位) | 0 | -32,768 到 32,767 |
int | 4 字节 (32 位) | 0 | -2³¹ 到 2³¹-1 |
long | 8 字节 (64 位) | 0L | -2⁶³ 到 2⁶³-1 |
float | 4 字节 (32 位) | 0.0f | 大约 ±3.40282347E+38F (7 位小数精度) |
double | 8 字节 (64 位) | 0.0d | 大约 ±1.79769313486231570E+308 (15 位小数精度) |
char | 2 字节 (16 位) | '\u0000' | 0 到 65,535(存储 Unicode 字符) |
boolean | 1 位 | false | 仅有两个值: true 或 false |
- 按被声明的位置划分:
- 成员变量:方法外部、类的内部定义的变量
- 局部变量:方法或语句块内部定义的变量
2.2.变量类型转换
- boolean类型不能转换成任何其它数据类型。
- 自动类型转换:容量小的类型自动转换成容量大的数据类型
- byte,short,int-> float ->long ->double
- byte,short,int不会互相转换,它们三者在计算时会转换成 int 类型
- 强制类型转换:容量大的类型转换成容量小的数据类型时,要加上强制转换符()
2.4.变量的作用域
- 成员变量:在类体内定义的变量称为成员安量,它的作用域是整个类
- 全局级变量 private int i=0;
- 静态变量 private static String name="li”
- 局部变量:在一个方法或方法内代码块中定义的变量称为局部安量
2.5.Java中的常量(不怎么考)
加上 final
2.6.注意事项
3.运算符
4.选择与循环
4.1.选择语句
4.2.循环语句
5.数组
不允许在前面括号写元素个数
5.1.多维数组初始化方式
5.2.数组的常见操作
6.输入输出
7.类与对象
7.1.三大特征
- 封装:
- 通过private、default、protected、public关键字实现属性或方法的封装,仅对外提供公共访问方式。
- 高内聚,低耦合
封装的好处:
1.实现数据项和方法的隐藏
2.实现隐越隔离,允许外部对类做有限的访间,开发者可以自由的改安类的内部实现
3.提高了代码的重用性
- 继承:通过 extends
两个好处:
1.代码重用了
2.通过继承实现对现实世界更加准确的建模
- 多态:一个对象变量可以指向多种实际类型对象的现象被称为“多态”
- 三个必要条件:继承、方法的重写、父类引用用指向子类对象
- Java中多态的实现方式:接口实现,继承父类进行方法重写,同一个类中进行方法重载。父类引用指向子类对象
多态的好处:
1.提高了代码的维护性(继承保证)
2.提高了代码的扩展性
7.2.Java代码
8.继承与Object类
Object
类是所有类的父类- Object方法
- getClass方法
- 作用:获取当前对象的运行时类型。
- 返回值:
Class
对象,表示当前对象的类型。 - hashCode方法
- 作用:返回对象的哈希码值。
- 用途:提高哈希表(如
HashMap
、HashSet
)的性能。 - 特点:两个对象如果通过
equals
方法返回true
,它们的hashCode
通常也应该相等。 - equals方法
- 作用:判断两个对象是否相等。
- 特点:
- 在
Object
类的源码中,equals
方法使用==
判断,所以默认比较的是对象的引用地址。 - 某些类(如
String
类)对equals
方法进行了重写,实现了内容比较。 - clone方法
- 作用:实现对象的拷贝。
- 特点:
- 默认实现的是浅拷贝:
- 对于基本数据类型的字段,会成功拷贝。
- 对于引用类型(嵌套对象),只会拷贝引用地址,并未实现真正的拷贝。
- toString方法
- 作用:返回对象的字符串描述。
- 默认行为:返回值为:
类名@对象hashCode的16进制
。 - wait方法
- 作用:多线程中的方法,让当前线程进入等待状态。
- 特点:
- 当前线程会释放其所持有的锁。
- 直到其他线程调用
notify()
或notifyAll()
方法,当前线程才会被唤醒。 - notify方法
- 作用:唤醒等待该对象的某个线程(随机选择一个线程)。
- notifyAll方法
- 作用:唤醒等待该对象的所有线程。
- finalize方法
- 作用:当对象被垃圾回收器回收时调用,通常用于释放资源。
- 类的继承格式
- 继承了之后有父类(非私有)的属性或方法
- 重写父类方法
9.类的封装
将类的菜些信息隐整在类的内部,不允许外部程序直接访问,而是通过该类提供getter setter的方法来对隐藏的信息进行操作和访问
- 封装的实现步骤
- 修改属性的可见性设为(private)
- 创建getter/setter方法(用于属性的读写)(通过这两种方法对数据进行获取和设定,对象通过调用这两种发方法实现对数据的读写)
- 在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)
10.构造方法
- 定义:
- 主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总与new运算符一起使用。
- 在创建对象的语句中,一个类可以有多个构造的数,可根据其参数个数的不同或参数 类型的不同来区分它们,即构造函数的重载。
- 重载
11.方法的重载与覆盖
- 重载概念:
- 必须载同一个类中
- 方法名相同
- 方法的参数的个数、顺序或类型不同
- 与方法的修饰符和或返回值没有关系
- 重写概念:当父类中的方法无法满足子类需求的时候,需要方法重写
- 方法重写的注意事项:
- 重写的方法必须要和父类一模一样(包括返回值类型,方法名,参数列表)
- 重写的方法可以使用@0verride注解来标识
- 子类中重写的方法的访问权限不能低于父类中方法的访问权限
- 区别
- 方法的重载:在同一个类中,出现多个同名的方法,参数列表不同,与返回值类型,修饰符无关
- 方法的重写:子类中出现和父类中一模一样的方法(包括返回值类型,方法名,参数列表)
12.this、super关键字
12.1.this
- Java中为解决变量的命名冲突和不确定性问题,引入关键字this代表其所在方法的当前对象的引用
- 注意:this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this
- 原因:static方法在类加载时就已经存在了,但是对象是在创建时才在内存中生成
12.2.super
- super关键字主要存在于子类方法中,用于指向子类对象中的父类对象可以访问父类的属性、函数以及构造函数。
- 子父类存在着同名的成员(包括变量和方法)时,在子类中默认是访问子类的成员,可以通过super关键字指定访问父类的成员;
- 默认会先调用父类无参的构造方法,可以通过super关键字指定调用父类的构造方法。
13.static、final关键字
13.1.static
区别:
- 被static修饰的变量属于类变量,可以通过类名,变量名直接引用,不需要new出一个类来
- 被static修饰的方法属于类方法,可以通过类名,方法名直接引用,不需要new出一个类来
13.2.final
- 修饰类:final修饰的类,不能被继承
- 修饰方法:final修饰的方法 不能被重写,但是子类可以用父类中final修饰的方法:
- 修饰变量:
- 基本类型变量使用final修饰了就不可变了
- 对于引用类型变量被final修饰了:引用变量引用不可变,但是引用对象的内容可以改变
14.抽象类
15.接口
三、异常处理与多线程
1.异常
1.1.异常的分类
异常:指在程序执行过程中发生的错误或意外情况,它可能导致程序的正常流程被打断。在Java中异常是一个对象,所有异常都直接或间接的继承Throwble类

- 错误(Error):表示严重的问题,通常是虚拟机无法解决的问题,如
OutOfMemoryError
。通常不建议程序员捕获和处理错误。
- 异常(Exception):表示程序可以捕获并处理的问题。异常又分为两类:
- 受检异常(Checked Exception):编译时必须处理的异常,如
IOException
、SQLException
。 - 非受检异常(Unchecked Exception):运行时异常,不需要强制处理,如
NullPointerException
、ArithmeticException
。通常是程序逻辑错误导致的。
1.2.异常的捕获处理
异常的捕获处理:当程序抛出异常的时候,我们可以通过try-catch对异常进行捕获处
理。如果我们需要进行最终处理,则可以加入finally模块。
2.集合
1.常见集合
集合:集合是JAVA中提供的一种容器,用来存储多个对象数据
List:是一个有序集合,可以放重复的数据。、
Set:是一个无序集合,不允许放重复的数据
Map:是一个无序集合,集合中包含一个键对象,一个值对象,键对象不允许重复,值对象可以重复


3.多线程
3.1.基本概念
- 线程:进程内部的一个执行单元,它是程序中一个单一的顺序控制流程。如果在一个进程中同时运行了多个线程,用来完成不同的工作,我们则称之为多线程

- 并发与并行
- 并发(Concurrency):指在同一时间段内多个任务交替执行,给人一种同时进行的感觉。在单核处理器上,通过快速切换任务实现并发。
- 并行(Parallelism):指多个任务在同一时刻真正同时执行,通常需要多核处理器的支持。
3.2.线程的创建与启动方式
- 继承 Thread 类
- 实现 Runnable 接口
3.3.线程的生命周期
线程在其生命周期中会经历多个状态,Java中的线程状态由
java.lang.Thread.State
枚举表示:- NEW(新建):线程被创建,但尚未启动。
- RUNNABLE(可运行):线程正在运行或等待操作系统分配CPU资源。
- BLOCKED(阻塞):线程等待获取一个锁。
- WAITING(等待):线程无限期地等待另一个线程来执行特定操作。
- TIMED_WAITING(计时等待):线程等待另一个线程来执行特定操作,等待时间有限。
- TERMINATED(终止):线程已经完成执行或由于异常退出。
线程状态图示意:

- 作者:Maple
- 链接:https://mapleleaf.space/Coding/Java/Overview
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。