面向对象进阶
接口
接口的定义和使用
● 接口用关键字interface来定义public interface接口名{ }
● 接口不能实例化
● 接口和类之间是实现关系,通过implements关键字表示public class类名implements接口名{ }
● 接口的子类(实现类)要么重写接口中的所有抽象方法要么是抽象类
注意1:接口和类的实现关系,可以单实现,也可以多实现。public class类名implements接口名1,接口名2{ }
注意2:实现类还可以在继承一个类的同时实现多个接口。public class类名extends父类implements接口名1,接口名2{ }
接口中成员的特点
·成员变量
只能是常量
默认修饰符:public static final
·构造方法
没有
成员方法 只能是抽象方法
默认修饰符:public abstract
·JDK7以前:接口中只能定义抽象方法。
·JDK8的新特性:接口中可以定义有方法体的方法。
·JDK9的新特性:接口中可以定义私有方法。
类与接口的关系
实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口。
接口与接口之间
是继承关系,可以单继承也可以多继承。
细节
如果实现类实现最下面的子接口,那么就需要重写所有的抽象方法。
接口中默认方法的定义格式
public default 返回值类型 方法名(参数列表){}
接口中默认方法的注意事项
1.默认方法不是抽象方法,所以不清治被重写,重写的时候去掉default关键字
2.public可以省略,default不能被省略
3.如果实现了多个接口,多个接口中存在相同名字的默认方法,子类就必须对该方法进行重写。
接口中静态方法的定义格式
格式:public static 返回值类型 方法名(参数列表){}
范例:public static void show(){}
接口中静态方法的注意事项
静态方法只能通过接口名调用,不能通过实现类名实现或者对象名调用
public可以省略:static不能省略
JDK9新增的方法
插入
内部类
例子
类的五大成员
属性,方法,构造方法,代码块,内部类
内部类的访问特点
1.内部类可以直接访问外部类的成员,包括私有
2.外部类要访问内部类的成员,必须创建对象
总结
内部类的分类
成员内部类,静态内部类,局部内部类,匿名内部类。
成员内部类
总结
静态内部类
静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象。
创造静态内部类对象的格式
外部类型.内部类名 对象名=new 外部类名.内部类名();
调用非静态方法的格式
先创建对象,用对象调用
调用静态方法的格式
外部类名.内部类名.方法名();
总结
局部内部类
1.将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
2.外界是无法直接使用,需要在方法内部创建对象并使用。
3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
总结
API
Math
System
Runtime
表示当前虚拟机的运行环境
Object
1.Object是java中的顶级父类。所有的类都直接或者间接的继承于Object类。
2.Object类中的方法可以被所有子类访问,所有我们要学习Object类和其中的方法。
Object构造方法
Object成员方法
对象克隆
把A对象的属性值完全拷贝给B对象,也叫对象拷贝,对象复制;
浅克隆 (Shallow Clone)
· 只复制对象本身,不复制对象内部包含的引用类型字段 · 克隆对象和原对象共享引用类型字段 · 默认的 clone() 方法实现的就是浅克隆
深克隆 (Deep Clone)
· 不仅复制对象本身,还递归复制对象内部的所有引用类型字段 · 克隆对象和原对象完全独立,不共享任何引用
BigInteger
在java中,整数有四种类型:byte,short,int,long
在底层占用字节个数,1,2,4,8
构造方法
常见的成员方法
存储上限
总结
BigDecimal
构造方法和静态方法获取
BigDecimal的使用
补充枚举常量
底层存储方式简单解析
BigDecimal 的底层存储可以简单理解为:用整数表示数值,用另一个数记录小数点位置。
核心组成:
- 整数部分(unscaledValue)
· 用一个 BigInteger 存储去掉小数点后的完整数字
· 比如 123.45 → 存储为整数 12345
- 缩放比例(scale)
· 用一个 int 记录小数点右移了几位
· 比如 123.45 → scale = 2(小数点右移2位得到整数)
· 负数表示:12300 → scale = -2(小数点左移2位得到整数)
正则表达式
正则表达式的作用
1.校验字符串是否满足规则
2.在一段文本查找满足要求的内容
分组
分组就是用圆括号 () 将正则表达式的一部分括起来,形成一个子表达式。
捕获分组
捕获分组会记住匹配的内容,可以通过索引或名称访问。
非捕获分组
非捕获分组使用 (?:pattern) 语法,它们不保存匹配的内容。