首页 > 编程语言 >Java(10)成员变量和局部变量

Java(10)成员变量和局部变量

时间:2023-01-31 08:34:19浏览次数:33  
标签:obj1 10 Java 变量 ++ 局部变量 int 实例

1、声明的位置
    局部变量:方法体{}中,形参,代码块中
    成员变量:类中方法外
          ①、类变量:有static修饰
          ②、实例变量:没有static修饰
  2、修饰符
     局部变量:final
     成员变量:public private protected final static volatile transient
  3、值存储的位置
     局部变量:栈
     实例变量:堆
     类变量:方法区
  4、作用域
     局部变量:从声明处开始,到所属“}”结束
     实例变量:在当前类中用“this.”(有时this.省略)访问,在其他类中用“对象名.”访问
     类变量:在当前类中用“类名.”(有时类名.省略)访问,在其他类中用“类名.”或“对象名.”访问
   5、生命周期
     局部变量:每一个线程,每一次调用都会有新的生命周期
     实例变量:随着对象的创建而初始化,随着对象的被回收而消亡,每一个对象的实例变量是独立的
     类变量:随着类的初始化而初始化,,随着类的卸载而消亡,该类的所有对象的类变量是共享的

 

 1 public class Exam5 {
 2     static int s;//成员变量,类变量
 3     int i;//成员变量,实例变量
 4     int j;//成员变量,实例变量
 5 
 6     {
 7         int i = 1;//局部变量 非静态代码块中的 i
 8         i++;
 9         j++;
10         s++;
11     }
12 
13     public void methed(int j) {//局部变量 形参 j
14         j++;
15         i++;
16         s++;
17     }
18 
19     public static void main(String[] args) {//局部变量 形参 args
20         Exam5 obj1= new Exam5();//局部变量 ,test1
21         Exam5 obj2= new Exam5();//局部变量 ,test2
22         obj1.methed(10);
23         obj1.methed(20);
24         obj2.methed(30);
25         System.out.println(obj1.i + "," + obj1.j + "," + obj1.s);
26         System.out.println(obj2.i + "," + obj2.j + "," + obj2.s);
27     }
28 }

 

执行流程:    

   就近原则

  ①、main方法所在类需要先加载和初始化:执行类初始化(静态变量和静态代码块),static int s =0,成员变量的类变量,存放在方法区,共享

  ②、实例初始化:Exam5 obj1 = new Exam5() 

      栈中存储obj1,存储指向堆中实例的地址,堆中存储Exam5()对象本身,执行的是obj1的<init>()
      <1>、非静态类变量显示赋值代码:int i=0; int j=0;成员变量的实例变量,存储在堆中,同对象实例存储在一起
      <2>、非静态代码块:int i = 1;局部变量,存储在栈中;i++;就近原则,是非静态代码块中的i自增,故栈中的i=2;
                j++;就近原则,是刚创建的实例对象中的j自增,故obj1指向的实例对象中的j=1;
                s++;就近原则,是类初始化的成员变量(类变量)中的s自增,故方法区中的s=1;
      <3>、构造器,该类未对构造器做任何操作
        运行结束,局部变量i的生命周期结束,释放掉栈中的i=2
  ③、实例初始化:Exam5 obj2 = new Exam5() 
      栈中存储obj2,存储指向堆中实例的地址,堆中存储Exam5()对象本身,执行的是obj1的<init>()
      <1>、非静态类变量显示赋值代码:int i=0; int j=0;成员变量的实例变量,存储在堆中,同对象实例存储在一起
      <2>、非静态代码块:int i = 1;局部变量,存储在栈中;i++;就近原则,是非静态代码块中的i自增,故栈中的i=2;
                j++;就近原则,是刚创建的实例对象中的j自增,故obj1指向的实例对象中的j=1;
                s++;就近原则,是类初始化的成员变量(类变量)中的s自增,故方法区中的s=2;
      <3>、构造器,该类未对构造器做任何操作
        运行结束,局部变量i的生命周期结束,释放掉栈中的i=2
   ④、obj1.test(10);
      执行test(int j)方法,int j是形参,局部变量,存储在栈中,j=10;
      j++;就近原则,是栈的j自增,故栈中的j=11;
      i++;就近原则,就近原则,是obj1的实例对象中的i自增,故obj1指向的实例对象中的i=1;
      s++;就近原则,是类初始化的成员变量(类变量)中的s自增,故方法区中的s=3;
        运行结束,局部变量j的生命周期结束,释放掉栈中的j=11
   ⑤、obj1.test(20);
      执行test(int j)方法,int j是形参,局部变量,存储在栈中,j=20;
      j++;就近原则,是栈的j自增,故栈中的j=21;
      i++;就近原则,就近原则,是obj1的实例对象中的i自增,故obj1指向的实例对象中的i=2;
      s++;就近原则,是类初始化的成员变量(类变量)中的s自增,故方法区中的s=4;
        运行结束,局部变量j的生命周期结束,释放掉栈中的j=21
   ⑥、obj2.test(30);
      执行test(int j)方法,int j是形参,局部变量,存储在栈中,j=30;
      j++;就近原则,是栈的j自增,故栈中的j=21;
      i++;就近原则,就近原则,是obj2的实例对象中的i自增,故obj2指向的实例对象中的i=1;
      s++;就近原则,是类初始化的成员变量(类变量)中的s自增,故方法区中的s=5;  
        运行结束,局部变量j的生命周期结束,释放掉栈中的j=11
   ⑦、obj1.i为堆中实例对象所包涵的i,此时i=2;
     obj1.j为堆中实例对象所包含的j,此时j=1;
     obj1.s为方法区中共享的s,此时s=5;
     obj2.i为堆中实例对象所包涵的i,此时i=1;
     obj2.j为堆中实例对象所包含的j,此时j=1;
     obj2.s为方法区中共享的s,此时s=5;

