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对象,而类方法不需要。

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

 

  • 11
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海绵宝宝养的的小窝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值