我们在创建类时,就是在描述那个类的对象的外形和行为。除非是new一个创建那个类的对象,否则,实际上是不能获得任何对象的。只有在执行new来创建对象的时候,数据存储空间才会被分配,它的方法才能被调用。
有两种情况是new一个对象的方法无法解决的。
1.只想在某一个特定的域分配一个单独的存储空间,不用去考虑究竟要创建多少对象,甚至于不用创建对象。
2.希望某一个方法不与存在有这个方法的类的任何一个对象有关联。
也就是说,不用创建对象来调用这个方法。这时候,我们可以用static关键字来解决。
当声明一个实物是static时,就说明了这个域或者是这个方法不会与存在有它的类的任何的对象关联在一起。所以,我们就可以在没创建这个类的任何一个对象,就可以来调用static的方法或者是访问static域。
static属性[类属性]:该类的所有的对象共享的一个属性,只会占用一块内存空间
例如:
Java代码
public class one{ static i=10; }
现在,即使你在重新创建两个one对象,one.i也只有一个存储空间,这两个对象会同时享用这个i
Java代码
one a1=new one(); one a2=new one();
在这里,a1和a2都是指向同一个存储空间,所以它们的值都是10.
static方法[类方法]:类方法不能再用this和super表示对象
类方法是调用父类的还是子类重写的只和类名有关
例如:
Java代码
public class two{ static void jia(){ one.i++; }
现在,这个two的jia()方法通过++运算符将静态的数据i递加。
我们可以典型的new对象来调用:
Java代码
two t=new two(); t.jia();
因为这个方法是静态的,我们可以直接调用,如:
Java代码
two.one();
static方法的一个重要的用法就是在不创造任何对象的前提下,就可以调用它。
static代码块:也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们写在类中的先后顺序依次执行它们,每个代码块只会被执行一次。
例如:
Java代码
public class dome{ static { System.out.print("A"); } static { System.out.print("B"); } static { System.out.print("C"); } public static void main(String[] args) { System.out.print("E"); } }
执行的结果
ABCE