分为两个类,一个是学生类,另一个是main类
学生类
package cn.campsg.java.experiment;
public class Student {
private String name;
private int age;
private static Student s = null; //这里设置为静态变量,并且是私有类型的,设置初始为null,说明没有产生对象
private Student(String name,int age){ //同时这里构造函数是私有的,只有在本类中才能进行调用
this.name = name;
this.age = age;
}
//静态方法调用的只能是静态的
public static Student getInstence(String name,int age) //这里也定义是静态的,是公共的
{
//如果类内静态对象是null,说明并没有初始分配,所有要配置对象
if(s == null){
s = new Student(name,age);
return s;
}
else
return s; //如果是原本类内存在,则就返回类内的,不能创建新的对象
}
//这个也是公共的,允许输出姓名及年龄
public void getInfo(){
System.out.println("姓名:"+this.name+" 年龄:"+this.age);
}
}
main类:
package cn.campsg.java.experiment;
public class MainClass {
//注意java中的main函数必须是静态的
public static void main(String[] args){
Student s = Student.getInstence("小王", 15); //首先进行初始值
s.getInfo();
Student s1 = Student.getInstence("小li", 16); //此时再创建的时候,类内原本就有一个静态,所以无法重新创建一个新的对象
s1.getInfo();
}
}
运行结果:
这里我们看到最后都打印出了相同的姓名和年龄,
1.是因为在类内有一个静态的对象,并且在其中给构造函数进行私有属性。
2.使我们只能通过其中的公共函数接口来进行创建对象,此时会判断是否之前存在着类对象,存在即返回之前创建的,不存在的话进行初始化创建。
注意这里面先创建一个对象为null,这个对象为static是静态的,限制构造函数为私有的,使接口为static的用来判断是否创建新的对象,并且返回该对象