- 1 类变量(静态变量)
- 2 类方法(静态方法)
- 3 深入理解main方法
- IDEAmain方法传参步骤:
- 4 类什么时候被加载?
- 类成员的练习题
- 5 代码块
- 1. 静态代码块
- 2. 普通代码块
- 码块练习题
- 6 创建一个对象,在一个类中(静态部分,非静态部分,构造器)调用顺序【无继承】
- 7 创建一个子类对象,在一个类中(静态部分,非静态部分,构造器)调用顺序【有继承】
- 8 什么是设计模式?
- 9 什么是单例设计模式?
- 10 单例模式---饿汉模式
- 11 单例模式---懒汉模式
- 12 饿汉与懒汉的比较
(1)不管static变量实际存放在哪,static变量都是被同一个类下的所有对象所共有的
(2)static变量是类加载的时候就生成了
(3)定义:访问修饰符 static 数据类型 变量名
(4)访问方式:类名.类变量名 (推荐) 对象名.类变量名
(5)类变量的访问也要遵守访问权限
(6)生命周期:和类一样
2 类方法(静态方法)static变量在内存中的示意图
(1)定义:访问修饰符 static 数据类型 方法名
(2)访问方式:类名.方法名 (推荐) 对象名.方法名
(3)类方法的访问也要遵守访问权限
(4)静态方法只能访问静态成员;普通方法,全部可以访问
(5)当方法中不涉及到任何与对象有关的成员时,可将方法设计成静态方法提高效率
(6)类方法中不能使用与对象有关的关键字,如,this,super。普通方法可以使用this,super。
public static void main(String[] args)
- java虚拟机JVM需要调用类的main()方法,所以该方法的访问权限必须是public
- java虚拟机在执行main)方法时不必创建对象,所以该方法必须是static
- 在main()方法中,我们可以直接调用main方法所在类的静态方法或静态属性。但是,不能直接访问该类中的非静态成员,必须创建该类的一个实例对象后,才能通过这个对象去访问类中的非静态成员。
- 该方法接收String类型的数组参数,该数组中保存执行java命令时传递给所
运行的类的参数,如下图所示
4 类什么时候被加载?
2.
3.
4.
(1)用new创建对象时
(2)创建子类对象时,父类的类会被先加载
(3)直接使用类的静态成员时
5 代码块1.
2.
3.
(1)定义:
[修饰符] { 代码块 };
有修饰符,只能写static -------> 静态代码块
无修饰符 -------> 普通代码块
(2)作用
可以作为初始化。例如,当构造器中有重复代码时,将重复代码放在普通代码块中。
(3)何时调用代码块?
加载类的时候调用,且只执行一次。
2. 普通代码块创建对象时候调用。且每创建一个对象,就执行一次。若只是使用类的静态成员,普通代码块不会被执行。
(4)静态代码块只能调用静态成员(静态属性和静态方法);普通代码块可以调用任意成员。
(5)构造器的最前面其实隐含了super()和调用普通代码块。
静态相关的代码块,静态的属性初始化,它们在类加载时,就执行完毕
,因此执行是优先于普通代码块和构造器。
代
-
调用静态代码块和静态属性初始化
(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用) -
调用普通代码块和普通属性的初始化
(注意:普通代码块和普通属性初始化调用的优先级一样,如果有多个普通代码块和多个普通属性初始化,则按定义顺序调用) -
调用构造方法
-
父类的静态代码块和父类的静态属性初始化
(注意:优先级一样,按定义顺序执行) -
子类的静态代码块和子类的静态属性初始化
(注意:优先级一样,按定义顺序执行) -
父类的普通代码块和父类的普通属性初始化
(注意:优先级一样,按定义顺序执行) -
父类的构造方法
-
子类的普通代码块和子类的普通属性初始化
(优先级一样,按定义顺序执行) -
子类的构造方法
(1)它是静态方法和静态属性的经典使用
(2)设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。
单例(单个的实例)
- 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法
- 单例模式有两种方式:(2)饿汉式(2)懒汉式
- 步骤
(1)构造器私有化 --> 防止直接new
(2)类的内部创建对象
(3)向外暴露一个静态的公共方法 getlnstance - 非饿汉模式 - 代码分析
- 饿汉模式 - 代码分析
-
二者最主要的区别在于创建对象的时机不同:
饿汉式是在类加载就创建了对象实例
而懒汉式是在使用时才创建 -
饿汉式不存在线程安全问题,懒汉式存在线程安全问题。
-
饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了;懒汉式是使用时才创建,就不存在这个问题。
-
在我们javaSE标准类中,java.lang.Runtime就是经典的单例模式



