什么时候需要用类变量
当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):
但java设计者推荐我们使用类名.类变量名方式访问。【前提是满足访问修饰符的访问权限和范围】
代码化块又称为初始化块,属于类中的成员[即是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来。
但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显式调用,而是加载类时,或创建对象时隐式调用。
[修饰符]{
代码};
说明注意:
1)修饰符可选,要写的话,也只能写static
2)代码块分为两类,使用static修饰的叫静态代码块,没有static修饰的,叫普通代码块/非静态代码块
3)逻辑语句可以为任何逻辑语句(输入输出、方法调用、循环、判断等)
4)**;**号可以写上,也可以省略。
1)static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类的加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象,就执行。
2)类什么时候被加载[重要背!]
2.1.创建对象实例时(new)
2.2.创建子类对象实例,父类也会被加载
2.3.使用类的静态成员时(静态属性,静态方法)
3)普通的代码块,在创建对象实例时,会被隐式的调用。被创建一次,就会调用一次。
如果只是使用类的静态成员时,普通代码块并不会执行。
小结:
static代码块是类加载时,执行,只会执行一次
普通代码块是在创建对象时调用的,创建一次,调用一次
类加载的3种情况,
3.1、命令行启动应用时候由JVM初始化加载
3.2、通过Class.forName ()方法动态加载
3.3、通过ClassLoader.loadClass ()方法动态加载
4)创建一个对象时,在一个类调用顺序是:(重点,难点):
4.1调用静态代码块和静态属性初始化(注意:静态代码块和静态属性初始化调用的优先级一样,如果有多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用)
4.2调用普通代码块和普通属性的初始化(注意:普通代码块和普通属性初始化调用的优先级一样,如s果有多个普通代码块和多个普通属性初始化,则按定义顺序调用)
4.3调用构造方法
所谓类的单例设计模式, 就是采取一定的方法保证在整个的软件系统中,对某个类只能存 在一个对象实例,并且该类只提供一个取得其对象实例的方法
单例模式有两种方式:
2.1饿汉式
2.2懒汉式
单例模式应用实例
演示饿汉式和懒汉式单例模式的实现:
1)构造器私有化=》防止直接 new
2)类的内部创建对象
3)向外暴露一个静态的公共方法。Getinstance
基本介绍
final中文意思:最后的,最终的.
final可以修饰类、属性、方法和局部变量.
在某些情况下,程序员可能有以下需求,就会使用到final:
1)当不希望类被继承时,可以用final修饰.
2)当不希望父类的某个方法被子类覆盖/重写(override)时,可以用final关键字修饰。
3)当不希望类的的某个属性的值被修改,可以用final修饰
4)当不希望某个局部变量被修改,可以使用final修饰
1)final修饰的属性又叫常量,一般用XX XX XX来命名
2)final修饰的属性在定义时,必须赋初值,并且以后不能再修改,赋值可以在如下位置之一【选择一个位置赋初值即可】:
2.1定义时:如 public final double TAX RATE=0.08;
2.1在构造器中
2.1在代码块中。
3)如果final修饰的属性是静态的,则初始化的位置只能是
3.1定义时
3.2在静态代码块不能在构造器中赋值。
4)final类不能继承,但是可以实例化对象。
5)如果类不是final类,但是含有final方法,则该方法虽然不能重写,但是可以被继承。
6)一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法。
7) final不能修饰构造方法(即构造器)
8 ) (Integer,Double,Float, Boolean等都是final),String也是final类
9 ) final和 static往往搭配使用,效率更高,不会导致类加载.底层编译器做了优化处理
class Demo{
public static final int i=16;//
static{
System.out.println("132465“)
}