A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1.     静态方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法

   声明为static的方法有以下几条限制:
· 它们仅能调用其他的static 方法。
· 它们只能访问static数据。
· 它们不能以任何方式引用this 或super。

class Simple {

    static void go() {

       System.out.println("Welcome");

    }

}

public class Cal {

    public static void main(String[] args) {

       Simple.go();

    }

}

    调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。

2. 静态变量

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了

class Value {

    static int c = 0;

    static void inc() {

       c++;

    }

}

public class Count2 {

    public static void prt(String s) {

       System.out.print(s);

    }

    public static void main(String[] args) {

       Value v1, v2;

       v1 = new Value();

       v2 = new Value();

       prt("v1.c=" + v1.c + "  v2.c=" + v2.c);

       v1.inc();

       prt(" v1.c=" + v1.c + "  v2.c=" + v2.c);

    }

}

结果为:v1.c=0  v2.c=0 v1.c=1  v2.c=1

由此可以证明它们共享一块存储区。static变量有点类似于C中的全局变量的概念。

值得探讨的是静态变量的初始化问题。

       如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:

class Value3 {

    static int c = 0;

    Value3() {

       c = 15;

    }

    Value3(int i) {

       c = i;

    }

    static void inc() {

       c++;

    }

}

public class Count {

    public static void prt(String s) {

       System.out.println(s);

    }

    Value3 v = new Value3(10);

    static Value3 v1, v2;

    static {//此即为static块

       prt("v1.c=" + v1.c + "  v2.c=" + v2.c);

       v1 = new Value3(27);

       prt("v1.c=" + v1.c + "  v2.c=" + v2.c);

       v2 = new Value3(15);

       prt("v1.c=" + v1.c + "  v2.c=" + v2.c);

    }

    public static void main(String[] args) {

       Count ct = new Count();

       prt("ct.c=" + ct.v.c);

       prt("v1.c=" + v1.c + "  v2.c=" + v2.c);

       v1.inc();

       prt("v1.c=" + v1.c + "  v2.c=" + v2.c);

       prt("ct.c=" + ct.v.c);

    }

}

   结果为:v1.c=0  v2.c=0

v1.c=27  v2.c=27

v1.c=15  v2.c=15

ct.c=10

v1.c=10  v2.c=10

v1.c=11  v2.c=11

ct.c=11

     


6 个回复

正序浏览
枼子 中级黑马 2016-2-12 13:38:08
7#
学习了。。。
回复 使用道具 举报
yuchifeifan 来自手机 中级黑马 2016-2-12 01:27:45
地板
changshuai0512 发表于 2016-2-2 17:54
1.     静态方法
通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法   声明 ...

懂了 总结的好
回复 使用道具 举报
总结的比我全好多 太好了
回复 使用道具 举报
对我而言很有帮助
回复 使用道具 举报
总结的不错
回复 使用道具 举报
静态只能访问静态 静态优先于对象存在的 不能调用this和super
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马