Java学习day18-单例(Singleton)设计模式和理解main方法的语法

一、什么是单例设计模式

  设计模式就是在大量的实践中总结和理论化优选的代码结构、编程风格、以及解决问题的思考方式。简而言之,就是在实际编程中,总结出的一些解决问题的套路。

  单例指只有一个实例。

  而所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在虚拟机中只能产生一个对象,我们首先必须将类的构造方法的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍然可以产生该类的对象。因为在类的外部开始还无法得到类的对象,只能调用该类的某个静态方法以返回类内部创建的对象,静态方法只能访问类中的静态成员变量,所以,指向类内部产生的该类对象的变量也必须定义成静态的。

二、单例设计模式-饿汉式

package day14;
/**
 * 饿汉式的单例模式
 * 
 * */
public class Single {
//    public Single(){
//        //假设构造中要执行1000行代码,要占用很大的资源,耗时很长(10s)
//        //每一次new Single对象需要10s,运行1000行代码
//        //像这种情况,就适合使用单例模式,只new一次对象,以后一直就使用这个对象
//    }
    
    
    //先做私有的构造,构造方法私有化,调用这个类的人就不能直接使用new来创建对象
    private Single(){
        
        
    }
    
    //私有的Single类型的类变量
    private static Single single = new Single();//single是私有的类变量,在整个代码运行中只有一份,因此new Single()只new了一次,赋给了single对象
    
    public static Single getInstance(){//不管调用多少次getInstance方法,都返回给single对象
        return single;
    }
}
package day14;

public class Test {
    public static void main(String[] args){
        Single s = Single.getInstance();
        Single s1 = Single.getInstance();
        Single s2 = Single.getInstance();
        Single s3 = Single.getInstance();
        Single s4 = Single.getInstance();//不管调用多少次getInstance方法,都返回给single对象
        
    }
}

三、单例设计模式-懒汉式.

  最开始,对象是null,直到有第一个人调用我,才new一个对象,之后所有调用我的都用这个对象。

package day14;
/**
 * 懒汉式的单例模式
 * 
 * */
public class Single1 {
    //1.先私有化构造方法,让外部不能直接new对象
    private Single1(){
        
    } 
    
    //2.先声明类的引用
    private static Single1 s1 = null;//此处需要配合static方法,用static修饰此类的引用
    
    //3.设置公共的方法来访问类的实例
    public static Single1 getInstance(){
        if(s1 == null){
            s1 = new Single1();//3.1如果类的实例未创建,那么要先创建,然后返回给调用者:本类。
        }
        
        return s1;//3.2若有了类的实例,直接返回给调用者。
    }
}
package day14;

public class Test {
    public static void main(String[] args){
                Single1 s = Single1.getInstance();//s指向s1,s1本来是null,第一次调用getInstance()方法后,s1变成了new Single1()
        Single1 s1 = Single1.getInstance();//而s1-s4也都指向s1,s1此时已经变成new Single()对象,因此if语句不执行了,直接返回s1。
        Single1 s2 = Single1.getInstance();
        Single1 s3 = Single1.getInstance();
        Single1 s4 = Single1.getInstance();
        
    }
}

总结:单例模式,就是软件运行有且仅有一个实例化对象,也就意味着只会new一次。

  而懒汉式和饿汉式的区别就是什么时候new这个对象:

  懒汉式,是在第一次有人调用getInstance()方法时来new对象,以后再有人调用getInstance()方法直接就返回第一次new好的对象。

  饿汉式,是在类加载之后,还没有人调用的时候,就先new好一个对象,以后不论谁来调用getInstance()方法,都是直接返回之前new好的那个对象。

四、理解main方法的语法

  public static void main(String[] args){}

  由于Java虚拟机需要调用类的main()方法,所以该方法的访问权限必须是public。又因为Java虚拟机在执行main()方法时不必创建对象,所以该方法必须是static的,可以用类名.方法直接调用。因为没有返回值,所以用void。而main是方法名。(String[] args)是形参,main方法接收一个String类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数。

  使用cmd运行来理解:

public class TestMain {
    public static void main(String[] args){
        for(int i = 0; i<args.length; i++){
            System.out.println(args[i]);
        }
    }
}

放到cmd中运行并添加参数,结果为:

猜你喜欢

转载自www.cnblogs.com/su-peng/p/12516237.html