标签:obj1,10,Java,变量,++,局部变量,int,实例
From: https://www.cnblogs.com/zhbx/p/17077717.html

相关文章

  • Java(9)类/对象/接口
    一.Java是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种......
  • java(8)访问修饰符
    1.1public任何其它类、对象只要可以看到这个类的话,那么它就可以存取变量的数据,或使用方法只有在使用public访问修饰符时,类的成员才可被同一包或不同包中的所有类访问。......
  • java(7)
    封装封装是JAVA面向对象的特点的表现,封装是一种信息隐蔽技术。它有两个含义:即把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位;以及尽可能隐藏对象的内......
  • java(6)Java 对象间关系(依赖、关联、聚合、组合)
    依赖(Dependency)依赖关系,是类与类之间的联接。依赖关系表示一个类依赖于另一个类的定义。使用关系。一般情况下,依赖关系在Java语言中体现为局域变量、方法的形参,或者对......
  • java(5)常用的 dos 命令
    查看当前目录是有什么内容dirdirdird:\abc2\test200 切换到其他盘下:盘符号cd:changedirectory案例演示:切换到c盘cd/Dc: 切换到当前盘的其他目录下(使......
  • java(3)变量和常量
     变量的类型只有引用数据类型和基本数据类型(byte,short,char,int,long,float,double,char)两种。 ......
  • java(1)java语言特性
    简单性:相对于其他编程语言而言,java较为简单,例如:java不再支持多继承,C++是支持多继承的,多继承比较复杂,C++中有指针,java中屏蔽了指针的概念,避免了绝大部分的指针越界和内存泄......
  • javascript:js 读写 style属性(DOM模型)
    javascript:js读写style属性(DOM模型)    一、说明: 1、js读取style属性,需要去掉css格式中的“-”,“-”后面的第一个字母大写。js中的减号(“-”),与css中属性......
  • 10-卡诺图的化简--引出
    卡诺图化简法的引出卡诺图是由若干个小方格构成,每个方格对应一个最小项两变量卡诺图二维卡诺图是一维卡诺图进行翻转,反转之后表示变量仍为原来的格子变量C'表示前一......
  • 洛谷oj题单【入门1】顺序结构-入门难度(Java)
    洛谷oj题单【入门1】顺序结构-入门难度(Java)来源:https://www.luogu.com.cn/training/100#problemsB2002Hello,World!publicclassMain{  publicstaticvoidmain......