`

方法传对象的引用 Hero

阅读更多

忘记留原文地址了,这是杜撰的。。。

这也没反映出对象的消亡过程

java的基础类型传递是值传递,和C语言的一样。

但是java的对象传递,和C语言的引用传递有些不同,因为java是对象,没有地址的观念。

从下面的code可以看出,面向对象所传递的并非地址,而是引用。
只要还有一个引用存在,那么对象也存在;
只要还有一个‘分身’,真身就不会死亡;


import java.lang.*;

public class Hero
{
	public static void main(String[] args)
	{
		Hero hero = new Hero();

		hero.setId(1); // 英雄真身的ID是1
		System.out.println("1 hero id = " + hero.getId());

		hero.UpdateId(hero);
		System.out.println("2 hero id = " + hero.getId());

		hero.setId(1); // 英雄真身的ID是1
		hero.Kill(hero);
		System.out.println("3 hero id = " + hero.getId());

	}

	private int id;

	public void UpdateId(Hero hero)
	{
		hero.setId(0);
		hero = null;
	}

	public void Kill(Hero hero)
	{
		// 这个hero是个局部变量,就像一个指针*p
		// p != *p
		hero = null;
		try
		{
			hero.setId(0);
		} catch (java.lang.NullPointerException ex)
		{
			ex.printStackTrace();
		} finally
		{
			System.out.println("报错呢,看来方法里边就只有一个hero");
		}
	}

	public int getId()
	{
		return id;
	}

	public void setId(int id)
	{
		this.id = id;
	}

}



分享到:
评论

相关推荐

    java-面向对象的英雄类

    这在处理不同类型的对象时非常有用,比如在一个数组或集合中,可以统一使用父类引用,而实际存储的是各种子类对象。 在“java-面向对象的英雄类”的测试题中,可能会考察以下内容: 1. 类的定义与实例化。 2. 访问...

    handmade-hero

    - 多态:通过虚函数和抽象基类实现,允许多种类型的指针或引用来调用相应的成员函数。 - 异常处理:通过try-catch语句捕获和处理运行时错误,保证程序的健壮性。 - 模板:提供泛型编程,使得代码可以处理多种类型...

    javascript 对象定义方法 简单易学

    ### JavaScript对象定义方法详解 #### 一、引言 JavaScript是一种强大的编程语言,在Web开发领域占据主导地位。其中,对象是其核心概念之一,而如何有效地定义和使用对象则是掌握JavaScript的关键技能。本文将深入...

    浅谈PHP链表数据结构(单链表)_.docx

    `Hero`类有四个成员属性:排名`$no`、姓名`$name`、昵称`$nickname`以及一个指向下一个`Hero`对象的引用`$next`。通过这个`$next`属性,我们可以将多个`Hero`对象链接起来,形成一个单链表。 创建链表通常从头节点...

    王者荣耀英雄头像-用于js-对象中的英雄列表案例

    在JavaScript编程中,创建一个对象列表来表示"王者荣耀"中的英雄头像是一个常见的应用场景。这个案例可以帮助我们理解如何在实际项目中使用JavaScript对象以及数组来组织数据。下面将详细讲解这个知识点。 首先,...

    举例讲解JavaScript中关于对象操作的相关知识

    `delete`关键字用于删除对象的属性,但注意不能删除对象的方法,因为这会导致引用丢失,而非真正的删除。 在JavaScript中,`this`关键字通常指代当前上下文的对象。例如: ```javascript var hero = { name: '...

    坦克大战源码

    - `Hero` 类还提供了调整坦克移动的方法,如 `moveup()`、`moveright()`、`movedown()` 和 `moveleft()`,这些方法会根据速度值改变坦克的位置。 3. **EnemyTank 类** - `EnemyTank` 类同样继承自 `Tank`,并且...

    Hero_vs_Monster

    同时,通过多态性,可以使用父类引用处理子类对象,增加代码的灵活性。 - 抽象与接口:为了保持代码的松耦合,可能会定义一些抽象类或接口来规定必须实现的行为,如`Battleable`接口,表示角色可以进行战斗。 2. *...

    Hero相关素材png格式,素材只用于学习噢

    元数据文件PrototypeHero.png.meta是Unity引擎特有的,它存储了关于游戏对象的附加信息,例如在Unity项目中的组件设置、资源引用等。这些信息对于在Unity编辑器中正确加载和使用图像至关重要。元数据文件通常不直接...

    基于三大特性实现的自动打怪游戏

    在游戏逻辑中,`Games.java`可能包含了战斗系统,它可以通过父类引用(如`IMonster.java`和`IHero.java`接口)调用子类对象的方法,无需关心具体是哪种类型的怪物或英雄。这样,即使后期添加新的怪物或英雄类型,也...

    java中的多态

    5. 强制多态:涉及到类型转换,如将子类对象赋值给父类引用,或在运算符和方法调用中进行隐式类型转换。例如,`Integer`可以转换为`Number`,或者`double`和`int`相加时,`int`会被转换为`double`。 6. 参数多态...

    JavaScript Blob对象原理及用法详解

    Blob对象有若干属性和方法,其中`size`属性返回Blob对象的大小,以字节为单位。在上面的例子中,`blobObject.size`会返回22,这是JSON字符串的字节长度。 另一个重要的方法是`slice()`,它用于从原始Blob中创建一个...

    be-the-hero

    1. **基础语法**:包括变量、数据类型(如字符串、数字、布尔值、对象等)、操作符、控制流程(条件语句、循环语句)以及函数的使用。 2. **DOM操作**:Document Object Model (DOM)是HTML和XML文档的结构化表示。...

    angular2-tour-of-heroes-master

    在这个示例中,`app.module.ts`文件就是应用的根模块,包含了对Angular核心库和应用所需模块的引用。 **3. 组件(Components)** 组件是Angular2应用的基本构建块,它们负责展示UI和处理用户交互。`app.component....

    Hero_Image_Scroller:使用 Greensock 的图像滚动条

    7. **性能优化**:由于频繁的图片切换和动画可能导致性能下降,开发者可能使用了GSAP的一些最佳实践,如延迟加载、缓存DOM元素引用和利用硬件加速等方法来提升性能。 在Hero_Image_Scroller-master这个压缩包中,...

    JSF_Hero_vs_Monsters

    它简化了对bean属性的引用,如`${bean.property}`,并支持基本运算和方法调用。 8. **Facelets**:JSF的默认视图技术,它是一种XML方言,用于创建和组合UI组件。Facelets允许开发者使用模板和包含来组织页面结构,...

    LostCraft.zip

    C++中,类是面向对象编程的基础,用于封装数据和方法。例如: - `Craftsmanship.cpp` 和 `Craftsmanship.h` 可能表示一种工艺或技能系统,包含相关的方法和属性。 - `Monster.h`, `Hero.h` 分别定义了怪物和英雄类...

Global site tag (gtag.js) - Google Analytics