Java中static关键字

来源:互联网 发布:华语男唱作人排名知乎 编辑:程序博客网 时间:2024/06/12 18:50
  • 静态变量
  • 静态方法
  • 静态代码块

    在java类中,一般类的成员必须通过类的对象来访问。但是,也可以创建一个不需要特定实例变量的引用就可以访问的成员。为了创建这种成员,需要在成员声明前加上关键字static。
    访问:类外使用static成员,只需 类名.变量名 或者 类名.方法名 即可,不需要new一个对象即可调用。例如,给类名为Animal的static变量name赋值时,可直接使用:
    Animal.name = “dog”;
    Animal.eat();//调用Animal类的eat()方法

1.静态变量
static变量相当于一个全局变量,该类的所有实例共用一个static变量。比如一个学校中的学生的名字、学号都不学校的名字都是一样的。如下代码演示静态变量与非静态变量的区别:

public class StaticDemo {    int x;    static int y;}public class Demo1 {    public static void main(String[] args){        StaticDemo ob1 = new StaticDemo();        StaticDemo ob2 = new StaticDemo();        ob1.x = 10;        ob2.x = 12;        System.out.println("一个类的不同实例的非静态变量相互独立");        System.out.println("ob1.x="+ob1.x+"  ob2.x="+ob2.x);        StaticDemo.y = 30;        System.out.println("一个类的不同实例共享一个静态变量");        System.out.println("ob1.y="+ob1.y+"  ob2.y="+ob2.y);    }}运行结果为:一个类的不同实例的非静态变量相互独立                     ob1.x=10  ob2.x=12                    一个类的不同实例共享一个静态变量                    ob1.y=30  ob2.y=30

2.静态方法
调用方法前面已经说了,不再赘述。
作用:创建执行有用的功能,且不与任何对象有关。比如Math类中的很多方法,sqrt(),cos(),sin(),返回绝对值的abs(),返回对数的log()等。
注意:static方法有一些限制
只能调用其他static方法;
只能访问static数据;
没有this引用。

3.静态代码块
静态代码块中的内容是在创建对象之前就执行的工作。也就是,在首次载入这个类之前就执行static代码块,所以static代码块在该类用于其他任何用途前执行。
下面是关于static代码块的一个例子。

public class StaticBlock {    static double rootof2;       static double rootof3;       static{          rootof2 = Math.sqrt(2.0);          rootof3 = Math.sqrt(3.0);          System.out.println("Inside static block.");       }       StaticBlock(String msg){          System.out.println(msg);       }}Class Demo2(){   public static void main(String[] args){       StaticBlock ob = new StaticBlock("Inside Constructor");       System.out.println("Square root of 2 is:"+StaticBlock.rootof2);       System.out.println("Square root of 3 is:"+StaticBlock.rootof3);   }}运行结果:    Inside static block.    Inside Constructor    Square root of 2 is:1.4142135623730951    Square root of 3 is:1.7320508075688772

以上代码中,主函数中创建了一个StaticBlock对象时,在载入这个类的时候已经执行了静态代码块中的内容,是先于构造器而执行的。

原创粉丝点击