JavaSE学习
这是Java基础学习的笔记,不太完整但是还能看。
JavaSE学习
静态 static修饰成员的特点
运算符
扩展赋值运算符
扩展赋值运算符,内部自带强转效果
关系运算符
不用记,若想让哪个先运算,只需加小括号
成员变量和局部变量的区别
this关键字
当局部变量和成员变量重名的时候,Java 使用的是?
就近原则
this 关键字的作用是?
- 调用本类成员
- this.本类成员变量:如果不涉及变量重复,this. 可以省略
- this.本类成员方法():没有前提条件,this. 可以直接省略
什么是 this 关键字呢?
代表当前类对象的引用(地址)
标准Javabean
String类的特点
String类截取方法
StringBuilder的特点
构造方法和介绍
提高了字符串的效率
常用的成员方法
StringBuilder和StringBuffer区别
成员方法一致
但是StringBuilder多线程不安全但效率偏高
StringBuffer多线程安全但效率偏低
ArrayList集合
ArrayList集合成员方法
extends继承
注意事项:
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250321161708773.png“ alt=”image-20250317154930258” style=”zoom:67%;” / referrerpolicy=”no-referrer” />
只支持单继承,不支持多继承,支持多层继承
例子:
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250321161701648.png“ alt=”image-20250317161000220” style=”zoom: 50%;” / referrerpolicy=”no-referrer” />
不能多继承原因:如果多继承 会导致子类若执行俩父类中声明完全相同方法时,不知道会执行哪一个
权限修饰符
其中protected不常用访问麻烦 需要在子类中通过创建新方法然后通过super方法进行调用
This和super
开闭原则:
例如
1.0版本有三个成员变量
1.1版本有四个成员变量
则在不修改原来代码的基础上,对原有构造方法进行重载,加上新成员变量
代码如下
1 | public A(){ |
this和super
final关键字
细节补充:
abstract抽象类和抽象方法
什么时候用:
把子类共性的方法抽取到父类,发现描述不清时,就可以把此方法变为抽象方法来让子类重写
定义格式
abstract关键字冲突
final:被final修饰的方法无法进行重写
private:抽象方法需子类重写。private修饰后不能跨类调用无法重写
static:类名可调用static修饰的方法,对于抽象方法无意义
abstract抽象类注意事项
1.不能实例化(不能创建对象)
防止调用内部方法
2.存在构造方法
通过子类super调用抽象父类构造方法
3.存在普通方法体
可以通过子类进行访问
4.抽象类的子类
要么重写所有抽象方法,要么本身就是抽象类
接口介绍:
接口:体现的思想是对规则的声明
成员变量:默认被public static final所修饰,所以只能为常量
成员方法:默认被public abstract所修饰,只能为抽象方法但是JDK7 和8有一些新特性
接口无构造方法
Java中更多的体现是对行为的抽象
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250321161613388.png“ alt=”image-20250319161530044” style=”zoom:50%;” / referrerpolicy=”no-referrer” />
定义方法:
1 | interface inter{ |
没啥用 做个测试 哈哈哈哈哈 图床使用
多态:
前提:
- 有继承/实现关系
- 有方法重写
- 父类引用指向子类对象
成员访问特点:
成员变量:编译看左边(父类)运行看左边(父类)
成员方法:编译看左边(父类)运行看右边(子类)
在编译时会检查父类中有无这个方法。无就报错,有则编译通过,但执行子类方法
原因:防止父类方法为抽象方法
多态创建对象,调用静态成员
静态成员仅推荐用类名调用,即使通过对象名调用也是假象,生成字节码文件后会自动改为类名调用
好处和弊端:
拓展性!拓展性!我理解为复用性也有 代码量减少了一点
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250320151239316.png“ alt=”image-20250320151226123” style=”zoom: 67%;” / referrerpolicy=”no-referrer” />
多态转型:转型问题
解决方法:
instanceof类型
格式:对象名 instanceof 类型
判断一个对象是否是右边的引用类型
返回boolean类型的结果
JDK8和9版本的新特性:
JDK8中:
允许在接口定义非抽象方法,但是需要关键字default修饰,这些方法时默认方法
作用:解决接口升级问题
接口中默认方法定义格式
格式:public default 返回值类型 方法名(参数列表){}
重新interface接口里的默认方法时,要将标识interface接口名加在前
例如 inter.super.method()
2:接口中允许定义static静态方法
接口中静态方法的定义格式:
格式:public static 返回值类型 方法名(参数列表){}
注意事项:
JDK9中:
为和允许定义私有方法:
提升复用性,减少冗余代码
代码块
了解即可
内部类:
成员内部类:了解
了解即可
翻看Java源代码会有内部类,所以得了解,无知识盲区
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250321172539305.png“ alt=”image-20250321172536776” style=”zoom:67%;” / referrerpolicy=”no-referrer” />
内部类成员访问:
内部类中,访问外部类成员:直接访问,私有也可以
外部类中,访问内部类成员:需要创建对象访问,
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250321172718684.png“ alt=”image-20250321172717338” style=”zoom:50%;” / referrerpolicy=”no-referrer” />
为何要学习内部类?
封装性更好
例如:
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250321172955117.png“ alt=”image-20250321172953230” style=”zoom:50%;” / referrerpolicy=”no-referrer” />
静态内部类:了解
static修饰的成员内部类
创建对象格式:外部类名.内部类名 对象名 = new 外部类名.内部类对象();
注意事项:静态只能访问静态 (原因:静态随着类的加载而加载)
局部内部类:了解
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250323155951948.png“ alt=”image-20250323155943078” style=”zoom: 67%;” / referrerpolicy=”no-referrer” />
鸡肋语法,不作赘述
匿名内部类:必须掌握!!
一个特殊的局部内部类
前提:存在一个接口或类
格式:new 类名 接口名(){}
好处:使代码更简洁,定义一个类的同时对其实例化。
**什么时候用?**接口内部需要抽象方法很少时,使用匿名内部类较好
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250323162142551.png“ alt=”image-20250323162138953” style=”zoom: 50%;” / referrerpolicy=”no-referrer” />
Lambda表达式
JDK8版本后开始的一种新语法形式。
作用:简化匿名内部类的代码写法
格式:
1 | (重写方法的形参) -> {被重写方法的方法体代码} |
注意Lambda表达式只适用于简化函数式接口的匿名内部类的写法形式
函数式接口:内部抽象方法只有一个
若对于代码理解到位,则可以通过写完匿名内部类后,光标放到匿名内部类名字上alt+回车改变为Lambda形式
Lambda表达式的省略形式:
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250323171041413.png“ alt=”image-20250323171039318” style=”zoom:67%;” / referrerpolicy=”no-referrer” />
一个例子演示Lambda写法 匿名内部类写法和实现类写法:
1 | public class Test1 { |
Lambda表达式和匿名内部类区别:
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250323171617478.png“ alt=”image-20250323171615449” style=”zoom: 50%;” / referrerpolicy=”no-referrer” />
窗体,组件,事件:
1 | package com.icecat.frame; |
效果展示:
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250324154900925.png“ alt=”image-20250324154858456” style=”zoom:50%;” / referrerpolicy=”no-referrer” />
窗体添加按钮:
1 | package com.icecat.frame; |
窗体添加图片,文字:
1 | package com.icecat.frame; |
事件监听:
分为两个
ActionListener:动作监听
KeyListener:键盘监听
注意事项
1:其中键盘监听中:
如何确定键盘录入按键(ASCII码)
并且第一个keyTyped方法不常用,因为有些方法监听不到
2:监听冲突问题
焦点:程序的注意力集中在了某一组件上
注意:按钮组件比较特殊,创建好后就自动聚焦,但是并不需要,还可能会和键盘监听起冲突问题
可以通过:setFocusable(false)来取消焦点
适配器设计模式
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250327165831119.png“ alt=”image-20250327163802452” style=”zoom:67%;” / referrerpolicy=”no-referrer” />
模板设计模式
<img src=”https://gitee.com/icecat2233/picture/raw/master/20250327165828578.png“ alt=”image-20250327165742040” style=”zoom:67%;” / referrerpolicy=”no-referrer” />
优势:已经定义了通用结构,使用者只需关心自己需要实现的功能即可