/*
单例设计 单例设计 意思new的对象只在内存中存在一个 再次调用更改数据 是在同一个对象中更改
*/
import java.util.Scanner;
class Demo_82SingleDemo
{
public static void main(String[] args)
{
Single s=Single.getInstance(); //调用getInstance方法 返回一个Single对象
Single s1=Single.getInstance(); //再次调用的时候还是 上次创建的那个对象 Single对象只存在一个 因为只创建了一个
s1.setAge(111);
System.out.println(s.getAge());
System.out.println(s1.getAge());
Demo_82SingleDemo d=new Demo_82SingleDemo();
d.run();
}
public void run(){
System.out.println("静态方法不能调用非静态方法的原因是因为 静态随着类加载到内存存在,这时候还有有对象 也就没有非静态方法这些对象的特有属性和函数存在");
System.out.println("在静态方法调用非静态方法的时候必须先创建对象, 对象存在对象中的方法肯定存在");
}
}
class Single
{
private int age; //成员变量一般都是私有化进行封装
private Single(){} //私有化了构造函数 使对象不能在类外面创建
private static Single s=new Single(); //在类中创建一个对象 在返回本对象 在类外调用的时候 使用的永远是这个对象
public static Single getInstance(){
return s;
}
public void setAge(int a){
this.age=a;
}
public int getAge(){
System.out.println(age);
return age;
}
}
/*class SingleDemo{
private static SingleDemo s=new SingleDemo(); //创建一个对象 加static的原因 是因为构造函数已经被私有化 在类外不能出创建对象
private SingleDemo(){};
public static SingleDemo getInstance(){ //构造函数已经被私有 所以不能再创建对象 通过对象访问 只能通过类名访问
return s; //类名访问只能是静态函数 而静态函数中的成员也必须是静态 所有123行都要加静态
}
}
这个是饿汉式单例设计*/
class SingeDemo {
private static SingleDemo s=null;
private SingleDemo (){}
public static SingleDemo getInstance(){
if(s==null){
s=new SingleDemo(); //延迟加载 创建对象
return s;
}
}
} |
|