Java学习总结
2025-10-29 21:36:17 0 举报
AI智能生成
还在Java学习的迷宫里摸索吗? 这份**《Java知识框架思维导图》** 是你通关的密钥! 它绝非普通知识点的堆砌,而是对Java从基础到进阶的**体系化提炼**,涵盖语法、面向对象、集合、多线程、JVM等核心模块。更有**大量可直接参考的代码案例**,搭配我对每个知识点的**独家理解与实战感悟**,帮你把晦涩概念嚼碎讲透,快速建立完整知识体系。仅需6.6元,就能让你在Java学习路上少走弯路,高效进阶!别犹豫,点击克隆,让这份精心打磨的知识结晶助你突破学习瓶颈! Java是一种广泛使用的面向对象的编程语言,它以其“一次编写,到处运行”的理念而著名,支持跨平台应用程序开发。核心内容包括Java的基础语法、面向对象的概念(如类、对象、继承、多态和封装)、接口、异常处理、集合框架(如List、Set和Map)、泛型、输入/输出(I/O)流、多线程编程以及Java虚拟机(JVM)等关键特性。 在文件类型方面,Java源代码通常保存为`.java`文件,通过编译器编译成字节码文件(`.class`),然后由JVM执行。Java的标准库提供了广泛的类和接口,用以简化图形用户界面(GUI)编程、网络通信、数据库连接以及多种功能强大的开发工具。 描述中充满了动态、高效、安全、跨平台等修饰语,强调了Java在现代软件开发中的核心地位和应用广泛性。
作者其他创作
大纲/内容
基础语法
容易忘掉和写错的语法
Switch语句
具有新特性 箭头标记 加大括号 就不需要写break了 (只有一行代码的时候可以把大括号直接省略)
case后面 可以跟多个值
Switch 可以具有结果 搭配 yield 关键字来使用 eg: 看右图
case后面 可以跟多个值
Switch 可以具有结果 搭配 yield 关键字来使用 eg: 看右图
注意要定义一个类型的变量来接受 Switch结果
也可以更简略一下 如果case后面的代码只有一行,
你就可以直接简写 把大括号给省略 eg: 看图
你就可以直接简写 把大括号给省略 eg: 看图
注意:case穿透 在我们写代码的时候,如果break没有写,此时就会触发case穿透现象执行流程:
1.拿着小括号中表达式的值跟下面的case进行匹配
2.如果匹配上了,就会执行case里面的语句体,遇到break结束整个的switch(正常情况)
3.如果在执行语句体的时候没有看到break,那么程序会继续执行下一个case的语句体,直到遇到break或者运行完整个的switch为止
1.拿着小括号中表达式的值跟下面的case进行匹配
2.如果匹配上了,就会执行case里面的语句体,遇到break结束整个的switch(正常情况)
3.如果在执行语句体的时候没有看到break,那么程序会继续执行下一个case的语句体,直到遇到break或者运行完整个的switch为止
正常情况下都会写break 让执行结束,否则会全部执行 没有选择效果
break 关键字
注意只要是运行到了break语句 就停止运行了 包括当前的值也不会打出来
continue 关键字
结束本次循环,继续下次循环
说白了就是停止当前次 但是其他都运行
数组
定义:数组是一种容器,可以用来存储同等数据类型的多个值
数组 slogan
数组元素的访问和C语言一样
获取: 变量 = 数组名【索引】
x修改 eg: arr [10]=5
获取: 变量 = 数组名【索引】
x修改 eg: arr [10]=5
数组长度的计算 一般都会用 数组名.length
遍历数组的快捷生成方式 数组名 . fori + 回车
静态初始化
写法 最常用 还是 数据类型[ ] arr= { ---,----,......} (其中的方括号一般还是习惯于放在数组名的前面)
特点 : 1.具有连续的空间
2. 一旦定义,长度不可变
2. 一旦定义,长度不可变
动态初始化
定义 动态初始化:创建数组的时候指定长度,由系统为数组分配初始值
完整格式:见图片 注意动态只有一种格式(当然也可以将方括号放到前面写)
其实就是 不知道数组目前存什么值或者后续会有变化
写法 就是 new 数据类型 加[ ] 方括号里面写的是你预估的字符长度
写法 就是 new 数据类型 加[ ] 方括号里面写的是你预估的字符长度
二维数组
定义以及写法
字符串类型 Java不同之处
String 可以作为变量类型定义的关键字
String + 字符串名称=“·····” 就可以进行复制操作
面向对象
类和对象
方法和对象属性都写在对象类,测试类赋值、调用
用鼠标滚轮或者ALT可以竖着选中并修改值
类中只能有一个用public修饰
封装
private权限权限修饰符,修饰成员,只能在本类中进行访问
作用:保证数据输入法人合法性,数据安全
get set方法(用public修饰)
在测试类中调用get set方法来进行赋值,注意get方法返回值 类型要和变量类型一致
可右键 generate 直接快速生成
this关键字
就近原则(局部变量和对象成员变量谁离得近就优先输出谁)
原因:解决局部变量与成员变量名称一致而导致的错误
this 关键字是调用成员 也就是类的方法和变量
构造方法(构造器)
空参构造器(写法)
public 类名 (){}
有参构造器
方便成员变量的赋值操作,在创建对象的时候,给成员变量初始化
注意写完有参构造器也要手动再写一个无参构造器
标准JavaBean类
其实就是新建的类(对象)
继承
方法重写
继承特点
权限修饰符
子类构造器
构造器第一行须为super()(调用父类构造器)或this()(调用同类其他构造器)。
就是先调用父类的构造器为了初始化值 但是子类当中特有的变量值再调用this方法赋值
多态(编译看左边,运行看右边)
前提
有继承关系,存在父类引用子类,存在方法重写
好处:右边对象可以解耦合
弊端:不能直接调用子类独有功能
解决方案是:强制类型转换(存在继承/实现关系) 使用instanceof 判断
分类
对象多态
行为多态
使用 简单理解 父类 + 变量名 =new 子类 但是调用的是子类当中自己的重写的方法
高级面向程序
final
可以修饰 类 方法 变量
注意就是不能二次赋值
常量
Constant 定义为常量包 为了方便修改常量 可以增加可读性 方便维护,一般是企业的专用名词
一般做系统配置 编译后还会被宏替换 和使用字面量的性能一样
一般做系统配置 编译后还会被宏替换 和使用字面量的性能一样
单例类(软件设计模式)
设计模式:
1.解决什么问题
2.怎么写出解决问题
1.解决什么问题
2.怎么写出解决问题
饿汉单例
是创建对象的时候 已经创建完了对象
懒汉单例
创建对象的时候,才开始创建完对象
枚举类
写法
代码实例 说白了就是限制参数输入 而且方便使用固定值 枚举名 .自动出枚举值
特点
适合用来作为信息的标志和分类
抽象类(abstract )
写法:
写法:
注意:抽象方法 必须要用abstract 修饰class。
抽象方法只有方法签名 不能有方法体,也就是不能写那个大括号
抽象方法只有方法签名 不能有方法体,也就是不能写那个大括号
注意事项和特点
抽象类不一定有抽象方法,有抽象方法的类必须是抽象类
抽象类 可以有 成员变量 方法 构造器 抽象类
最主要的特点是: 抽象类不能创建对象 ,仅能作为一种特殊的父类,让子类继承并实现。
一个类继承抽象类,必须重写完抽象类的全部抽象方法 否则这个类也必须定义为抽象类
子类继承后可以直接按 Alt 加回车键 跳到方法重新 这样继承的子类就不会变成抽象类了
好处
更好的支持的多态的写法
模版方法设计模式(提高代码的复用,并简化子类的设计)
写法
定义一个抽象类
在里面定义两个方法
一个是模版方法:把共同的实现步骤放进去
一个是抽象方法:把不确定的子类会重写的方法,交给具体的 子类完成
写的时候建议使用final关键字修饰一下模版方法(这样就不会让父类中的共同步骤被重写)
个人总结:抽象的类不能创建对象(玩抽象的不能找到对象)
抽象类的使命就是被继承
抽象类的使命就是被继承
接口
概述:Java提供的一个关键字 interface 定义出接口
写法:在接口中 只能定义成员变量和抽象方法(可以省略public abstract)默认会加上去
注意接口也不能创建对象
注意接口也不能创建对象
接口可以用来被类实现 (implements)的,实现接口的类被称为实现类,一个类可以同时实现多个接口
注意: 类的接口可以看为 类有多个干爹
实现类实现多个接口,必须重写完全部接口的抽象方法,否则这个类就定义成抽象类
注意: 类的接口可以看为 类有多个干爹
实现类实现多个接口,必须重写完全部接口的抽象方法,否则这个类就定义成抽象类
接口的好处:弥补了类单继承的不足,一个类同时可以实现多个接口,使类的角色更多,功能更强大。
○让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现(更利于程序的解耦合)
○让程序可以面向接口编程,这样程序员就可以灵活方便的切换各种业务实现(更利于程序的解耦合)
接口在定义实现类的时候 一般会怎么命名比较规范呢
使用I前缀命名接口类
为实现类添加后缀Impl
为实现类添加后缀Impl
JDK8 后新增的接口三个方法
默认方法(default)
即普通的实例变量 必须加default修饰 使用接口的实现类的对象来调用
私有方法(private )
私有的实例变量只能在接口当中的其他实例方法去调用,比如default方法来调用
静态方法(static)
默认会用public修饰 只能使用当前接口名来调用
注意 接口本身没有对象只能通过接口的实现类来调用
详细的注意事项
接口和抽象类的区别
相同点:
1、多是抽象形式,都可以有抽象方法,都不能创建对象。
2、都是派生子类形式:抽象类是被子类继承使用,接口是被实现类实现。
一个类继承抽象类,或者实现接口,都必须重写完他们的抽象方法,否则自己要成为抽象类或者报错!3、
4、都能支持的多态,都能够实现解耦合。
1、多是抽象形式,都可以有抽象方法,都不能创建对象。
2、都是派生子类形式:抽象类是被子类继承使用,接口是被实现类实现。
一个类继承抽象类,或者实现接口,都必须重写完他们的抽象方法,否则自己要成为抽象类或者报错!3、
4、都能支持的多态,都能够实现解耦合。
不同点:
1、抽象类中可以定义类的全部普通成员,接口只能定义常量,抽象方法(JDK8新增的三种方式)
2、抽象类只能被类单继承,接口可以被类多实现。
3、一个类继承抽象类就不能再继承其他类,一个类实现了接口(还可以继承其他类或者实现其他接口)。4、抽象类体现模板思想:更利于做父类,实现代码的复用性。最佳实
5、接口更适合做功能的解耦合:解耦合性更强更灵活。最佳实践
1、抽象类中可以定义类的全部普通成员,接口只能定义常量,抽象方法(JDK8新增的三种方式)
2、抽象类只能被类单继承,接口可以被类多实现。
3、一个类继承抽象类就不能再继承其他类,一个类实现了接口(还可以继承其他类或者实现其他接口)。4、抽象类体现模板思想:更利于做父类,实现代码的复用性。最佳实
5、接口更适合做功能的解耦合:解耦合性更强更灵活。最佳实践
面向对象高级
代码块
代码块主要分为静态 和 实例也就是对象代码块 注意 每次创建对象 都会执行实例代码块 而静态代码块是跟着类进行加载
内部类(一个类在 另一个类的内部)
成员内部类
code—demo
局部内部类(了解一下就行)
定义在方法中代码块中,构造器等执行体中的类 (没啥用)
静态内部类
匿名内部类(重点)
定义:是一种特殊的局部内部类;
所谓匿名:指的是程序员不需要为这个类声明名字,默认有个隐藏的名字。
所谓匿名:指的是程序员不需要为这个类声明名字,默认有个隐藏的名字。
Code demo
匿名内部类 本质是一个子类 创建匿名内部类 会立即创建一个子类 还是一个子类对象
匿名类 在开发中常见的形式 是
通常作为一个对象参数 传输给方法
通常作为一个对象参数 传输给方法
Code demo
函数式编程(重点)
Lambda表达式
可以替代某些匿名内部类对象(只有一个抽象方法的接口),从而让程序变得更简洁 可读性更好
Code-demo
常用API
String String s1 = “··········” 就用这个方法就行
代表字符串,它的对象可以封装字符串数据,并提供了很多方法完成对字符串的处理。
String 提供的常用方法 直接用名称. 方法名称就行
集合(集合是一种容器,用来装数据,类似于数组,但是集合可以变是动态的)
这里主要学习 ArrayList
这里主要学习 ArrayList
arrayList 的基本使用
ArrayList对象的创建 ArrayList <类型> 名称 = new ArrayList<>()
CodeDemo
append
GUI界面编程(图形用户界面)效率不高
Java加强_异常
异常
异常代表程序出现的问题
异常的体系
Error(代表系统级别的错误 属于严重问题)
Exception 代表程序出现的问题
RuntimeException
运行异常 :编译阶段 不会出现错误 运行时出现的异常
运行异常 :编译阶段 不会出现错误 运行时出现的异常
注意发生异常之后的代码就不会被执行
编译时异常:
编译阶段的错误提醒
编译阶段的错误提醒
作用:提醒程序员 很容易出错 请注意
可以抛异常
可以打印异常
其他异常
demo
异常的自定义
RuntimeException例子
自定代码demo
Exception例子
自定义代码
编译异常 更强烈 表现的很明显 很严重 (但是 不常用)
运行异常 最常用
异常的处理方案
方 案1
1、底层异常层层往上抛出,最外层捕获异常,记录下异常信息,并响应适合用户观看的信息进行提示
1、底层异常层层往上抛出,最外层捕获异常,记录下异常信息,并响应适合用户观看的信息进行提示
方 案 2
2、最外层捕获异常后,尝试重新修复
2、最外层捕获异常后,尝试重新修复
异常的使用场景 demo 很贴切的案例
异常的处理方式
技巧 笔记
在idea 中 Alt 加回车万能使用键
@Override 重写
@Data 是 Lombok 提供的一个注解,它可以自动生成以下代码:
所有字段的 getter 和 setter 方法。
equals() 和 hashCode() 方法。
toString() 方法
所有字段的 getter 和 setter 方法。
equals() 和 hashCode() 方法。
toString() 方法
注意需要导包 import lombok.Data;
@NoArgsConstructor 是 Lombok 提供的一个注解,用于自动生成一个无参构造函数。
import lombok.NoArgsConstructor;
@AllArgsConstructor 是 Lombok 提供的一个注解,用于自动生成一个全参构造函数。
import lombok.AllArgsConstructor;
一般来讲 写常量的时候都用大写英文字母加下划线的方式表示
选中代码 语句 Ctrl键加alt键加T键 可以生成处理异常的"try/catch 也可以包裹,光标在行上直接加.try
Arrays.toString(数组名称) 这个方法可以返回数组的内容进行观察
0 条评论
下一页