JavaSE思维导图——总结篇
👨💻作者简介:学习时长两年半的java博主
🎟️个人主页:君临๑
ps:点赞是免费的,却可以让写博客的作者开心好几天😎
进入正题。关于Java专栏的规划如下
写作计划:大概一周两篇博客
精品专栏的规划:Java基础专栏:从入门到入土
Mysql基础专栏
Java Web
SpringBoot专栏
SpringCloud专栏
等等
先以JavaSE为例,JavaSE的专栏规划如下:
文章目录
一、JavaSE思维导图
(一)JavaSE思维导图(视频版)
二、Java基础语法
(一)Java入门
1.配置环境变量
2.输出HelloWorld
3.注释
4.基本数据类型
5.标识符
6.驼峰命名法
(二)运算符
1.算术运算符
2.隐式转换
3.强制转换
4.逻辑运算符
(三)流程控制语句
1.if语句格式
2.switch语句
3.for循环格式
4.while循环
5.do...while循环
(四)数组
(五)方法(也叫函数)
三、Java的面向对象
(一)类和对象
1.类的定义
2.对象的使用
3.对象内存图
4.成员变量和局部变量
(二)关键字
1.this关键字
2.super关键字
3.static关键字
4.final关键字
四、Java中的集合
(一)Collection集合
1.List集合
2.Set集合
(二)Map
五、I/O技术
(一)File类
(二)IO流
1.字符流
2.字节流
六、多线程技术
(一)多线程的创建
(二)线程安全
(三)线程同步
七、网络编程
八、反射
九、泛型
十、枚举
十一、注解
十二、动态代理
十三、XML配置解析技术
十四、Java设计模式
一、JavaSE思维导图
(一)JavaSE思维导图(视频版)
JavaSE思维导图
二、Java基础语法
(一)Java入门
1.配置环境变量
作用:
如果我想要在CMD的任意目录下,都可以启动某一个软件,那么就可以把这个软件的路径配置到环境变量中的PATH里面。
在启动软件的时候,操作系统会先在当前路径下找,如果在当前录课没有再到环境变量的路径中去找。如果都找不到就提示无法启动。
步骤:
第一步:点击Win11搜索框输入环境变量。
第二步:点击高级系统设置。
第三步:选择高级,再点击下面的环境变量。
第四步:找系统变量里面的PATH。
第五步:点击新建,把软件的完整路径,配置到PATH当中,再点击确定即可。
2.输出HelloWorld
新建HelloWorld.java文件,执行即可
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
}
}
3.注释
-
单行注释:
// 这是单行注释文字
-
多行注释:
/*
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/
-
文档注释:
/**
这是多行注释文字
这是多行注释文字
这是多行注释文字
*/
4.基本数据类型
数据类型 | 关键字 | 内存占用 | 取值范围 |
---|---|---|---|
整数 | byte | 1 | 负的2的7次方 ~ 2的7次方-1(-128~127) |
short | 2 | 负的2的15次方 ~ 2的15次方-1(-32768~32767) | |
int | 4 | 负的2的31次方 ~ 2的31次方-1 | |
long | 8 | 负的2的63次方 ~ 2的63次方-1 | |
浮点数 | float | 4 | 1.401298e-45 ~ 3.402823e+38 |
double | 8 | 4.9000000e-324 ~ 1.797693e+308 | |
字符 | char | 2 | 0-65535 |
布尔 | boolean | 1 | true,false |
5.标识符
-
必须由数字、字母、下划线_、美元符号$组成。
-
数字不能开头
-
不能是关键字
-
区分大小写的。
6.驼峰命名法
其一小驼峰命名法
适用于变量名和方法名
-
如果是一个单词,那么全部小写,比如:name
-
如果是多个单词,那么从第二个单词开始,首字母大写,比如:firstName、maxAge
其二大驼峰命名法
适用于类名
-
如果是一个单词,那么首字母大写。比如:Demo、Test。
-
如果是多个单词,那么每一个单词首字母都需要大写。比如:HelloWorld
不管起什么名字,都要做到见名知意。
(二)运算符
1.算术运算符
+ - * / %(取余)
2.隐式转换
将小值赋给大值,自动转换
两种提升规则:
-
取值范围小的,和取值范围大的进行运算,小的会先提升为大的,再进行运算。
-
byte、short、char三种类型的数据在运算的时候,都会直接先提升为int,然后再进行运算。
取值范围的顺序:byte short int long float double
byte b = 100;
int i = b;//可以成功赋值
3.强制转换
将大值赋给小值,强制转换,数据的精度丢失
public class Demo2 {
public static void main(String[] args) {
double a = 12.3;
int b = (int) a;
System.out.println(b);//12
}
}
4.逻辑运算符
&:逻辑与(而且)
两边都为真,结果才是真,只要有一个为假,那么结果就是假。
|:逻辑或(或者)
两边都为假,结果才是假,只要有一个为真,那么结果就是真。
!(取反)的使用:
是取反,也叫做非。
&&:
运算结果跟&是一模一样的,只不过具有短路效果。
||:
运算结果跟|是一模一样的。只不过具有短路效果。
短路效果:
当左边不能确定整个表达式的结果,右边才会执行。
当左边能确定整个表达式的结果,那么右边就不会执行了。从而提高了代码的运行效率。
(三)流程控制语句
1.if语句格式
格式:
if (关系表达式) {
语句体;
}
if...else
格式:
if (关系表达式) {
语句体1;
} else {
语句体2;
}
if...else if
格式:
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
…
else {
语句体n+1;
}
2.switch语句
switch (表达式) {
case 1:
语句体1;
break;
case 2:
语句体2;
break;
...
default:
语句体n+1;
break;
}
需求:键盘录入星期数,输出工作日、休息日。
利用JDK12新特性:
switch (week) {
case 1, 2, 3, 4, 5 -> System.out.println("工作日");
case 6, 7 -> System.out.println("休息日");
default -> System.out.println("没有这个星期");
}
3.for循环格式
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
for (int i = 1; i <= 5; i++) {
System.out.println("HelloWorld");
}
4.while循环
while(条件判断语句){
循环体;
条件控制语句;
}
while(i <= 5){
System.out.println("HelloWorld");
i++;
}
5.do...while循环
初始化语句;
do{
循环体;
条件控制语句;
}while(条件判断语句);
(四)数组
概念:(一个固定容量的容器)
指的是一种容器,可以同来存储同种数据类型的多个值。
但是数组容器在存储数据的时候,需要结合隐式转换考虑。
注意事项:
数据类型:限定了数组以后能存什么类型的数据。
中括号:表示现在定义的是一个数组。
new:就是给数组在内存中开辟了一个空间。
数据类型:限定了数组以后能存什么类型的数据。
中括号:表示现在定义的是一个数组。
大括号:表示数组里面的元素。元素也就是存入到数组中的数据。
1.给数组限定什么类型? int
2.利用静态初始化完成创建并添加元素
int[] agesArr = new int[]{18,19,20,21,22};
int[] agesArr = {18,19,20,21,22};
(五)方法(也叫函数)
方法(method)是程序中最小的执行单元
-
注意:
-
方法必须先创建才可以使用,该过程成为方法定义
-
方法创建后并不是直接可以运行的,需要手动使用后,才执行,该过程成为方法调用
-
无参方法例子:
public class Test {
public static void main(String[] args) {
//在main()方法中调用定义好的方法
getMax();
}
//定义一个方法,用于打印两个数字中的较大数,例如getMax()
public static void getMax() {
//方法中定义两个变量,用于保存两个数字
int a = 10;
int b = 20;
//使用分支语句分两种情况对两个数字的大小关系进行处理
if(a > b) {
System.out.println(a);
} else {
System.out.println(b);
}
}
}
有参方法例子:
public class Test {
public static void main(String[] args) {
//在main()方法中调用定义好的方法(使用常量)
getMax(10,20);
//调用方法的时候,人家要几个,你就给几个,人家要什么类型的,你就给什么类型的
//getMax(30);
//getMax(10.0,20.0);
//在main()方法中调用定义好的方法(使用变量)
int a = 10;
int b = 20;
getMax(a, b);
}
//定义一个方法,用于打印两个数字中的较大数,例如getMax()
//为方法定义两个参数,用于接收两个数字
public static void getMax(int a, int b) {
//使用分支语句分两种情况对两个数字的大小关系进行处理
if(a > b) {
System.out.println(a);
} else {
System.out.println(b);
}
}
}
三、Java的面向对象
(一)类和对象
1.类的定义
类的组成是由属性和行为两部分组成
-
属性:在类中通过成员变量来体现(类中方法外的变量)
-
行为:在类中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
public class Phone {
//成员变量
String brand;
int price;
//成员方法
public void call() {
System.out.println("打电话");
}
public void sendMessage() {
System.out.println("发短信");
}
}
2.对象的使用
public class PhoneDemo {
public static void main(String[] args) {
//创建对象
Phone p = new Phone();
//使用成员变量
System.out.println(p.brand);
System.out.println(p.price);
p.brand = "手机品牌";
p.price = 2999;
System.out.println(p.brand);
System.out.println(p.price);
//使用成员方法
p.call();
p.sendMessage();
}
}
3.对象内存图
当运行一个类时,这个类的字节码文件就会加载到方法区中临时存储。当方法被调用就要进栈,执行完就要出栈,而new出来的东西都会在堆内存。
4.成员变量和局部变量
-
类中位置不同:成员变量(类中方法外)局部变量(方法内部或方法声明上)
-
内存中位置不同:成员变量(堆内存)局部变量(栈内存)
-
生命周期不同:成员变量(随着对象的存在而存在,随着对象的消失而消失)局部变量(随着方法的调用而存在,醉着方法的调用完毕而消失)
-
初始化值不同:成员变量(有默认初始化值)局部变量(没有默认初始化值,必须先定义,赋值才能使用)
(二)关键字
1.this关键字
区分成员变量与局部变量(在同名的情况下)
2.super关键字
子父类中出现了同名的成员变量时,在子类中需要访问父类中非私有成员变量时,需要使用super
关键字,修饰父类成员变量,类似于之前学过的 this
。
需要注意的是:super代表的是父类对象的引用,this代表的是当前对象的引用。
3.static关键字
有static修饰成员变量,说明这个成员变量是属于类的,这个成员变量称为类变量或者静态成员变量。 直接用 类名访问即可。因为类只有一个,所以静态成员变量在内存区域中也只存在一份。所有的对象都可以共享这个变量。
4.final关键字
final: 不可改变,最终的含义。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,有且仅能被赋值一次。
四、Java中的集合
(一)Collection集合
1.List集合
ArrayList之增删改查
LinkedList之特有方法的使用
Vector
public class Demo {
public static void main(String[] args) {
//创建集合
Vector vector =new Vector();
vector.add("苹果");
vector.add("香蕉");
vector.add("西瓜");
//添加元素
System.out.println("元素个数:"+vector.size());
System.out.println(vector.toString());
//删除
vector.remove("西瓜");
System.out.println("删除后元素个数:"+vector.size());
//遍历
Enumeration en =vector.elements();
while(en.hasMoreElements()){
String o=(String)en.nextElement();
System.out.println(o);
}
//判断
System.out.println(vector.contains("香蕉"));
System.out.println(vector.isEmpty());
//补充
System.out.println(vector.firstElement());//获取首个元素并打印
System.out.println(vector.lastElement());//获取尾元素并打印
System.out.println(vector.elementAt(0));//获取某个位置的元素
System.out.println(vector.get(0));//获取某个位置的元素
}
}
2.Set集合
HashSet
public class Test {
public static void main(String[] args) {
HashSet<String> sites = new HashSet<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
sites.add("Runoob"); // 重复的元素不会被添加
System.out.println(sites);
}
}
TreeSet
是一个包含有序的且没有重复元素的集合,通过TreeMap实现。
TreeSet是一个具有唯一元素的二叉树的集合,又被翻译为树集,是Java 集合框架的一部分。
TreeSet的特点
TreeSet的作用是提供有序的Set集合,主要特点如下:
- 不可以存储重复元素
- 没有索引
- 可以将元素按照规则进行排序
- TreeSet():根据其元素的自然排序进行排序
- TreeSet(Comparator comparator):根据指定的比较器进行排序
(二)Map
HashMap
TreeMap
Hashtable
五、I/O技术
(一)File类
(二)IO流
1.字符流
2.字节流
六、多线程技术
(一)多线程的创建
多线程的实现方案一:继承Thread类
① 定义一个子类 MyThread 继承线程类 java.lang.Thread ,重写 run() 方法② 创建 MyThread 类的对象③ 调用线程对象的 start() 方法启动线程(启动后还是执行 run 方法的)
(二)线程安全
(三)线程同步
加锁:让多个线程实现先后依次访问共享资源,这样就解决了安全问题。
七、网络编程
以后会有专门的文章,详细讲解,这里只是列出专栏的大体框架。
八、反射
以后会有专门的文章,详细讲解,这里只是列出专栏的大体框架。
九、泛型
以后会有专门的文章,详细讲解,这里只是列出专栏的大体框架。
十、枚举
以后会有专门的文章,详细讲解,这里只是列出专栏的大体框架。
十一、注解
以后会有专门的文章,详细讲解,这里只是列出专栏的大体框架。
十二、动态代理
以后会有专门的文章,详细讲解,这里只是列出专栏的大体框架。
十三、XML配置解析技术
以后会有专门的文章,详细讲解,这里只是列出专栏的大体框架。
十四、Java设计模式
学设计模式之前:关联:组合、聚合。依赖、继承、实现都是要了解的。
简单工厂模式:定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。
工厂方法模式:定义一个用于创建对象的接口,但是让子类决定将哪—个类实例化。工厂方法模式让一个类的实例化延迟到其子类。
抽象工厂模式:提供一个创建—系列相关或相互依赖对象的接口,而无须指定它们具体的类。
原型模式:使用原型实例指定待创建对象的类型,并且通过复制这个原型来创建新的对象。
单例模式:确保一个类只有一个实例,并提供全局访问点来访问唯一实例。
适配器模式:将—个类的接口转换或客户希望的另—个接口。适配器模式让那些接口不兼容的类可以—起工作。
等共23种设计模式
以后会有专门的文章,详细讲解,这里只是列出专栏的大体框架。
下一篇 关于自己的年度学习计划(目前正在写)
(ps:能给个赞再走吗,这对我真的很重要)
题外话:其实我并不喜欢学习,也并不认为以后买菜要用到不定积分,但学好了能决定你以后在哪里买菜。