zoukankan      html  css  js  c++  java
  • Java对象与对象引用变量的理解

    Java对象及对象引用

      首先定义一个简单的类:

      class User{

        int userId;

        String userName;

      }

      我们在创建对象时,通常会写:

         User user = new User();

      这个操作包含了四个动作。

      1)右边的"new User",是以User为模板,在堆(heap)中创建一个User类对象(也可以说User对象)。

      2)末尾的()意味着,对象创建后,立刻调用User类的构造函数,对刚生成的对象进行初始化。构造函数肯定是有的,如果你没有写,Java会给你补上默认的构造函数。

      3)左边"User user"创建了一个User类引用变量。User类引用就是以后可以用来指向User对象的对象引用。

      3)"="操作符使对象引用指向刚创建的那个User对象。

      为了更好的理解,拆分成两步:

      User user;

      user = new User();

      功能效果是一样的,这样就比较清楚了,有两个实体:一个是对象引用变量,一个是对象本身。

      一般引用是存放在栈(stack),对象存放在堆(heap)

      我们创建对象,为什么还要创建对象引用变量?

      因为创建的User对象是没有名字的,可以认为是User类名称(对象的创建模板)

      所以一个User类可以据此创建无数个对象,且这些对象不能全叫"User"。

      我们不能直接访问,只能通过对象引用来间接访问对象。

      理解到这里,拓展下这里的知识:

      For Example:

      User user_1 = new User();

      User user_2;

      user_2 = user_1;

      这里解释下,user_2没有指向对象,但是发生了复制行为,要说的是,对象没有被复制,被复制的只是对象引用。结果是,user_2也指向了user_1所指向的对象。

      以此类推:

      user_2 = new User();

      则表示user_2引用变量修改指向第二个User对象。

      得出结论:

      1)一个对象引用可以指向一个或多个对象

      2)一个对象可以有N个引用指向它

      再拓展下:

      user_1 = user_2;

      现在user_1也指向了第二个User对象,那么第一个User对象呐?因为没有被使用到,就会被Java垃圾回收处理机制回收了,至于什么时候回收,要看垃圾回收机制的策略或者心情了,就是等待JVM回收。

      以此类推,一些没有引用指向的对象,都会被丢弃,等待JVM回收

      For Example:

      new User();

      System.out.println("Hello World!");

      

  • 相关阅读:
    软件技术文档撰写要求
    UML需求分析步骤实例解析
    sql 操作重复数据集合
    cookie无法读取的问题
    软件开发中,这些文档你用到了吗?
    软件测试报告[样本]
    一个软件设计的全过程(基于UML)
    命令 状态 职责链 三种模式之间的异同
    PHP的MVC实现(3)
    怎么样整理有用的资料?
  • 原文地址:https://www.cnblogs.com/Alan-Jones/p/9089630.html
Copyright © 2011-2022 走看看