Java基础
Java快速入门
视频链接:Java入门基础视频教程,java零基础自学就选黑马程序员Java入门教程(含Java项目和Java真题)_哔哩哔哩_bilibili
JDK的选择安装和下载
LTS:long-term support 长期支持版
JDK-8 LTS(目前企业常用)
下载JDK:oracle.com官网
Java 17 Windows x64 installer
JDK是否安装成功:java.exe和javac.exe是否安装成功(命令行窗口cmd输入:java和javac)
验证版本:java -version和javac -version(版本为17)
javac.exe:编译工具
java.exe:执行工具(对编译后的程序进行执行)
VSCode配置java运行环境
1.下载插件Extension Pack for Java(Microsoft官方)
2.FIle->Preferences->Settings(或者快捷键Ctrl+’,’),搜索java home,在Startup选项中点击Edit in setting.json,修改如下(这里填写的是安装的Java的路径):
1 | |

参考链接:
VSCode下载安装和配置Java环境_java下载vscode-CSDN博客
如何在vscode中配置java运行环境? - 知乎 (zhihu.com)
Java:开发helloworld
HelloWorld.java(源代码)–>(使用javac编译)HelloWorld.class(字节码文件)–>(使用java运行)
运行命令:
javac HelloWorld.java
java HelloWorld
Java程序的执行原理
编译成计算机底层能识别的机器语言
机器语言->汇编语言->高级语言
JDK的组成和跨平台原理
JVM(Java Virtual Machine):Java虚拟机,运行Java程序
核心类库:Java写好的程序,给程序员调用
JRE(Java Runtime Environment):Java的运行环境,包括JVM和核心类库
JDK(Java Development Kit):Java开发工具包,包括JRE和开发工具(java、javac、等)
Java的跨平台:
一次编译,处处可用(对不同电脑系统提供了不同虚拟机)
IDEA开发Java程序
1.创建工程new Project(空工程)
2.创建模块new Module
3.创建包new Package
4.创建类new class
编译后的class文件在工程路径下的out文件夹。
HelloWorld.java文件:
1 | |
Java基础语法
‘A’:65
‘a’:97
‘0’:48
二进制:0B或0b开头
八进制:0开头
十六进制:0X或0x开头
数据类型
基本数据类型+引用数据类型
基本数据类型:4大类8种

注意:
1.整型默认是int,加上l/L为long,如888L
2.浮点型默认是double,加上f/F为float,如3.14F
类型转换
自动类型转换(小->大)

表达式的自动类型转换
(最终结果由表达式中的最高类型决定)
表达式中,byte、short、char是直接转成int类型参与运算。(目的:防止加法超出表示范围,所以扩大字节为int)
注意:
1 | |

强制类型转换(大->小,会报错)
1 | |
强制类型转换只截取最低的字节。
浮点->整形:只保留整数部分,截断小数部分
运算符
逻辑运算符:&(逻辑与)、|(逻辑或)、!(非)、^(异或:前后条件结果相同返回false,不同返回true)
&&(短路与):结果与&一样,左边为false,则右边不执行
||(短路或):结果与|一样,左边为true,则右边不执行
&和|左右边都要执行
注:一般用&&、||、!
Java流程控制
分支结构
switch的表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String,不支持double(精度问题,0.1+0.2=0.3000004,无法和正确的0.3匹配)、float、long(long的范围太大了)
case的值不允许重复,且只能是字面量(具体的数、字母),不能是变量
case必须写break,不然会有穿透性(穿透性可以用于:多个值对应的case块的操作是相同的)
循环结构
for和while功能上完全一样
do-while:一定会执行一次(可用于抢票软件,先执行抢票再进行判断)
数组(引用数据类型)
静态初始化数组
定义数组时同时确定具体元素。
1 | |
动态初始化数组
定义数组时不存入具体元素值,只确定数组存储的数据类型和数据长度。
1 | |
动态初始化数组元素默认值:

