OOP编程
类包含五大成员:属性、方法、构造器、代码块、内部类
1🚩 类变量(静态变量)与类方法(静态方法)
类变量或类方法也叫静态变量或静态方法,用修饰符【static】修饰
1.1 类变量(静态变量)
(1)概念:指在类中被static修饰的变量;
内存分布及生命周期:
(1). 一个静态变量是被同一个类的多个对象所共享的;
(2). 静态变量是在类加载的时候生成,类销毁的时候消失
【在jdk8以前是在方法区的静态域存放,在jdk8以后在堆内存中】
(2)静态变量的访问
访问格式:
① 类名.静态变量名
② 对象名.静态变量名
代码示例:
class TestDemo { static int count =100; } public class MainTest { public static void main(String[] args) { // 类名.静态变量名 System.out.println(TestDemo.count); // 对象名.静态变量名 System.out.println(new TestDemo().count); } }
(3) 类变量的使用场景
当需要让某个类的对象共享一个变量时候可以使用类变量;
1.2 类方法(静态方法)
(1)概念: 静态方法指在类中被static修饰的方法;类方法可以通过类名直接调用,不用创建对象,简化调用过程,提高开发效率;
(2)使用: 静态方法只能访问静态成员,非静态方法可以访问静态成员与非静态成员
【工具类中方法大多用类方法,比如Math类中方法等】
1.3 main方法的语法
(1)代码示例:
public static void main(String[] args) { //方法体 }
(2)main方法的三大疑问?
①为什么被public修饰?
答: main方法是被java虚拟机直接调用的
②main方法为什么用static修饰?
答:因为虚拟机在调用时不需要创建对象;
③main方法中的字符串数组String[] args形参是什么时候被传值的?
答:在执行main方法时添加,会被打包成字符串数组
eg:
java 执行的程序 参数1 参数2 参数3 …
2🚩 代码块
2.1 代码块基本语法
(1)概念: 代码块又称初始化块,属于类的一个成员,与方法相似;
(2)代码块分类: 普通代码块和静态代码块
①普通代码块:没被static修饰的代码块,非静态代码块
{ //内容 }
①静态代码块:被static修饰的代码块为静态代码块
static { //内容 }
(3) 代码块执行时间
在使用构造器创建对象之前执行;
对代码块的理解【是对构造器的补充机制,可做初始化操作】
2.2 代码块使用的注意事项
(1) 静态代码块作用及注意事项
对类进行初始化,且随着类的加载而执行只执行一次;
【普通代码块每创建一个对象,执行一次】
(2)补充:类什么时候加载?
①创建对象实例时
②创建子类对象实例时
③使用类的静态成员时
2.3 类中部分成员的执行顺序
静态属性(初始化)/代码块 => 普通属性(初始化)/代码块 => 构造器他们的执行顺序
(1) 静态属性初始化与静态代码块的执行,优先执行
在静态属性初始化与静态代码块之间执行按照先后顺序执行
(2)普通属性初始化与普通代码块的执行,在静态属性初始化与静态代码块之后
在普通属性初始化与普通代码块之间执行按照顺序执行
(3) 构造器最后执行
构造器的最前面,隐藏了①super()和②普通代码块
3 🚩抽象类
被abstract修饰的方法叫抽象方法,被abstract修饰的类叫抽象类;
【abstract只能修饰类和方法不能修饰其他内容】
3.1 抽象类的使用
(1) 抽象类不能实例化;
(2)一个类继承了抽象类必须重写其中抽象方法,除非本身也是抽象类
(3)抽象方法不能被 final、static、private修饰【与重写相违背】
java设计模式—模板设计模式:可以体现抽象类的的作用
4 🚩接口
概念: 💡 接口就是把给出的一些未实现的方法,封装到一起;某个类需要实现接口的时候再重写这些方法
4.1 接口简介
格式:
interface 接口名{
属性
方法
}
【注意:在jdk7以前接口中的方法不允许出现方法体;jdk8以后可以有静态方法,默认方法】
4.2 实现接口和继承类有什么区别
继承之间的关系是:“is a…”
实现接口之间的关系是:“like a…”
(1) 接口和继承解决的问题不同
①继承:解决代码复用性和可维护性问题
②接口:接口主要是设计好的规范(方法),让其他类去实现这些方法;
(2) 接口比继承更加灵活,只需要满足“like a…”就可以使用
(3) 接口在一定程度上实现解耦
4.3 接口的多态
(1)接口类型的变量可以指向、实现接口的实现类的对象
(2) 在定义方法时,形式参数为接口类型,实参可以使用接口的实现类;
(3) 接口可以实现多态数组
定义接口类型数组,可存放不同接口实现类的对象
(4) 接口可以多态传递
接口与接口之间有继承关系,如A接口继承B接口,F类实现了B接口;那么A类型的变量可以指向F类的对象;
5 🚩内部类
5.1 内部类的特点
可以直接访问私有属性,并且可以体现类与类之间的包含关系
5.2 四种内部类简介
(1) 定义在外部类的局部位置上(如方法)
①局部内部类(有类名)
②匿名内部类(无类名)
(2) 定义在外部类的成员位置
③成员内部类(无static修饰)
④静态内部类(被static修饰)
5.3 局部内部类
概念: 局部内部类是指被定义在外部类的局部位置(如方法中)且有类名;
(1) 局部内部类定义在方法或者代码块中
(2) 作用域在方法体或者代码块中
(3) 本质也是一个类
(4) 当外部类与局部内部类属性重名时,用属性名访问遵循就近原则;若要访问外部类属性可以用【外部类名.this.属性名】
5.4 匿名内部类【重要】
需要注意的四点知识:
①本质是类
②内部类
③该类没有名字
④同时还是一个对象
定义在外部类的局部位置,
(1)基本构成
new 类或接口(参数列表){
类体
}