0 0

如下Java代码,小弟看不明白,请高手明示。3

以下代码是小弟从JForum论坛代码中抽象提取出来的(与JForumExecutionContext相关的)。
public class Person{
	private string name;

	private static HashMap<String,Person> hm=new HashMap<String ,Person>();

	public void setName(String name){this.name=name;}

	public static Person getPerson(){
		Person p=hm.get("p1");
		if(p==null){
			p=new Person();
			hm.put("p1",p);
		}
		return p;
	}
	public static void setPerson(Person p){hm.put("p1",p);}
}

public class Test{
	public static void main(String []args){
		Person p=Person.getPerson();
		p.setName("Jack");
		p.setPerson(p);
	}
}


小弟一直迷惑的是Test类中,为什么还要加入p.setPerson(p);这一行代码,个人认为这行代码多此一举。如果必须要有p.setPerson(p);这行代码,原作者为什么要这样写,是不是用了什么设计模式?请高手明示,感激涕零!!!
2011年12月20日 21:21

3个答案 按时间排序 按投票排序

0 0

采纳的答案

以后再Person p=Person.getPerson();   这样,取出Person对象,name的值是空的。

刚才不知道怎么就提交了。

再给出一个单例的写法,个人觉得这样好一些。

public class Person {
	private String name;
	private static Person _instance = null;

	public void setName(String name) {
		this.name = name;
	}

	private Person() {
	}

	public static Person getPerson() {
		if (_instance == null) {
			_instance = new Person();
		}
		return _instance;
	}
}

2011年12月21日 08:11
0 0

你给出的那个例子,它没有限制构造方法。
还是可以用默认的构造方法创建实例。

2011年12月21日 08:13
0 0

单例模式的一种写法。最后一行是为了保证你的对象变化了。
要不然,你p.setName("Jack");  这一行代码执行过。

以后再Person p=Person.getPerson();   这样,取出Person对

2011年12月21日 08:05

相关推荐

    Thinking in Java 4th Edition Annotated Solutions Guide

    接着,文件提到了书中的源代码是免费提供的,但没有任何明示或暗示的保证,这意味着源代码不具有任何法定的或者默示的保证条款,包括但不限于商品适用性、特定用途的适用性和不侵权的保证。MindView公司不保证源代码...

    Java 9 模块化编程英文版电子书.pdf

    在Java 9之前,Java平台已经广泛使用包(Packages)来组织代码,但这种方式存在一些局限性,例如无法很好地封装Java平台内部的实现细节,这在Java 9模块化中得到了有效的解决。 Koushik Kothagal所著的《Modular ...

    Java 核心技术 卷Ⅰ 基础知识 第11版 英文版

    这本书的作者和出版社虽然在出版这本书时做了周密的准备,但并不提供任何明示或暗示的保证,并不对书中的错误或遗漏承担责任。同样,对于在使用本书信息或程序时产生的任何间接或随之而来的损失,也不承担任何责任。...

    Java Native Interface Specification R1.1

    Java Native Interface(JNI)是Java开发中的一个重要概念,它允许Java代码与其他语言编写的代码进行交互,尤其是与C或C++编写的本地应用程序接口(API)进行交互。JNI在Java应用程序中扮演着桥梁的角色,使得Java...

    The_Thinking_In_Java_Annotated_Solution_Guide.pdf

    - 书中的源代码提供时不带任何明示或暗示的保证,包括但不限于对可销售性、适用于特定目的的保证或不侵权的保证。 - MindView, Inc.不保证源代码的程序运行无中断或无错误。 - MindView, Inc.不对源代码或包含源...

    Core Java Volume I-Fundamentals

    出版社对本书的准备投入了大量精力,但作者和出版社并未对内容提供任何明示或暗示的保证,也不承担因错误或遗漏导致的责任。在使用本书信息或程序时,对于任何直接或间接的损害,出版社不承担法律责任。同时,出版社...

    Java 9 Programming Blueprints .pdf

    同时,出版商不为书中信息的准确性提供任何明示或暗示的保证,且不对由此书籍直接或间接造成的任何损害负责。这体现了出版行业对知识产权保护的重视以及对内容准确性的自我限制。 6. 关于作者:Jason Lee是一位拥有...

    Thinking in java 练习题答案

    **无保证:** 文档中的源代码没有明示或暗示的保证,包括但不限于商品性、特定用途的适用性和不侵权。 4. **风险承担:** 使用源代码的风险由用户承担,如果源代码或基于源代码的软件出现问题,用户需要承担所有的...

    Java-Breakout-Game:Java Breakout游戏源代码-java source code

    `BSD 2-Clause License`是一个宽松的开源许可,允许他人自由地使用、复制、修改和分发源代码,只要保留原作者的版权声明,并且不提供任何明示或暗示的保修。 在Java-Breakout-Game-master这个压缩包中,我们可能...

    Core Java, Volume II--Advanced Features (9th Edition).pdf

    10. 高级平台安全特性:安全性是任何生产级软件不可或缺的一部分,书中将介绍Java平台的安全机制,包括权限控制、代码签名和安全API使用。 11. 注解:注解是Java 5引入的一个特性,本书将详细讲解如何使用注解定义...

    Functional Interfaces in Java.pdf

    出版社并不提供关于书中材料的任何明示或暗示的保证。 从上述内容可以看出,《Java中的函数式接口:基础与实例》是一本全面介绍Java函数式编程的实用书籍,通过理论和实例相结合的方式,帮助开发者深入理解并有效...

    java 核心技术卷 第10版 卷II 高级特性

    作者和出版商已经尽最大努力确保本书的内容准确无误,但不承担任何明示或暗示的保证责任。本书不承担任何与使用本书中的信息或程序相关的偶然性或后果性损害责任。 对于批量购买本书的需求,可以联系Pearson ...

    JAVA认证设计师大全

    7. 免责声明和使用条款:文档中有一段免责声明,声明该书“提供‘按现状’,不提供任何形式的明示或暗示的保证,包括但不限于商品性、特定目的适用性或非侵权性”。这表明在使用文档或书籍内容时,用户需要自己负责...

Global site tag (gtag.js) - Google Analytics