本人本科计算机专业,记录一下从零开始的 Java 学习,学习资源是黑马程序员的从入门到起飞。分享一下记录的笔记和代码,欢迎一起交流,共勉。笔记随着进度不定期更新
E:盘符切换
dir 查看当前路径下内容
cd 进入目录
cd … 退回上一级目录
cd\ 回到根目录
高级语言编译运行方式
JDK (java 开发工具包)
JDK = JVM + 核心类库 +开发工具
JVM:java虚拟机 代码运行的地方
核心类库
开发工具:javac、java、jdb
JRE(java运行环境)
JRE = JVM + 核心类库 + 运行环境
//这是一个注释
/*多行注释*/
/**文档注释*/
关键字字母全部小写
编译器中高亮显示
class:创建一个类
整数、小数、字符串、字符、布尔、空类型(null)
“” “ ”都是字符串
null 不能直接输出需要用字符串形式输出
\t 制表符:打印时把前面的字符串的长度补到 8 或者 8 的倍数
package com.itheima.java;
public class text {
public static void main(String[] args) {
System.out.println("name"+'\t'+"zjq");
System.out.println("age "+'\t'+"23");
}
}
name zjq
age 23
text、image、sound
计算机中任意数据都是以二进制存储的
文字数据
通过转二进制和转码表存储
图片数据
分辨率、像素、三原色
声音数据
用波形图存储
基本数据类型
四类八种
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oQYVbOzs-1668143680466)(/Users/mac/Documents/img/截屏2022-10-17 20.00.28.png)]
long n = 100L;
引用数据类型
给__类、方法、变量__等起的名字
由数字、字母、_ 、$ 组成
firstName 、 firstNameNumber
GoodStudent
java 帮我们写好了一个类叫 Scanner
import java.util.Scanner;
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
体系一:
nextInt();//接收整数
nextDouble();//接收小数
next();//接收字符串遇到空格,制表符,会车就停止接收。如abc bcd:bcd会留在缓存区,自动赋给第二个键盘录入
体系二
nextLine();//接收字符串
IDEA 项目结构
六种
+、-、*、/、%
类型转换
byte < short < int < long < float < double
byte short char 在进行运算时,都会先提升为 int 再运算
double a = 300;
int b = (int)a;
字符串的 “+” 操作
当 “+” 的操作中出现字符串时(“+”的两边存在字符串),“+” 是字符串连接符,拼接后形成一个新的字符串
拼接的时候会把变量的值拿出来拼接
连续进行 “+” 操作室,从左到右逐个执行
1 + 99 + "岁"
>>>“100岁”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4CF7OaD7-1668143680470)(/Users/mac/Documents/img/截屏2022-10-17 21.25.44.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ySYQSWAb-1668143680471)(/Users/mac/Documents/img/截屏2022-10-17 21.30.06.png)]
++ 、 –
//先用后加
int a = 10;
int b = a++;//10
//先加后用
int a = 10;
int b = ++a;//11
=、+= … …
short s = 1;
s += 1;
//等同于 s = (short)(s + 1);
== 、 != 、四种大小关系
&(与) 、|(或)、^(异或)、!(非)
关系表达式 ? 表达式 1 : 表达式 2
a > b ? a : b
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p5dv7Hlq-1668143680472)(/Users/mac/Documents/img/截屏2022-10-17 21.59.44.png)]
用原码对正数进行加法运算,不会出现问题,但如果是负数运算就会出现问题,实际运算方向正好相反
-1 + 1 = -2
为了解决负数的运算发明了反码
结果跨 0 会产生误差,结果差1
反码跨 0 产生错误是因为反码的0有两个,补码则解决的这个问题
最终数值的在计算机中以补码形式储存和运算
其他运算符
& 、 |
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-awAZXHKg-1668143680476)(/Users/mac/Documents/img/截屏2022-10-17 23.28.46.png)]
If 、switch
if 一般用于范围的判断,switch用于有限数据一一列举
if (关系表达式1){
语句体1;
} else if(关系表达式2){
语句体2;
} else{
语句体3;
}
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体 n + 1;
break;
}
case 1,2,3;
default
case 穿透
switch 新特性(JDK12)
switch (day){
case 1,2,3 -> {System.out.println("1");}
case 4,5 ->{System.out.println("2");}
default -> {System.out.println("吃屁");}
}
for 、while 、 do…while
for(初始化语句;条件判断语句;条件控制语句){
循环体;
}
while(条件判断语句) {
循环体语句;
条件控制语句;
}
for 和 while 区别
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
for(;;){}
while(true){}//常用
存储同种数据类型的多个值
存在隐式转换情况,但尽量避免这类情况
两种格式
int[] array//更常用
int arry[]
静态初始化
在内存中为数组容器开辟空间,并存入数据
int[] array =new int[]{11,22,33};//完整格式
int[] array ={11,22,33};//简化格式
数组的地址值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5meUO8dt-1668143680477)(/Users/mac/Documents/img/截屏2022-10-18 19.53.51.png)]
[
:表示当前是一个数组D
:表示数组里面的元素是 double 类型@
:间隔符号,固定格式int[] arr = {1,2,3};
sout(arr[0]);//访问
arr[0] = 100;//修改,也可以是变量
int[] arr = {1,2,3,4,5};
//arr.fori
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
指定数组长度,由系统分配元素的值
int[] arr = new int[5];
数组默认初始化值规律
java的内存分配(JAM)
栈:方法运行时使用的内存,比如 main 方法运行时,进入方法栈中执行
堆:存储对象或者数组,new 来创建的,都存储在堆内存里( new 就是在堆里开辟了一个小空间,多个 new 就开辟了多个小空间)
方法区:存储可以运行的 class 文件
本地方法栈:JVM在使用操作系统功能的时候使用,和我们开发无关
寄存器:给 CPU 使用,和我们开发无关
当我们需要把数组分组管理时,需要用的二维数组
int[][] arr = {
{11,22},
{33,44}
}
定义时每个一维数组单独占据一行
int[][] arr = new int[2][2];
int[][] arr = {
{11,22},
{33,44}
};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j< arr[i].length; j++) {
System.out.println(arr[i][j]);
}
}
特殊情况
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VxE02Xdb-1668143680479)(/Users/mac/Documents/img/截屏2022-10-19 21.49.20.png)]
初始
arr[0]
和arr[1]
存储的地址值为null
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5ycH5K1E-1668143680486)(/Users/mac/Documents/img/截屏2022-10-19 21.50.47.png)]
旧的一维数组地址值可以直接覆盖
(char)('a'+1) -> 'b'
方法是程序中最小的执行单元
public static 返回值类型 方法名 (参数){
方法体;
return 返回值;
}
参数
方法定义的小技巧
返回值
方法注意事项
return;
表示结束方法在同一个类中,定义了多个同名的方法,这些同名的方法具有同种功能。
每个方法具有不同的参数类型或参数个数,这些同名的方法构成了重载关系
简单记:同一个类中,方法名相同,参数不同的方法。与返回值无关
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wfdq3Unl-1668143680488)(/Users/mac/Documents/img/截屏2022-10-18 21.11.45.png)]
return 和 break 区别
方法调用的基本内存原理
先进后出、后进先出
基本数据类型和引用数据类型
基本数据类型的数据值存储在自己的空间中
引用数据类型的数据值存储在其他空间中。赋值时赋的是地址值
方法的值传递
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xOJfLxS7-1668143680492)(/Users/mac/Documents/img/截屏2022-10-18 22.03.57.png)]
number 仍是 100
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EVJSRg6q-1668143680493)(/Users/mac/Documents/img/截屏2022-10-18 22.05.29.png)]
arr[1]
的值是 200
command + option +M : 自动抽取方法
command + B :快速跳转同名方法
Command + option + T : 整体嵌套
找东西来解决问题
特点:封装、继承、多态
优点:符合人类思维习惯,编程更简单,更好理解
学什么:
在 JAVA 中,必须先设计类,才能获得对象
定义类
public class 类名{
1.成员变量(代表属性,一般是名词)
2.成员方法(代表行为,一般是动词)
3.构造器
4.代码块
5.内部类
}
用来描述一类事物的类,叫做:javabean 类。javabean 类中,不写 main 方法。
在以前,编写 main 方法的类叫做测试类。可以在测试类中创建 javabean 类的对象并进行赋值调用
一个 java 文件中可以定义多个 class 类,且只有一个类是 public 修饰,该类为代码文件名。
实际开发中,一个文件定义一个类
获得类的对象
类名 对象名 = new 类名();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5H0lYyIx-1668143680495)(/Users/mac/Documents/img/截屏2022-10-19 22.10.03.png)]
如何正确设计对象的属性和方法
private 关键字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-malRzvfH-1668143680499)(/Users/mac/Documents/img/截屏2022-10-20 08.53.12.png)]
变量中遵循就近原则,为了区分成员变量和局部变量,引入了 this 关键字
this.name(成员变量) = name(局部变量);
在创建对象时,由虚拟机自动调用,给成员变量进行初始化的
特点
注意事项
set()和get()
快捷键 command + N
Ptg:双击 + Ptg to javabean
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TTttKEVQ-1668143680502)(/Users/mac/Documents/img/截屏2022-10-20 09.50.29.png)]
两个引用可以指向同一个对象,原理类似数组
本质其实是变量中存储的是地址值、值存储在堆中
this 的本质:所在方法调用者的地址值
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TFP26wsl-1668143680505)(/Users/mac/Documents/img/截屏2022-10-20 10.27.53.png)]
System.out.printf("你好啊%s",“张三”);
应用程序编程接口。
即别人已经写好的东西,不需要自己编写,直接使用即可
java API :指的是 JDK 中提供的各种功能的 java 类
已经学习过的API
API帮助文档
定义在 java.lang 包中
创建 String 对象的两种方式
String name = "sb"
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O88TpVp5-1668143680506)(/Users/mac/Documents/img/截屏2022-10-20 21.16.51.png)]
通过字符数组,可以实现字符串内容的修改
字节数组应用于网络中的数据传输
StringTable :串池
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5dcSVUH1-1668143680507)(/Users/mac/Documents/img/截屏2022-10-20 21.24.53.png)]
字符串比较
比较常用方法:
==
:基本数据类型比较数据值;引用数据类型比较地址值boolean result = s1.equals(s2)
:完全一样才是真boolean result = s1.equalsIgnoreCase(s2)
: 忽略英文大小写遍历字符串
注意区分 arr.length 和 s.length()
遍历格式:str.length().fori
经典案例:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FlSY3QRO-1668143680509)(/Users/mac/Documents/img/截屏2022-10-20 21.52.35.png)]
字符串截取
String substeing(int beginIndex,int endIndex)
String substring(int beginIndex)//截取到末尾
字符串替换
String replace(旧值,新值)
可以看成一个容器,创建之后里面的内容是可变的
构造方法
public StringBulider(String str)
常用方法
链式编程
当我们在调用一个方法的时候,不需要用变量接收他的结果,可以继续调用其他方法
String result = new StringBuilder().append(str).reverse().toString();
使用场景 :字符串的拼接和字符串的反转
也可以看作一个容器,创建后内容可变
构造方法
StringJoiner(间隔符号)
StringJoiner(间隔符号,开始符号,结束符号)
成员方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AKlSaRUM-1668143680510)(/Users/mac/Documents/img/截屏2022-10-21 20.25.06.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y8SzxcuM-1668143680511)(/Users/mac/Documents/img/截屏2022-10-21 20.31.41.png)]
集合:长度可变的容器
泛型:限定集合中存储数据的类型
构造方法:ArrayList<泛型> list = new ArrayList<>();
[]
对数据进行了包裹成员方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lNvjWEsQ-1668143680515)(/Users/mac/Documents/img/截屏2022-10-21 21.27.28.png)]
包装类
用于添加基本数据类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ke9lsZ2J-1668143680519)(/Users/mac/Documents/img/截屏2022-10-21 21.35.52.png)]
按住 option 可以竖着选择
静态修饰符,可以修饰成员方法、成员变量
静态变量
public static String teacher
特点:
调用方法:推荐用类名调用,也可以用对象名调用
静态区 :静态变量的存储位置,单独存在堆中
静态方法
被修饰的成员方法
调用方法:推荐类名,还可以用对象名
工具类:不是用来描述一类事物的,而是帮我们做一些事情的类
类名见名知意
私有化构造方法(工具类是帮我们做一些事情的,创建他的对象没有任何意义)
方法定义为静态(用类名调用)
static 注意事项
非静态方法在调用时,虚拟机默认添加了 this 参数(this 存储着调用方法对象的地址)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Umrf6JIH-1668143680520)(/Users/mac/Documents/img/截屏2022-10-23 19.16.08.png)]
=> 非静态的东西与对象有关(需要 this 调用对象),静态的东西是共享的(与类有关与对象无关,所以不需要 this )
-> main 被 static 修饰,所以在测试类中定义的方法必须被 static 修饰,才可以被调用
提高代码复用性
public class Student extends Person{}
什么时候用继承?
继承的是类的初始化信息,与父类创建对象后修改值无关
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ib6aO5UV-1668143680521)(/Users/mac/Documents/img/截屏2022-10-23 19.59.49.png)]
构造方法:
成员变量:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i0NjSvaM-1668143680521)(/Users/mac/Documents/img/截屏2022-10-23 20.12.08.png)]
成员方法
虚方法表:
再调用方法时,不需要再一层一层找
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-21NLwxnI-1668143680526)(/Users/mac/Documents/img/截屏2022-10-23 20.19.42.png)]
成员变量的访问特点:
就近原则:谁离我近,我就用谁
核心一定是就近原则,每次调用本类父类成员变量时,不一定要用 this super ,先看就近原则
成员方法的访问特点:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JgM6vVPK-1668143680527)(/Users/mac/Documents/img/截屏2022-10-24 16.55.53.png)]
方法的重写
Def:当父类的方法不能满足子类现在的需求时,需要进行方法的重写
书写格式:一摸一样的方法声明(名称、形参)
@Override 重写注解:写在子类重写方法前
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcHw4PWf-1668143680529)(/Users/mac/Documents/img/截屏2022-10-24 17.01.23.png)]
本质:子类覆盖了从父类继承过来的虚方法
注意事项:
构造方法访问特点
为什么?
怎样调用父类构造方法?
super()
,不写也存在,且必须在第一行super(name,age)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CmJgn8c3-1668143680532)(/Users/mac/Documents/img/截屏2022-10-24 19.53.28.png)]
带有继承结构的 javabean 类
个人理解
id 、this.id 、super .getId()
同类型的对象,表现出不同形态
把子类对象赋值给父类类型变量
表现形式:Person p = new Student();
使用条件
好处
变量调用:编译看左边,运行也看左边
Person p = new Student();
sout(p.name);
p 中是否初始化了name 决定能否编译成功
运行后实际输出的也是 Person 的 name
方法调用:编译看左边,运行看右边
理解:
优点
弊端
Student s = (Student)p;
Person s = new Student();
if(s instanceof Student){
Student s1 = (Student) s;
s1.study();
}
JDK 14 新特性
Person s = new Student();
if(s instanceof Student s1){
s1.study();
}
包就是文件夹。用来管理各种不同功能的 java 类,方便后期代码维护
命名规则
使用其他类的规则
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tWnHQqX5-1668143680534)(/Users/mac/Documents/img/截屏2022-10-25 19.13.47.png)]
导包快捷键:option + command +O
修饰方法、类、变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YCRfXMV8-1668143680535)(/Users/mac/Documents/img/截屏2022-10-25 19.24.26.png)]
使用场景:
final a = 10;
只可以被赋值一次,也可以在定义时就给出常量值常量
实际开发中,常量一般作为系统的配置信息,方便维护,提高可读性
命名规范:
细节
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qCUrjCS6-1668143680536)(/Users/mac/Documents/img/截屏2022-10-25 19.55.35.png)]
批量修改同名变量快捷键:control + G
大小写快捷键:shift + command +U
权限修饰符
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XPj2lOcg-1668143680537)(/Users/mac/Documents/img/截屏2022-10-25 19.59.29.png)]
使用规则
实际开发中,一般只使用 private 和 public
特例:如果方法中的代码是抽取其他方法中的共性代码,这个代码一般也私有(grow 扩容),就是只在本类中其他多个方法中使用,外部不调用
局部代码块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6QkGtmL-1668143680538)(/Users/mac/Documents/img/截屏2022-10-25 20.09.07.png)]
构造代码块
写在成员位置的代码块
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RLLuIcyU-1668143680538)(/Users/mac/Documents/img/截屏2022-10-25 20.12.25.png)]
目前使用更多的技术
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YDCHhWxf-1668143680540)(/Users/mac/Documents/img/截屏2022-10-25 20.17.19.png)]
静态代码块(重点)
格式:static{}
特点:需要通过 static 关键字修饰,随着类的加载而加载(最开始时和构造代码块一样),并自动触发、只执行一次
使用场景:在类加载的时候,做一些数据初始化的时候使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qSWGmJiT-1668143680540)(/Users/mac/Documents/img/截屏2022-10-25 21.15.33.png)]
抽象方法:将共性的方法抽取到父类之后,由于每一个子类执行的内容是不一样,所以在父类中不能确定具体的方法体,该方法就可以定义为抽象方法
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
定义格式
public abstract void work();
无方法体public abstract class Person{}
注意事项
option + return 可以查看 IDEA 提供的错误修改方法
抽象类和抽象方法的意义
强制子类必须按照此格式重写
合作编程中,统一方法名,提高效率、利于维护
抽象类中如果没有抽象方法,子类不需要重写,也不要求子类必须是抽象类,没有任何要求
可以通过抽象类来必须产生对象
接口的定义和使用
public interface 接口名{}
public class Person implements 接口{}
注意 1 :接口和类是实现关系,可以单实现,也可以多实现。
public class Person implements 接口 1,接口 2{}
注意 2:实现类还可以在继承一个类的共识实现多个接口
接口成员的特点
成员变量
构造方法
成员方法
public abstract
JDK 7 以前只能是抽象方法
接口和类的关系
类和类的关系
类和接口的关系
接口和接口的关系
接口拓展
JDK 8 后新增的特性
JDK7 以前:只能定义抽象方法
JDK8 的新特性:接口中可以定义有方法体的方法。(默认、静态)
默认方法:
public default void show(){}
静态方法
public static void show(){}
JDK9 的新特性:接口中可以定义私有方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZmGrda9n-1668143680544)(/Users/mac/Documents/img/截屏2022-10-26 21.42.39.png)]
标记性接口
接口的应用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PyTiE6Q8-1668143680548)(/Users/mac/Documents/img/截屏2022-10-26 21.46.33.png)]
适配器设计模式
设计模式
适配器设计模式
当一个接口中抽象方法过多时,但我们只要使用其中一部分,就可以使用适配器设计模式
解决接口与接口实现类之间的矛盾问题
具体流程:
类的五大成员:属性、方法、构造方法、代码块、内部类
Def:在类的里面,再定义一个类
使用场景:发动机和车,发动机是车的内部类
内部类访问特点
内部类的分类
成员内部类、静态内部类、局部内部类、匿名内部类
成员内部类(了解)
如何书写
获取成员内部类对象
Car.Engine e = new Car().new Engine();
成员内部类如何获取外部类的成员变量
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Fn8QuNt-1668143680563)(/Users/mac/Documents/img/截屏2022-10-27 15.21.28.png)]
静态内部类(了解)
创建静态内部类对象的格式
调用非静态方法的格式
调用静态方法的格式
局部内部类(巨没用)
匿名内部类(很重要)
匿名内部类本质上就是隐藏了名字的内部类
可以写在成员位置,也可以写在局部位置
什么匿名内部类
格式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dlinYr6t-1668143680601)(/Users/mac/Documents/img/截屏2022-10-27 15.48.23.png)]
应用场景
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Eoin58RR-1668143680602)(/Users/mac/Documents/img/截屏2022-10-27 16.05.38.png)]
补充
匿名内部类也有名字,JVM自动给的
匿名内部类可以用于实现接口的多态
匿名内部类也可以调用方法
GUI:图形用户接口
主界面分析
组件
JFrame:最外层的窗体
JMenuBar :最上层菜单
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q2GRMCep-1668143680603)(/Users/mac/Documents/img/截屏2022-10-27 19.22.35.png)]
JLabel :管理文字和图片的容器
事件
JButton 按钮
常用类方法
exit:终止虚拟机
currentTimeMillis:返回当前系统的时间毫秒值形式
arraycopy:数组拷贝
计算机的时间原点:
构造方法私有化,通过 get 方法获取对象,不论何时获得的都是同一个对象
getRuntime:当前系统的运行环境对象
exit:停止虚拟机
availableProcessors:Cpu线程数
maxMemory:JVM从系统中获取内存大小
totalMemory:已获得内存大小
freeMemory:剩余内存大小
exec:运行 cmd 命令
顶级父类。所有类都直接或者间接的继承于他
他的方法可以被所有子类访问
没有成员变量,所以只有一个空参构造
toString:一般会重写,打印对象属性
equals:比较两个对象是否相等
clone:对象克隆
被 protected 修饰,使用需要重写
创建一个新对象,并把原对象中的数据拷贝过去
User u2 = (User)u1.clone();
书写步骤
克隆分为浅克隆浅拷贝和深克隆深拷贝
Objects
表示近乎无限大的整数
构造方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-04vNbyls-1668143680604)(/Users/mac/Documents/img/截屏2022-11-05 15.50.43.png)]
常见成员方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJJ0jTYw-1668143680605)(/Users/mac/Documents/img/截屏2022-11-05 16.21.06.png)]
底层存储方法
为了表示较大小数和解决计算机中小数的精确存储
计算机中的小数
小数在计算机中的存储不精确
float :23 个小数位
double:52个小数位
构造方法
常用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Avz6z2Al-1668143680606)(/Users/mac/Documents/img/截屏2022-11-05 19.23.53.png)]
底层存储方式
类名 :Pattern
作用
校验字符串是否满足规则
在一段文本中查找满足要求的内容
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQPYgusn-1668143680607)(/Users/mac/Documents/img/截屏2022-11-05 19.59.18.png)]
"zz".matches([^abc][^abc])//true
数量词
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D5dBpg7k-1668143680608)(/Users/mac/Documents/img/截屏2022-11-05 20.19.40.png)]
应用
小结
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nR1EoLMI-1668143680611)(/Users/mac/Documents/img/截屏2022-11-05 21.43.54.png)]
两个类
Pattern:表示正则表达式
Matcher:文本匹配器,作用按照正则表达式的规则去读取字符串,从头开始读取
带条件的爬取数据
String regex = "java(?=8|11|17)"
贪婪爬取
非贪婪爬取
Java 中默认的是贪婪爬取,如果在数量词 + * 的后面加上问号那么此时就是非贪婪爬取
正则表达式在字符串方法中的使用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d97nucDF-1668143680612)(/Users/mac/Documents/img/截屏2022-11-07 19.47.27.png)]
细节:参数时 regex 的方法可以识别正则表达式
老子学不明白,跳过这里了!!!
单纯用来查看时间,很没用
描述时间,精确到毫秒
全世界的时间,有一个统一的计算标准(GMT):同一经线上的时间相同,以本初子午线的时间为准。东加右减,中国东八区,加八个小时
新的时间标准:原子钟
利用銫原子的振动频率计算出来的时间,作为世界标准时间(UTC)
构造方法
空参构造表示当前时间
有参构造表示指定时间
参数时 long 类型,记得有 L
单位是毫秒值
成员方法
用于字符串解析 Date 或者格式化形式
Date 的格式不方便阅读和使用,所以引入了本类
作用
构造方法
他创建对象,创建的是一种格式
空参构造:使用默认格式
有参构造:使用指定格式
常用方法
常用模式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oqtb2AoZ-1668143680613)(/Users/mac/Documents/img/截屏2022-11-07 21.50.10.png)]
细节:比较时间时,先解析再 get ,最后用毫秒值比较
用来对时间进行修改和计算
代表了系统当前时间的日历对象,可以单独修改、获取事件中的年月日
细节:Calendar 是一个抽象类,不能直接创建对象
获取日历对象方法
常用方法
使用细节
优点
ZoneId 时区
常用方法
Instant 时间戳
构造方法
常用方法
ZoneDateTime
构造方法
常用方法
DateTimeFormatter
常用方法
可以单独的操控年月日
LocalDate:年月日
LocalTime:时分秒
LocalDateTime:年月日时分秒
构造方法
常用方法
常用方法
作用
Integer
JDK5 以前(掌握)
构造方法
如何计算
JDK5
提出了一个机制:自动装箱和自动拆箱
Integer i = 10;
int i2 = i;
成员方法
细节
顺序查找
很简单不多说了
二分查找/折半查找
优势:提高查找效率
前提条件:数组中的数据必须是有序的
核心逻辑:每次排除一般的查找范围
如何实现?
差值查找
通过加权来改进二分查找
mid = min + (key-Valueofmin)/(Vmax=Vmin)*(max-min)
斐波那契查找
分块查找
原则
核心思路:先确定要查找的元素在哪一块,然后在块内挨个查找
具体思路
分块查找的扩展
块间不满足一定的大小顺序
分块之间没有交集
块类中存储范围
分块思想
哈希查找
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X2rQgsU6-1668143680615)(/Users/mac/Documents/img/截屏2022-11-09 21.18.01.png)]
冒泡排序
选择排序
插入排序
注意点
作用
书写递归核心
心得:方法内部再次调用方法时,参数必须要更加靠近出口
第一轮:把 0 索引的数字作为准数,确定基准数载数组中的正确位置,比基准数小的在左边,大的在右边
操作数组的工具类
常用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kUeVQe2I-1668143680616)(/Users/mac/Documents/img/截屏2022-11-10 16.10.51.png)]
简写匿名内部类
函数式编程思想
JKD8 新形势
() -> {
}
基本作用
使用前提
好处
Lambda 表达式省略写法
核心:可推导,可省略
省略规则
两类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bgROZoCo-1668143680617)(/Users/mac/Documents/img/截屏2022-11-10 20.47.57.png)]
单列集合的顶层接口,他的功能是全部单列集合都可以继承使用的
常用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QZ3WrjcT-1668143680618)(/Users/mac/Documents/img/截屏2022-11-10 20.54.48.png)]
注意点
一、迭代器遍历
特点:不依赖索引
类名:Iterator,是集合专用的遍历方式
构造方法
常用方法
细节注意点
二、增强 for 循环
特点
格式
//list.for
for(String s:list){
sout(s);
}
三、Lambda 表达式遍历
forEach底层原理
Lambda 格式
coll.forEach(s -> System.out.print(s+" "));
匿名内部类格式[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Znz7e8WU-1668143680618)(/Users/mac/Documents/img/截屏2022-11-10 23.22.32.png)]
遍历方法比较