首页 > 代码库 > java基础2

java基础2

1:静态方法为什么不能访问类的实例变量

  因为他俩跟本放的不是一个地方
  静态方法存储在栈中,而其他的非静态方法存储在堆中
    基本如图
    栈 | 堆
    静态 | 非静态
  根本不属于一个系统....

2:按引用传递

import java.awt.Dimension;
public class ReferenceTest {
    public static void main(String[] args) {
        
        Dimension d=new Dimension(5,10);
        ReferenceTest rt=new ReferenceTest();
        System.out.println("Before modify d.height="+d.height);
        rt.modify(d);
        System.out.println("After modify d.height="+d.height);
    }
    void modify(Dimension dim){
        dim.height=dim.height+1;
        System.out.println("dim.height="+dim.height);
    }
}

输出:

Before modify d.height=10
dim.height=11
After modify d.height=11

引用变量d和dim都指向同一个对象。将对象变量传递到方法时,必须记住传递的是对象引用,而不是实际对象本身。根本没有传递实际的引用变量,而是该引用变量的一个副本。变量副本意味着获得该变量内的位副本,因此,当传递引用变量时,是在传递表示如何获取特定对象的位副本。换句话说,调用方法和被调用方法现在都具有该引用完全相同的副本,因此二者都将引用堆上完全相同的对象(这里不是副本)。

3:按值传递。

  对于运行在单个JVM内的所有变量,Java实际上是按值传递的。按值传递意味着按变量的值传递,也就是传递该变量的一个副本。

 

  

 

java基础2