java面向对象类的设计02

java面向对象类的设计

2. 方法的参数传递值传递与引用传递

static静态变量
(1)static可以修饰变量,方法
(2)被static修饰的变量或者方法是独立于该类的任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享。
(3)在类被加载的时候,就会去加载被static修饰的部分。
(4)被static修饰的变量或者方法是优先于对象存在的,也就是说当一个类加载完毕之后,即便没有创建对象,也可以去访问。
jvm的内存模型
heap堆:当中存的是对象的实体
stack栈 当中存的是对象在堆当中的地址
method:方法区所有的class和static变量
值传递
基本数据类型参数的传递过程中就是把实参的值复制到形参上

public class b01 {
    public static void show(int i){//static声明使方法可以直接在main函数中调用
        i=7;//i在方法中已经被声明,所以这里应直接赋值
        System.out.println("show方法里的i的值是"+i);
    }
    public static void main(String[] args) {
        int a=0;
        show(a);
        System.out.println("mian方法中的a的值是"+a);
    }
}

运行结果

show方法里的i的值是7
mian方法中的a的值是0

**
引用传递
**

public class Kiana {
    int a;
}
public class b01 {
    public static void age(Kiana p1){//引用类Kiana中的对象
        p1.a=16;
        System.out.println("在age方法中p1.a的值为"+p1.a);
    }

    public static void main(String[] args) {
        Kiana p=new Kiana();
        System.out.println("调用age方法之前,p.a的值是"+p.a);
        age(p);
        System.out.println("调用age方法之后,p.a的值是"+p.a);
    }

运行结果

调用age方法之前,p.a的值是0
在age方法中p1.a的值为16
调用age方法之后,p.a的值是16

(1)Kiana p=new Kiana()把new Kiana()存到堆内存中,地址为K423
(2)p引用对象到栈中,地址是A9500,值是new Kiana对象在堆中的地址K423
(3)调用age方法时,先给p1引用对象到栈中,地址A9600,存的值是来源于实参p,也就是p栈中存的值这个值实际上是new Kiana对象在堆内存中的地址K423
#到第三步的时候,实际上p和p1其实都是指向同一个对象,这个对象就是堆内存中的地址K423保存的对象
#p和p1均为引用变量,引用的是堆当中的实际变量
只需要记住p和p1操作的其实是同一个变量就行了
例如
Kiana p=new Kiana();
public static void age(Kiana p1)
这种方法中只需要先引用p1之后再引用p就行

发布了4 篇原创文章 · 获赞 0 · 访问量 80

猜你喜欢

转载自blog.csdn.net/VioletEvgarden/article/details/104553742