zoukankan      html  css  js  c++  java
  • 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实际上是按值传递的。按值传递意味着按变量的值传递,也就是传递该变量的一个副本。

     、    按值传递和按引用传递的区别。

      如果传递的是对象引用变量,则是在传递一个表示对象引用的位副本,然后,被调用方法得到自己的引用变量副本并处理它,但是,因为两个相同的引用变量引用完全相同的对象,所以,如果被调用方法修改该对象(例如,通过调用其setter方法),则调用方法将看到最初变量引用的对象也会被修改。

        按值传递的要点:被调用方法不能修改调用方法的变量,尽管对对象引用变量而言,被调用方法能够修改该变量引用的对象。

      对象引用:意味着被调用方法不能重新对调用方法原来的引用变量赋值,也就不能引用不同的对象或null.

        

    void bar(){
        Foo f=new Foo();
       doStuff(f);       
    }
    void doStuff(Foo g){
       g.setName("BOO");
       g=new Foo();
    }    

    会重新对g赋值而不会重新对f赋值。bar()结尾处,两个Foo对象都创建。一个被局部变量f引用,一个被局部变量(变元)g引用。因为doStuff()有该引用变量的一个副本,所以它有方法获得原来的Foo对象,比如调用setName(),但是,doStuff()无法获得f引用变量。因此,doStuff()能修改对象f内引用的值,但不能修改f的实际内容(位模式)。换句话说,doStuff()可以修改f引用的对象的状态,但不能使f引用不同的对象。

  • 相关阅读:
    Maximum Depth of Binary Tree
    Single Number
    Merge Two Sorted Lists
    Remove Nth Node From End of List
    Remove Element
    Remove Duplicates from Sorted List
    Add Two Numbers
    编译视频直播点播平台EasyDSS数据排序使用Go 语言 slice 类型排序的实现介绍
    RTMP协议视频直播点播平台EasyDSS在Linux系统中以服务启动报错can’t evaluate field RootPath in type*struct排查
    【解决方案】5G时代RTMP推流服务器/互联网直播点播平台EasyDSS实现360°全景摄像机VR直播
  • 原文地址:https://www.cnblogs.com/bulrush/p/5975263.html
Copyright © 2011-2022 走看看