javase(三)
面向对象
以类的方式组织代码,以对象的组织(封装)数据
创建
-
//创建类 修饰符 class 类名{ 成员变量; 成员方法; }
-
//创建对象 使用new关键字创建对象 //例 new 类名(参数); //调用 类名.方法(属性)名
构造器
构造代码块
- 写在成员位置的代码块
- 可以把多个构造方法中重复的代码抽取出来
- 执行:创建本类对象的时候会先执行构造代码块再执行构造方法
作用
- new的本质就是调用构造器
- 初始化对象的值
空参构造器
- 默认自带无参构造器,写不写都有
- 初始化对象时,成员变量的数据采用默认值
- 快速生成无参构造器
- alt+insert
- .第一个,第二个选项
有参构造器
创建有参构造器后,无参构造器也要创建
-
public 类名(参数){ 结构体 }
-
初始化对象时,可以给对象进行赋值
-
快速生成有参构造器
- alt+insert
- 第一个,全部选择,第一个选项
-
快速生成set与get方法
- alt+insert
- 第四个,全部选择,第一个选项
-
一键生成构造器与setget方法:Ctrl+shirt+逗号(需要安装插件)ptg
this关键字
- 当有两个相同的名字时,使用局部的变量,如果想要使用全局的变量,需要在前面加上this.
继承
- extends关键字,可以让一个类和另一个类建立继承关系,享受另外一个类的属性
- 单继承:一个子类只能继承一个父类,但是可以多层继承
- 也就是子类继承父类,父类再继承父类的父类
- 子类只能访问父类中非私有的成员方法,私有的无法访问
- java所有的类都直接/间接继承于object类
- super注意点
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
权限修饰符
- 范围:public>protected>不写>private
- public可以在不同的包不同类下,不同的包子类下,同包子类下和当前类下使用
- protected可以在不同的包子类下,同包子类下和当前类下使用
- 默认不写可以在同包子类下和当前类下使用
- private仅可以在当前类下使用
方法重写
- 当父类中的方法不能满足子类的需求时,就可以把这个方法进行重写
- 加@override进行注解
- 需要有继承关系时,子类才能重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符可以扩大,但是不能缩小
- 抛出的异常可以缩小,但是不能扩大
- 子类的方法和父类的必须要一致,除了方法体不同
- private,static,final修饰的方法不能被重写
多态
对象的多种形态
-
前提:有继承,有父类引用指向子类对象,有方法重写
-
成员变量:编译看左边,运行也看左边
-
成员方法:编译看左边,运行看右边
-
父类类型 对象名 = 子类对象
-
//例 Person person = new student();
-
static
-
static表示静态,是java中的一个修饰符,可以修饰成员方法,成员变量
-
被static修饰的成员变量叫做静态变量
-
被该类所有的对象共享
-
//结构1 类名.变量名 = 值;(推荐) //结构2 对象名.变量名 = 值;
-
-
被static修饰的成员方法叫做静态方法
-
多用在测试类,工具类中
-
//调用结构1 类名.变量名 = 值;(推荐) //调用结构2 对象名.变量名 = 值;
-
-
静态方法没有this关键字
-
静态方法中只能访问静态
-
非静态方法可以访问所有对象,包括静态方法
-
工具类
- 要求类名私有化
-
静态代码块
- 用于初始化数据
- 只会执行一次,并且创建本类的对象的时候会先执行静态代码块再执行构造方法
final
- final修饰的方法是最终方法,不能被重写
- final修饰的的类是最终类,不能被继承
- final修饰的的变量叫常量,只能被赋值一次
抽象类
-
如果一个类中有抽象方法,那么这个类就要定义为抽象类
-
被abstract关键字修饰的方法继承到子类时,子类必须要重写
-
//抽象类定义 public abstract class 类名{}
-
抽象方法
-
将共性的行为(方法)抽取到父类之后,由于每个子类执行的内容是不同的
-
所以在父类中不能确定具体的方法体,该方法就可以定义为抽象方法
-
//抽象方法定义 public abstract 返回值类型 方法名(参数);
-
-
注意事项
- 抽象类不能创建对象
- 抽象类中不一定有抽象方法,但有抽象方法一定是抽象类
- 可以有构造方法
- 抽象类的子类
- 要么重写抽象类中的所以的抽象方法
- 要么是抽象类
接口
-
是一种规则
-
没有构造方法
-
//定义 public interface 接口名{}
成员变量
- 只能是常量
- 默认修饰符是public static final
成员方法
-
允许接口定义默认方法,需要使用关键字default修饰
-
//格式 public default 返回值类型 方法名(参数){}
-
-
默认方法不是抽象方法,所以不强制重写,如果要重写,重写的时候要去掉default关键字
-
public可以省略,default不能
-
public可以省略,static不能省略
-
如果实现多个接口,多个接口的名字相同的默认方法时,子类就必须对该方法进行重写
-
静态方法只能通过接口名调用,不能通过实现类名或对象名调用
-
私有方法
-
//定义 private 返回值类型 方法名(参数){}
-
-
私有静态方法
-
//定义 private static 返回值类型 方法名(参数){}
-
接口和类之间的关系
- 类与类
- 继承关系,只能单继承,不能多继承,但是可以多层继承
- 类和接口
- 可以单实现,可以多实现,还可以在继承一个类的同时实现多个接口
- 接口与接口
- 继承关系,可以单继承也可以多继承
内部类
-
内部类可以直接访问外部类的成员,私有的也可以
-
外部类要访问内部类的成员,必须创建对象
-
成员内部类
- 外部类.内部类 对象名 = new 外部类.内部类;
-
静态内部类
- 外部类.内部类 对象名 = new 外部类.内部类();
- 调用
- 外部类名.内部类名.方法名(😉
-
匿名内部类
-
//格式 new 类名/接口名(){重写方法};
-
异常
-
异常指程序运行中出现的各种状况,如:文件找不到,网络连接失败,非法参数等.
-
异常发生在程序运行期间,它影响了正常的查询执行流程
-
编译异常处理
-
//方法1 方法 throws Exception{} //快捷键:alt+回车或者ctrl+alt+t //方法2: try{ }catch(参数为想要捕获的异常类型){ }....这里还可以继续写catch finally{ } //finally可以不要 //最上面的catch类型要比下面的小
-
-
自定义异常
- 编译异常处理
- 继承exception
- 重写构造器
- 在出现异常的地方用throw new 自定义对象抛出
- 运行时异常处理
- 继承RuntimeException
- 重写构造器
- 在出现异常的地方用throw new 自定义对象抛出
- 编译异常处理
-
异常打印
- 日志解析
- 对象名.printstacktrace(😉
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术