Java内存分配
.java文件是编译成.class文件,然后将.class文件放到JVM虚拟机中运行的。
JVM虚拟机内存分配(Java内存分配):方法区、堆、栈

数组在计算机中的执行原理:

多个变量指向同一个数组:

如果某个数组变量存储的地址是null,那么该变量将不再指向任何数组对象。
1 | |
方法
方法的格式

1 | |
注意问题:
1.方法在类中的位置放前放后无所谓,但是一个方法不能定义在另一个方法里面。
2.return之后不能写代码。(运用return ;在无返回值方法中,可以跳出并立即结束当前方法的执行。)
方法在计算机中的执行原理
方法被调用时,进入栈内存中运行。
Java的参数传递机制(都是值传递)
值传递:传输实参变量中存储的值的副本。
基本类型的参数传递:值传递(存储的数据)

引用类型的参数传递:值传递(存储的地址)

方法重载
方法重载:一个类中,多个方法名称相同,但是形参列表不同。
注意:
1.方法重载只要求:方法名称相同、形参列表不同。(修饰符,返回值类型是否一样无所谓)
2.形参列表不同:形参个数、类型、顺序不同,与形参名称无关。
面向对象编程(OOP)
对象:特殊的数据结构。对象是用类new出来的。
class(类):对象的设计图/对象的模板。
1 | |
1 | |
对象在计算机中的执行原理

注意:
1.成员变量:类中定义的变量(对象的属性)。
成员方法:类中定义的方法(对象的行为)。
2.成员变量存在默认值(和数组一样)。
3.一个代码文件中,可以写多个class类,但只能有一个用public修饰。且public修饰的类名必须为代码文件名。
4.Java存在自动垃圾回收机制,会自动清楚垃圾对象。
this关键字
this:一个变量,用在方法中,来拿到当前对象。
应用:解决变量名称冲突问题。
1 | |
方法里的this是如何拿到调用它的对象的:传入了参数this
1 | |
构造器
1 | |
注意:
1.类在设计时,如果不写构造器,Java会为类自动生成一个无参构造器。
2.若定义了有参数构造器,Java不会自动生成无参构造器。
封装
面向对象的三大特征:封装、继承、多态
封装:用类设计对象处理某一个事物的数据时,应该把要处理的数据,以及处理这些数据的方法,设计到一个对象中去。
封装的设计规范:合理隐藏,合理暴露
公开成员:public
隐藏成员:private
实体类JavaBean
实体类:
1.这个类中的成员变量都要私有,并且要对外提供相应的getXxx ,setXxx方法。
2.类中必须要有一个公共的无参的构造器。
实体操作类:具体的操作
1 | |
成本变量和局部变量

常用API
包
包:类似文件夹
注意:
1.同一个包下的类,互相可以直接调用。
2.调用其他包下的程序,必须在当前程序中导包。导包格式:import 包名.类名;
3.调用Java提供的程序需要先导包才可以使用;但是Java.lang包下的程序不需要导包的,可以直接使用。
4.要调用多个不同包下的程序,而这些程序名正好一样,此时默认只能导入一个程序,另一个程序必须带包名访问。
String
String创建对象

1 | |
String常用方法

注意:
1.String的对象是不可变字符串对象。

2.只要是以“…”方式写出的字符串对象,会在堆内存中的字符串常量池中存储,且相同内容的字符串只存储一份。
1 | |

3.通过new方式创建字符串对象,每new一次都会产生一个新的对象放在堆内存中。
1 | |

案例:


ArrayList(集合的一种)
集合:容器,存储数据,大小可变。
ArrayList:一种集合,是泛型类,可以用来约束存储的数据类型。
注意:集合和泛型都不支持基本数据类型,只能支持引用数据类型。
如:ArrayList<int>是错误的,应该使用ArrayList<Integer>。

1 | |
注意:
1.从集合中遍历元素,并筛选出元素删除它,应该如何操作才能不出bug?
1 | |
2.集合容器中存储的是每个对象在堆内存中的地址。