当前位置: 首页 > 科技观察

Java中static的作用详解

时间:2023-03-13 01:08:10 科技观察

1.静态成员变量publicclassStudent{//静态成员变量privatestaticStringSchoolName;privatestaticintnums;//非静态成员变量privateStringname;privateintage;}类中的成员变量可以用static关键字修饰,所以的成员变量称为静态成员变量,或静态成员变量。不使用static关键字修饰的成员变量称为非静态成员变量。静态成员变量属于类,即成员变量不属于一个对象,即使该类有多个对象实例,也只有一个静态成员变量。只要加载了静态成员变量所在的类,就会为静态成员变量分配内存空间。因此,在引用这个静态成员变量时,通常不需要生成这个类的对象,而是直接通过类名来引用。引用的方法是“类名.静态变量名”。当然静态成员变量仍然可以通过“对象名.静态变量名”来引用。对应的非静态成员变量属于对象而不是类。只有在内存中构造该类型的对象时,才会为非静态成员变量分配内存空间。2.静态成员方法publicclassStudent{privatestaticStringSchoolName;privatestaticintnums;//静态成员方法publicstaticStringgetSchoolName(){returnStudent.SchoolName;}}Java也支持用static关键字修饰的成员方法,即静态成员方法。相应地,没有用static修饰的成员方法称为非静态成员方法。与静态成员变量类似,静态成员方法是属于类本身而不属于某个对象的类方法。因此,静态成员方法可以不用创建对象就可以调用,而非静态成员方法则需要通过对象来调用。特别要注意的是,静态成员方法中不能使用this和super关键字,也不能调用非静态成员方法,不能引用非静态成员变量。这个道理很明显,因为静态成员方法属于类,不属于对象,而this和super是对象的引用,非静态成员方法和成员变量也属于对象。所以在调用静态成员方法的时候,这个类的对象可能还没有创建,那么在静态成员方法中调用对象属性的方法或者成员变量显然是不合适的。即使已经创建了这个类的对象,也无法确定它调用的是哪个对象的方法,或者是哪个对象的成员变量。所以这里特别强调这一点。3.静态代码块publicclassStudent{privatestaticStringSchoolName;privatestaticintnums;//静态代码块static{Student.SchoolName="庆丰小学";Student.nums=0;}}静态代码块又叫静态代码块或静态初始化器。它是类中与成员函数分开的代码块。静态代码块不需要程序主动调用。系统会在JVM加载类的时候执行静态代码块,所以一些类成员变量可以在静态代码块中初始化。如果一个类中有多个静态代码块,JVM会依次执行它们。需要注意的是,所有的静态代码块只能在JVM加载类时执行一次。4.staticinternalclasspublicclassStudent{privatestaticStringSchoolName;privatestaticintnums;//staticinternalclassstaticclasstest{publictest(){System.out.println("Hello,student!");}}}在Java中也支持用static修饰的内部类,调用静态内部类。静态成员内部类的特点是它是一个类相关的内部类,所以可以不依赖于外部类实例来实例化。静态内部类不能访问其外部类的实例成员(包括普通成员变量和方法),只能访问外部类的类成员(包括静态成员变量和静态方法)。即使是静态内部类的实例方法(非静态成员方法)也不能访问其外部类的实例成员。