以一个User类来进行举例,说明对象的不同创造方法。
格式:以类名作为方法的名字。
每一个类都具有一个隐藏的空参数构造方法,在显式的写了构造方法之后会被覆盖掉。
构造方法是:创建对象时调用的(对于每个对象,构造方法只能执行一次)构造方法也可以自己添加参数,在创建对象的时候直接将参数进行初始化。
可以通过set,get,is等方法进行初始化。
如:
public class User { private String name; private int age; private String id; private String phonenum; public User(String name, int age, String id, String phonenum) { this.name = name; this.age = age; this.id = id; this.phonenum = phonenum; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPhonenum() { return phonenum; } public void setPhonenum(String phonenum) { this.phonenum = phonenum; } public static void main(String[] args) { User u1 = new User("Luke",18,"1004245547","1383838438"); System.out.println("u1的name: "+u1.getName()); System.out.println("u1的age: "+u1.getAge()); System.out.println("u1的id: "+u1.getId()); System.out.println("u1的phonenum: "+u1.getPhonenum()); } }
此方法是预先准备好一个user对象并且是整个类唯一的对象(因为由Static来修饰,Static代表唯一的,静态的,属于类的层级,也就是说现在此种方法下整个User类中只有一个对象就是u1),但是这种方法具有缺陷,当我们预先准备好一个静态对象的时候,此对象的创建本身就占用了内存,而我们并不确定一定会将其使用,所有很多情况下,是没有必要使用这种方法的。
public class User { private String name; private int age; private String id; private String phonenum; public User(String name, int age, String id, String phonenum) { this.name = name; this.age = age; this.id = id; this.phonenum = phonenum; } private static User u1 = new User("chuanchuan",22,"1004245563","13784675648"); public static User getUser(){ return u1; } public static void main(String[] args) { System.out.println("u1的name: "+getUser().name); System.out.println("u1的age: "+getUser().age); System.out.println("u1的id: "+getUser().id); System.out.println("u1的phonenum: "+getUser().phonenum); } }
以下方法的使用弥补了第二种方法的缺陷:我们可以提前定义出一个u1对象,如果当我们需要使用此对象的时候可以选择执行getUser()方法,此方法的执行可以帮我们创建u1对象并将其return。
public class User { private String name; private int age; private String id; private String phonenum; public User(String name, int age, String id, String phonenum) { this.name = name; this.age = age; this.id = id; this.phonenum = phonenum; } private static User u1; public static User getUser(){ u1 = new User("chuanchuan",22,"1004246555","15847263344"); return u1; } public static void main(String[] args) { System.out.println("u1的name: "+getUser().name); System.out.println("u1的age: "+getUser().age); System.out.println("u1的id: "+getUser().id); System.out.println("u1的phonenum: "+getUser().phonenum); } }
注:以上两种方法都属于单例模式
以下方法的特点是:由类自己来完成对象的创建,包括将参数初始化(不属于单例模式)
public class User { private String name; private int age; private String id; private String phonenum; public User(String name, int age, String id, String phonenum) { this.name = name; this.age = age; this.id = id; this.phonenum = phonenum; } public static User getUserInStance(){ return new User("user",18,"1254759","135987"); } public static void main(String[] args) { System.out.println("u1的name: "+getUserInStance().name); System.out.println("u1的age: "+getUserInStance().age); System.out.println("u1的id: "+getUserInStance().id); System.out.println("u1的phonenum: "+getUserInStance().phonenum); } }