分为两个类,一个是学生类,另一个是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的用来判断是否创建新的对象,并且返回该对象