侧边栏壁纸
博主头像
YuJiuYao

You should think more, not talk more

  • 累计撰写 11 篇文章
  • 累计创建 7 个标签
  • 累计收到 2 条评论
标签搜索

static关键字的作用

YuJiuYao
2021-05-21 / 0 评论 / 1 点赞 / 79 阅读 / 1,322 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-04-16,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

static是静态修饰符。

在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。

这样做有什么意义呢?

在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的。

未声明为static的例子:

class ClassA{
    int b;
    public void ex1(){
    …
    }
}

class ClassB{
    void ex2{
    int i;
    ClassA a = new ClassA();
    i = a.b; //这里通过对象引用访问成员变量b
    a.ex1; //这里通过对象引用访问成员函数ex1
    }
}

声明为static的例子:

class ClassA{
    static int b;
    static void ex1(){
    …
    }
}

class ClassB{
    void ex2{
    int i;
    i = ClassA.b; //这里通过类名访问成员变量b
    ClassA.ex1; //这里通过类名访问成员函数ex1
    }
}

通过以上两种比较,就可以知道static用来修饰类成员的主要作用了:在java类库当中有很多类成员都声明为static,可以让用户不需要实例化对象就可以引用成员,最基本的有Integer.parseInt(),Float.parseFloat()等等用来把对象转换为所需要的基本数据类型。这样的变量和方法我们又叫做类变量和类方法。

被static修饰后的成员,在编译时由内存分配一块内存空间,直到程序停止运行才会释放,那么就是说该类的所有对象都会共享这块内存空间

例子:

class TStatic{
    static int i;
    public TStatic(){
        i = 4;
}
public TStatic(int j){
    i = j;
}
public static void main(String args[]){
    TStatic t = new TStatic(5); //声明对象引用,并实例化
    TStatic tt = new TStatic(); //同上
    System.out.println(t.i);
    System.out.println(tt.i);
    System.out.println(t.i);
    }
}

这段代码里面static类有一个static的int变量I,有两个构造函数,第一个用于初始化I为4,第二个用于初始化 i 为传进函数的值,在main中所传的值是5,程序首先声明对象的引用t,然后调用带参数的构造函数实例化对象,此时对象t的成员变量I的值为5,接着声明对象tt,调用无参数的构造函数,那么就把对象tt的成员变量i的值初始化为4了,注意了,在这里i是static,那就是说该类的所有对象都共享该内存,那也就是说在实例化对象tt的时候改变了i的值,那么实际上对象t的i值也变了,因为实际上他们引用的是同一个成员变量。最后打印的结果是三个4。

总结

  1. static修饰类的时候,可以不实例化对象直接访问类的成员
  2. static修饰变量的时候,因为共享内存,改变以最后一次修改为准。
1

评论区