Java 关键字-static

java

static 方法就是没有 this 的方法。static 方法内部不能调用非静态方法。可以在没有创建任何对象的前提下,仅仅通过类本身来调用 static 方法,这实际上正是 static 方法的主要用途。static 可以用来修饰类的成员方法、类的成员变量,另外可以编写 static 代码块来优化程序性能。但是 切记:static 是不允许用来修饰局部变量。

static 方法

static 方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有 this 的,因为它不依附于任何对象,既然都没有对象,就谈不上 this 了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法和非静态变量都是必须依赖具体的对象才能够被调用。

public class Test {

private static void staticMethod() {

System.out.println("静态方法调用了!");

}

public static void main(String[] args) {

Test.staticMethod();

Test t = new Test();

t.staticMethod();

}

}

结果:

静态方法调用了!

静态方法调用了!

static 变量

static 变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。static 成员变量的初始化顺序按照定义的顺序进行初始化。

public class Test { 

private static String name = "feigege";

private static void staticMethod() {

System.out.println("静态方法调用了!"+name);

}

public static void main(String[] args) {

Test.staticMethod();

Test t = new Test();

Test t2 = new Test();

t.name="haoshuai";

t2.staticMethod();

}

}

结果:

静态方法调用了!feigege

静态方法调用了!haoshuai

static 代码块

static 关键字还有一个比较关键的作用就是用来形成静态代码块以优化程序性能。static 块可以置于类中的任何地方,类中可以有多个 static 块。在类初次被加载的时候,会按照块的顺序来执行每个 static 块,并且只会执行一次。

public class Father {

public Father() {

System.out.println("父类构造函数调用了!");

}

static {

System.out.println("父类static代码块调用了!");

}

}

public class Child extends Father{

public Child() {

super();

System.out.println("子类构造函数执行了!");

}

static {

System.out.println("子类static代码块执行了!");

}

}

public class Test {

public static void main(String[] args) {

Child c = new Child();

}

}

结果:

父类static代码块调用了!

子类static代码块执行了!

父类构造函数调用了!

子类构造函数执行了!

分析:

在执行开始,先要寻找到 main 方 法,因为 main 方法是程序的入口,但是在执行 main 方法之前,必须先加载 Child 类,而在加载 Child 类的时候发现它继承自 Father 类,因此会转去先加载 Father 类,在加载 Father 类的时候,发现有 static 块,便执行了父类的 static 块。在 Father 类加载完成之后,便继续加载 Child 类,然后发现 Child 类中也有 static 块,便执行 static 块。在加载完所需的类之后,便开始执行 main 方法。在 main 方法中执行 new Child() 的时候会先调用父类的构造器,然后再调用自身的构造器。因此,便出现了上面的输出果。

static 内部类

外部类不允许用 static 关键字来修饰,内部类却可以。

public class Person {

public static class MyClass {

static {

System.out.println("static");

}

public MyClass() {

System.out.println("Contstruct...");

}

}

}

以上是 Java 关键字-static 的全部内容, 来源链接: utcz.com/z/390951.html

回到顶部