JAVA中static关键字介绍

来源:互联网 发布:淘宝店铺装修还原 编辑:程序博客网 时间:2024/06/06 17:27
一般来讲,创建类的过程实际上就是我们去描述那个类的对象的外观与行为。除非我们使用new创建一个类的对象,否则我们实际上并未获取任何对象,也就是说只有执行new来创建对象时,数据存储空间才会被分配,其方法才能够供外界调用;
     但是,在某些场景下上述的方法无法满足我么的要求,一种是只想为特定域分配单一存储空间,而不去考虑创建多少对象,甚至不考虑创建对象。另一种是希望某个方法的调用不与任何对象关联在一起,即没有创建对象也能够调用方法;
     static关键字可以满足上述的需要,当一个事物声明为static时,意味着这个域或者方法不会与包含它的那个类的的任何实例对象关联在一起,所以没有创建对象也可以访问其static方法或者static域,通常情况下,你需要创建一个对象,并用它来访问数据或方法,因为非static的方法或者域必须知道他们一起运作时的特定对象;
     面向对象语言采用了类数据和类方法两个术语,代表那些方法和数据知识作为整个累而不是类的某一个特定的对象而存在的,值得注意的是,使用static作用于某一个字段时,肯定会改变数据创建的方式,因为static字段对每一个类来说都只有一份存储空间,因此即使不同的对象访问的也只是同一存储空间,而非static字段则是对每一个对象都有一个存储空间。但是将static用于修饰方法时区别则没有那么大,static修饰方法时重要的作用就是在不创建对象的情况下也可以调用该方法。
     下面举例说明
Class StaticTest{
     static int i =10;
     int j=5;
     static void sayHello{
          system.out.println("hello");
     }
}
i 作为一个静态变量在编译器编译时会为i分配一个存储空间(有且只有一份),j变量只有在创建该类的对象时才会为其分配存储空间(每个对象都会有单独的一份)
创建两个对象
StaticTest st1=new StaticTest();
StaticTest st2=new StaticTest();

执行 st1.i++;
        st1.j++;
       system.out.println(st1.i);
       system.out.println(st2.i);
       system.out.println(st1.j);
       system.out.println(st2.j);
执行结果:
11
11
6
5

由于st1 与st2访问的静态变量i是共享的不属于任何一个对象,因此st1对i进行加1操作后st2再访问i时就变成了11,而非静态变量j为每一个对象单独所有因此对象st2的j是不变的;
而被static修饰的sayHello方式在不创建对象的情况下也可以访问
StaticTest.sayHello();
执行结果
hello;

如有不对之处,还请各位大神指正!!
0 0
原创粉丝点击