代码块
1.1介绍与格式:
基本介绍:
代码块又叫初始化块,属于类中的成员,即 使类的一部分 类似于方法,将逻辑语句封装在方法体中,通过{ }包围起来。
但和方法不同,没有方法名,没有返回值,没有参数,只有方法体,而且不用通过对象或类显示调用,而是在加载类的时候或者创建对象的时候隐式调用。
基本格式
[修饰符]{
代码
};
1.2.代码块的好处:
1、相当于另一种形式的构造器,是对构造器功能的一种补充
2、如果多个构造器中都有重复的语句,可以放到代码块中,提高代码的复用性
3.不管我们调用哪个构造器,创建对象,都会优先调用代码块的内容。
2.1代码块的使用注意事项
1.静态代码块:
static代码块叫静态代码块,作用是对类进行初始化它随着类的加载进行初始化,而且随着类的加载而被执行并且只会执行一次,如果是普通代码块,每次创建一个对象就执行一次。
2.使用事项:
1.创建对象实例的时候也就是new的时候。
2.创建子类对象实例,父类也会被加载,父类先被加载,子类后被加载
3.使用类的静态成员时,例如:静态成员,静态方法。
4.普通与静态分别调用:
静态代码块作用是对类进行初始化。它随着类的加载进行初始化,而且随着累的加载而被执行并且只会执行一次,如果是普通代码块,每次创建一个对象就执行一次。如果使用类的静态成员时,只执行静态代码块,普通代码块并不会执行。
5.调用静态方法时:
普通代码块需要在new对象的时候才会被调用,而且是每次创建新对象就会被调用。而静态代码块,只要类加载了就会被调用。
3.类什么时候被加载?
1、创建对象实例的时候也就是new的时候
2、创建子类对象实例,父类也会被加载,父类先被加载,子类后被加载
3、使用类的静态成员时,例如:静态成员,静态方法
4.创建一个对象时,在一个类中,调用顺序是怎么样的
1.先调用静态代码块和静态属性初始化。静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码和多个静态变量初始化,就按照定义的顺序执行
2.调用普通代码块和普通属性的初始化。普通代码块和普通属性的优先级一样,这个和上面的一样
3.最后在调用构造方法
5.有继承关系时,调用顺序
1.父类的静态代码块和静态属性(优先级一样)
2.子类的静态代码块和静态属性(优先级一样)
3.父类的普通代码块和普通属性初始化
4.父类的构造方法
5.子类的普通代码块和子类的普通属性初始化
6.子类的构造方法
7.注意: 静态代码块只能直接调用静态成员,普通代码块可以调用任意成员
(在本类中)
每个无参构造器都有共同内容:
{
1.super()
2.普通代码块和普通属性初始化
3.。。。。。。
}
父类和子类走完静态相关之后,会首先来访问子类的构造器;
而子类的构造器里面包含了:
{
1.super()
2.普通代码块和普通属性初始化
3.。。。。。。
}
所以,首先会访问父类的构造器,父类的默认继承object,没有输出语句,所以先执行
1.普通代码块和普通属性初始化
2.在执行父类构造方法中的内容。
最后返回子类的构造方法中,也先执行子类的:
1.普通代码块和普通属性初始化
2.在执行构造器中的内容
单例模式
1.单例模式概念:
所谓单例模式,就是保证类在内存中只有一个对象
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
注意:
1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。
2.饿汉式:
1.步骤:
1.构造器私有化(将类私有化)使,外界不能通过创建对象访问。
2.类的内部创建对象(该对象是static)
3.向外暴露一个静态的公共方法。
3.懒汉式:
步骤:
1.构造器私有化(将类私有化)使,外界不能通过创建对象访问。
2.类的内部创建对象(该对象是static)
3.提供一个public的static的方法,可以返回一个对象。
4.只有用户使用方法时,才返回对象,后面再次调用时,返回的是上次创建的对象 ,从而保证了单例。
4.区别:
单例设计模式中,懒汉式与饿汉式区别在于:
1.创建的时机不同,饿汉式是在类加载就创建了对象实例,
2.饿汉式不存在线程安全问题,懒汉式存在线程安全问题
3.饿汉式存在资源浪费的可能,如果程序员不使用对象实例,那么饿汉式创建的对象,就是浪费了。懒汉式是使用才创建,不存在这个问题。