【前言】:
之所以今天回来再讲一次Static,是因为确实当年学的也是稀里糊涂,对于java来说不要说精通,还远远达不到熟练,所以如果硬要形容自己的java水平,就如同一门语言一样,仅限于交流。沟通无障碍,所以这段时间重新梳理一下,捡一下,生活丢丢捡捡是正常的,毕竟我们不能像走路一样熟悉来熟悉某些事物。
===================================================================================
【static变量】:
我们从本质理解,就是java声明了一个全局变量,尽管全局变量是存在于C和C++的,(就像有着天敌关系似得,每次作比较,C,C++总会出现,这一对好基友一直在为java一些知识体系的解释做着贡献)然而在java里static声明的变量,我们可以把它理解成全局变量。
===========================================
代码层面的理解:
package Test; public class StaticExample { public static int counter; }
此时counter就已经成为了全局变量,在代码执行之前,counter这个变量就存在内存中了,作为Test类唯一实例。
这个实例是不管Test类中建了多少个实例,counter也只是一个,而且就当Test里面其他实例被gc,被虚拟机垃圾回收机制回收,counter也仍然存在于内存中。
这种静态变量的特性,经常被用于单实例中:
(什么是单实例:单实例设可能是使用最广泛的设计模式。其思想意图是保证一个类只有一个实例,并且提供类对象的全程访问。)
public class StaticExample { //单实例 public static StaticExample staticExample=null; //构造函数声明为private,这样避免类的外部用new创建对象; private StaticExample(){}; //外界调用方法 public static StaticExample getStaticExample(){ if(null==staticExample){ staticExample=new StaticExample(); } return staticExample; } }
==================================================================================
【static方法】:
Java修养:
一个方法,如果仅依赖方法的传入参数,其他的static变量,这样看来,这个方法不依赖于类实例,则这样的方法应该被声明为static。表示此方法是类方法,而非实例方法。
代码举例:
public class UtilDemo { public static int toInt(String s){ return Integer.parseInt(s); } // int value=UtilDemo.toInt(str); }这一种则直接int value=UtilDemo.toInt(str);就可以调用,没必要实例化一个对象再去调用,创建这样的对象纯粹是浪费。 ================================================================================= 【static类嵌套类】: 可惜的是java类是不能用static修饰的,因为是非法的,而在C C++里如果一个类被static修饰,则里面所有成员变量和方法都是静态了。 嵌套类可以用static修饰。但又有另外的含义。