静态方法的缺陷

来源:互联网 发布:粒子群算法参数 编辑:程序博客网 时间:2024/05/01 15:36

静态方法的缺陷

        静态方法的一个常见缺陷是从静态方法中引用每个对象的数据。这将出现问题,因为静态方法没有指向单个对象数据的隐式“this”指针。而且,如果试图从一个静态方法中访问一个实例变量,编译程序不会知道到底需要哪一个对象并将会产生错误信息。典型的错误信息是“Can't make static referenc to non-static variable.”。

        public static voild main(String[] args) {

                     salary = 50000;                     //BZZT! does not work

                     Employee e = new Employee("Fred",50000);

                     e.salary = 50000;                //WORKS fine.

        如果需要在静态方法中引用实例(每个对象的)数据和方法,一种做法是在静态方法中声明和实例化一个对象,然后就可以访问这个实例的数据和方法了。

        前面已经说过,并不是真正地保持实例方法的每个实例副本。那么,静态方法的用途是什么呢?当方法所做的处理只与整个类有关,而且并不特别针对一个实例时,则应把这个方法声明为静态的。java.lang.String类有若干个valueOf()方法,他们均接受一个基本类型(布尔和整数等)参数,然后把参数值作为String返回。这些方法都是静态的,因此无需要使用字符串实例就可以调用它们,示例如下:

              String s = String.valueOf(123.45);           //OK

        javalang.Math 包中的方法都是静态方法,如abc()、sin()、cos()和exp()等。只需如下所示的那样调用它们即可:

              double d = Math.abs(-12.0);

        最后,程序的开始执行位置main()方法也是静态的。如果不是,则在调用它之前,需要先创建实例,如同在applet和Servlet中所做的那样。

原创粉丝点击