java 图说 全局变量 成员变量 静态变量 实例变量 局部变量 的关系和区别

本文通过实例讲解Java中的静态变量和方法,分析它们在内存中的存储位置以及如何影响程序运行。作者指出静态变量存放在方法区,而非静态变量在堆中,强调静态方法内变量并非静态。同时,展示了引用类型参数传递时如何影响对象属性的修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

lalala.大家好,我是佛系码农 Ted,一个和你一样渴望成为大牛的low级程序员!

刚入门java时,对这些个各种名称的变量名搞得晕头转向,而在网上搜资料呢,大家 讲的是东一块西一块,很不成体系,所以特别整理出我自己的东西,希望能帮到正在迷惑的其他猿们啊~~

直接上图,你就会恍然大悟了

这里写图片描述

例 1

public class Demo01 {
<span class="hljs-keyword">static</span> <span class="hljs-keyword">int</span> j=<span class="hljs-number">10</span>;


<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) {
    <span class="hljs-keyword">int</span> test = test();
    System.out.println(test);

    System.out.println(Demo01.j);


}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">int</span> <span class="hljs-title">test</span>(){

    Demo01.j=<span class="hljs-number">1</span>;
    System.out.println(j);
    <span class="hljs-keyword">return</span> j;

}

}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

输出

1
1
1
  • 1
  • 2
  • 3

分析

在调取test()方法后,对静态变量 j 重新赋值, 赋值后,跳出方法,打印 j 的值,发现已经更改
那是因为被static 修饰过的变量 ,存放在方法区中,一旦更改,原值就会被覆盖(不同成员变量,更改变量值后,不影响原值)

另外,今天有看到有个说,在静态方法中的变量也是静态变量. 这个说法是完全错误的.首先, 方法中的变量存在栈中,而静态变量申明在类中,方法外,变量值存在方法区中.

例 2

public class Demo01 {
<span class="hljs-keyword">int</span> i=<span class="hljs-number">1</span>;

}

  • 1
  • 2
  • 3
  • 4
  • 5

public class Demoo2 {

    public static void main(String[] args) {

        Demo01 demo01 = new Demo01();
        System.out.println(demo01);
        Demo01 test = test(demo01);
        System.out.println(demo01 );

    }
    public static Demo01 test(Demo01 demo01){
        demo01.i=15;
        return demo01;

    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

执行结果

com.chabrain.Demo01@15db9742
com.chabrain.Demo01@15db9742
  • 1
  • 2

分析

这里写图片描述

当在test()方法中传入引用类型demo01时,相当于把new Demo01()在堆中的引用地址值给了它, 可以通过demo01. (点)调用类中的属性,对堆中共有的内存进行修改.

ps :当方法中传入引用类型时,堆中对象的引用地址值会指向(这里的指向并非真正意思上的指向,因为java淡化指针的概念,其实只将引用地址值给到了test()方法)多个对象

----------------------------------------------
作者:_大帅_
来源:优快云
原文:[添加链接描述](https://blog.youkuaiyun.com/ted_cs/article/details/82493443)
版权声明:本文为博主原创文章,转载请附上博文链接!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值