Java中static修饰的变量及方法

Java中static修饰的变量及方法,第1张

Java中static修饰的变量方法

目录

引言

对象实例化过程

方法区

类变量

 类方法

Static修饰的限制


引言

在介绍static之前我们先来看下这段代码:

public class Test {
    public int a = 1;
    public static int b = 1;

    public static void main(String[] args) {
        Test test1 = new Test();
        test1.a++;
        System.out.println(test1.a);
        test1.b++;
        System.out.println(test1.b);
        Test test2 = new Test();
        test2.a++;
        System.out.println(test2.a);
        test2.b++;
        System.out.println(test2.b);
    }
}

猜猜会输出什么?

答案揭晓:

 

我们明明创建了两个对象按道理结果应该是2222才对,但第四个数井变成了3,这就值得深究了。

对象实例化过程

我们在主函数内创建了两个变量test1,test2。而test1、test2存储的是地址,所以test1、2也叫引用。test1引用了一个对象,test2也引用了一个对象,而这些对象中有啥呢,看下图:

 他们有Test类下的name,a。这个通过类创建对象的过程就叫做实例化。可我们在Test类下定义的不是还有b吗,它到哪去了呢?

方法区

在这个情况下,我们引入了一个新的区:方法区

1.存储代码片段

当一个类进行编译时产生了一个字节码文件通过类加载器加载到jvm的内存中,这时便会在方法区产生类的字节码文件。

2.存储静态的成员变量(也叫做类变量)。

我们看到静态变量只在方法区存储了一份,因此当我们通过对象使用它时,使用的是同一份,因此结果自然就是3了。

类变量

静态变量也叫做类变量,因为他可以不用创建一个对象就能使用它。

示例:

我们直接用类名也能直接调用成功。

 类方法

既然有类变量那肯定有类方法了。

我们定义了一个简单的类方法实践下。

 

Static修饰的限制

1.普通方法内不能定义类变量

原因:1.static修饰的变量为类变量,属于类的

           2.普通方法的调用需要new对象才能使用,而类变量不需要,假设能在普通方法内定义,     岂不是说可以直接调用普通方法而不需要new对象了。

2.类方法内不能定义类变量

 原因:1.static修饰的变量为类变量,属于类的。

总结:静态的成员变量是不可以在方法内部定义的。

3.普通方法内可以调用类方法

 原因:普通方法使用需要调用对象,而类方法不需要,因此可以调用。

4.类方法内不能调用普通方法

原因:普通方法调用需要new对象,而类方法不需要。

 本文分享到这就结束了,感谢阅读!

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5139230.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-17
下一篇 2022-11-17

发表评论

登录后才能评论

评论列表(0条)

保存