版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fighting123678/article/details/82942073
为了控制创建对象的个数,需要收回创建对象的权利,下面想办法设置Teacher为内存中唯一对象,在Text中创建并使用Teacher;
Teacher
package cn.net.sdkd.cise;
public class Teacher {
private Teacher() {//创建对象的权利收回,由类自己提供
}
}
Text
import cn.net.sdkd.cise.Teacher;
public class Text {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Teacher t;//刚开始的时候会报错,所以需要import导入Teacher这个类;
//Teacher t=new Teahcer();//这里会报错是因为在Teacher中Teacher()是私有的,外部无法使用;
}
}
出现以上的情况,无法在Text中创建Teacher对象之后,只能通过Teacher类来访问,而且在Teacher类中需要提供一种方法,并且这种方法必须是public类型的。
Teacher
package cn.net.sdkd.cise;
public class Teacher {
private Teacher() {//创建对象的权利收回,由类自己提供
}
public Teacher getTeacher() {//这个是在Teacher类中提供的一种public方法;
return new Teacher();//自己的类中,可以使用私有成员,但是这样做的每次都返回一个新对象,这样的话,对象的个数又超过了一个;
}
}
上面这样做的话,每次都返回一个新对象,这样的话,对象的个数又超过了一个,所以需要做如下改动;
package cn.net.sdkd.cise;
public class Teacher {
private Teacher t;
private Teacher() {//创建对象的权利收回,由类自己提供
}
public Teacher getTeacher() {//这个是在Teacher类中提供的一种public方法;
if(t==null) {
t = new Teacher();
}
return t;//自己的类中,可以使用私有成员,但是这样做的每次都返回一个新对象,这样的话,对象的个数又超过了一个;
}
}
在Text中,因为无法通过Teacher t=new…来创建对象,所以想通过类直接访问,但是在Teacher中getTeacher() 是一个普通方法,普通方法必须首先要生成对象,但是生成对象也没法生成,所以getTeacher()如果是普通方法的话是没法用的,必须设置为static,这样在Text中才可以通过类直接使用。
package cn.net.sdkd.cise;
public class Teacher {
private static Teacher t;
private Teacher() {//创建对象的权利收回,由类自己提供
}
public static Teacher getTeacher() {//这个是在Teacher类中提供的一种public方法;
if(t==null) {
t = new Teacher();
}
return t;//自己的类中,可以使用私有成员,但是这样做的每次都返回一个新对象,这样的话,对象的个数又超过了一个;
}
}
Text
import cn.net.sdkd.cise.Teacher;
public class Text {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Teacher t1=Teacher.getTeacher();//刚开始的时候会报错,所以需要import导入Teacher这个类;
Teacher t2=Teacher.getTeacher();
if(t1==t2) {
System.out.println("same");
}
}
}
Teacher
package cn.net.sdkd.cise;
public class Teacher {
private static Teacher t;//static类型的,因为在静态方法中使用;
private Teacher() {//创建对象的权利收回,由类自己提供
}
public static Teacher getTeacher() {//这个是在Teacher类中提供的一种public方法;//static类型的,因为需要通过类直接访问;
if(t==null) {
t = new Teacher();
}
return t;
}
}
可以在一个类中新建一个自己类的引用或者是生成一个自己的类,比如上面,在Teacher类中生成了Teacher t,这样是对的,是一种方法。