什么是Java中的引用?

引用的概念,如果一个变量的类型是 类类型,而非基本类型,那么该变量又叫做引用。

步骤 1 : 引用和指向

new Hero();

代表创建了一个Hero对象

但是也仅仅是创建了一个对象,没有办法访问它

为了访问这个对象,会使用引用代表这个对象

Hero h = new Hero();

h这个变量是Hero类型,又叫做引用

=的意思指的h这个引用代表右侧创建的对象

代表” 在面向对象里,又叫做“指向

public class Hero {

    String name; //姓名

    float hp; //血量

    float armor; //护甲

    int moveSpeed; //移动速度

    public static void main(String[] args) {
//创建一个对象
new Hero(); //使用一个引用来指向这个对象
Hero h = new Hero(); } }

步骤 2 : 多个引用,一个对象

引用有多个,但是对象只有一个。

在这个例子里,所有引用都指向了同一个对象。

对象就像 "房产", 引用就像"房产证"

房产证的复印件可以有多张,但是真正的"房产" 只有这么一处

public class Hero {

    String name; //姓名

    float hp; //血量

    float armor; //护甲

    int moveSpeed; //移动速度

    public static void main(String[] args) {

        //使用一个引用来指向这个对象
Hero h1 = new Hero();
Hero h2 = h1; //h2指向h1所指向的对象
Hero h3 = h1;
Hero h4 = h1;
Hero h5 = h4; //h1,h2,h3,h4,h5 五个引用,都指向同一个对象 } }

步骤 3 : 一个引用,多个对象

第8行,引用garen指向新创建的对象(对象1)

第9行,同一个引用garen指向新创建的对象(对象2)

这个时候,对象1,就没有任何引用指向了

换句话说,就没有任何手段控制和访问该对象,那么该对象就变得没有意义。

package charactor;

public class Hero {
public String name;
protected float hp; public static void main(String[] args) {
Hero garen = new Hero();
garen = new Hero();
}
}

练习引用

(如代码,问题:

h4所指向的对象和h2所指向的对象,是否是同一个对象?)

package charactor;

public class Hero {
public String name;
protected float hp; public static void main(String[] args) {
Hero h1 = new Hero();
Hero h2 = new Hero();
Hero h3;
Hero h4;
h3 = h1;
h4 = h3;
}
}

答案

如果所示,h4指向h3,最终间接地指向了对象1

而h2指向的是对象2,所以h4和h2不是指向同一个对象

最新文章

  1. 【原】tomcat 7 启动报错:java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()Ljavax/servlet/SessionCookieConfig的解决
  2. pandas处理数据1
  3. ajax asud模板
  4. 数据库日期格式为int型时存取格式
  5. 【练习】手工生成awr报告
  6. JVM 优化问题
  7. Free and Open Source Load-Balancing Software and Projects--转
  8. ubuntu忘记登录账户以及密码
  9. Genymotion模拟器一滑动页面就跳到搜索003
  10. Android ContentProvider完整案例
  11. Hat’s Words(字典树)
  12. android自定义控件---添加表情
  13. viewpager处理(一):让viewpager不能滑动
  14. js 正则,从url中取参数值
  15. [转载]历上最强的音乐播放器(jetAudio-8.0.5.320-Plus-VX
  16. 低版本IE内核浏览器兼容placeholder属性解决办法
  17. 一款DMA性能优化记录:异步传输和指定实时信号做async IO
  18. 对弈win32笔记
  19. Linux命令行下快捷键
  20. Visual Studio Code必备插件

热门文章

  1. uniapp - 更改项目生成模板、页面
  2. 类中嵌套定义指向自身的引用(C、C++、C#)或指针(C、C++)
  3. TermKit的新一代Mac终端,在Ubuntu 11.04 轻松安装TermKit
  4. web3 编译部署调用合约
  5. mac opencv 提示摄像头权限问题
  6. [转]详解vue父组件传递props异步数据到子组件的问题
  7. Java基础 awt Frame 窗体在屏幕的中间显示
  8. avformat_open_input阻塞操作中断的支持
  9. libmodbus学习笔记
  10. word 条件多项式公式对齐