当前位置:编程学习 > JAVA >>

一个关于类的基础知识

初学者,刚刚接触Java,请问个问题。
我有如下这个类:

public class People { 
public String name;
public int age;
People(){
name = "";
age = 0;
}
}

假如,我现在想在这个类中添加一个方法,是获得一个人类的实例,请问可以有几种写法? --------------------编程问答-------------------- 写法也许很多,但类别我觉得分两种。 基本都是通过类的static方法获得实例。
一种是单例的,即每次只能获得同样的类的实例

   private static People instance = null;   
    
   public static People getInstance() {   
        if (instance == null) {                            
            instance = new People ();                 }   
        return instance;   
    }

使用时

People people = People.getInstance();


如果是多例

   public static People newInstance() {   
        return new People ();
    }


使用时

People people = People.newInstance();


如果楼主是想不让别人在外面new的话,可以把构造函数换成private的。
还有楼主如果想问这样做和new有什么不一样,或者好处的话。

可以baidu 工厂模式。 --------------------编程问答--------------------
引用 1 楼  的回复:
写法也许很多,但类别我觉得分两种。 基本都是通过类的static方法获得实例。
一种是单例的,即每次只能获得同样的类的实例

Java code

   private static People instance = null;   
    
   public static People getInstance() {   
        if (instance == n……

++ --------------------编程问答-------------------- 不过讲得有点深了,不一定看得懂 --------------------编程问答-------------------- 大侠,如果不上用上面的方法,我有个方式,您看可以吗?
public class People { 
    public String name;
    public int age;
    People(){
        name = "";
        age = 0;
    }
    public People getPeople(String name){
        //这个是通过人名获得人
          People p = new People();
        //去数据库里查人名,得到人的属性,然后赋值
          p.name = "数据库中的人名";
        ......
        //最后返回这个人
          return p;
    }
}
--------------------编程问答-------------------- 你这个是一楼所说的“通过类的static方法获得实例”差不多,只是一楼的写法更符合面向对象的封装性等原则而已
引用 4 楼  的回复:
大侠,如果不上用上面的方法,我有个方式,您看可以吗?
public class People { 
    public String name;
    public int age;
    People(){
        name = "";
        age = 0;
    }
    public People getPeople(String name){……
--------------------编程问答-------------------- 可以的,个人觉得这个构造函数没什么意义 --------------------编程问答-------------------- 可以!这就是多例那种方式的一种比较具体的应用了! --------------------编程问答-------------------- 哦,那各位大侠,如果上面的GG发的实例,如果我想增加一个获得人员的方法,比如传递进去一个人名,获取人的实例,怎么写呢?伪码或者注释就可以了。 --------------------编程问答--------------------

public staitc People getByName(String name){
 People p = new People();
 p.name = name;
 return p;
}


是要这个吗? --------------------编程问答--------------------
引用 9 楼  的回复:
Java code

public staitc People getByName(String name){
 People p = new People();
 p.name = name;
 return p;
}



是要这个吗?


+1 --------------------编程问答-------------------- 继续提问,呵呵,如果不加static,会有什么问题?我对static不甚了解,只知道他是用来声明静态变量或方法的,用它声明后,就无法修改,还有其他的意义吗? --------------------编程问答-------------------- 继续提问,呵呵,如果不加static,会有什么问题?我对static不甚了解,只知道他是用来声明静态变量或方法的,用它声明后,就无法修改,还有其他的意义吗? --------------------编程问答-------------------- 1楼正解,其实不必纠结 --------------------编程问答-------------------- 继续提问,呵呵,如果不加static,会有什么问题?我对static不甚了解,只知道他是用来声明静态变量或方法的,用它声明后,就无法修改,还有其他的意义吗? --------------------编程问答-------------------- 参考下·设计模式的单例模式·· --------------------编程问答--------------------
引用 14 楼  的回复:
继续提问,呵呵,如果不加static,会有什么问题?我对static不甚了解,只知道他是用来声明静态变量或方法的,用它声明后,就无法修改,还有其他的意义吗?


不加static,就不是静态函数而是成员函数,也就意味着只能先new这个对象,才能调用。所以是否需要static关键还在于函数是用来干什么的,是需求和设计所决定的。


此外,用static声明的成员变量,不存在无法修改的说法,这个理解有偏差;不可修改是 final 。
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,