zoukankan      html  css  js  c++  java
  • java day07第七课静态的和单例设计模式

    静态的(static)和单例模式

    main函数

    主函数是一个特殊的函数,作为程序的入口,可以被jvm调用
    

    主函数的定义

    public 表示该函数的访问权限是最大的。
    static 代表主函数随着类的加载就已经存在了。
    void 主函数没有具体的返回值。
    main 不是关键字,但是是一个特殊的单词,但是可以被jvm识别。
    参数(String[] args) 参数的类型是一个数组,该数组的元素师String。
    args 参数名,所以可以改,args 全称arguments。
    主函数是固定格式的,为了使jvm识别。
    jvm在调用主函数,传入的是new String[0].我们也可以传入给定的值。
    错误演示:
    public static void main(int a) {
    
    System.out.println("Hello World!");
    
    }
    
    public static void main(String[] args,int a) {
    
    System.out.println("Hello World!");
    
    }
    

    静态什么时候使用

    静态修饰的内容有成员变量和成员函数。
    什么时候定义静态变量呢?

    当对象中出现共享数据时。(例子:人名是我们共享的属性,而不是共享数据)该数据被静态所修饰。对象中的特有数据要定义成非静态存在于内存中
    

    什么时候定义静态函数呢?

    当功能内部没有访问到非静态数据(对象的特有数据),那么该功能可以定义成静态的。
    class Person{
    
    	String name;
    	public static void run(){
    		System.out.println("我是谁?");
    	}
    }
    class Test{
    public static void main(String[] args) {
    	Person p = new Person();
    	p.run();/*我们没有用到对象的属性,没必要通过对象来调用方法,我们可以直接使用:Person.run(),所以必须加上static,如果我们要加上System.out.println(name+"我是谁?");这个时候我们就不能用static。*/
    	
    
    }
    

    静态代码块

    格式:
    static{
    
    静态代码块中执行的语句
    }
    

    特点

    随着类的加载而执行,只执行一次。一般用于给类的初始化
    

    练习:
    静态代码块,构造代码块,构造方法执行顺序?

    单例设计模式

    解决某一类问题最行之有效的方法。java 中一共有二十三种设计模式。

    单例设计模式:

    先初始化对象称之为饿汉式子。
    解决一个类在内存中只存在一个对象。
    class Single(){
    	private Single(){
    	
    	}
    	Single ss = new Single();
    	public Single getSingle(){
    	
    		return ss;
    	}
    	
    }
    
    class Demo(){
    	 public static void main(String[] args) {
    	 //new Single();
    	 //new Single();
    	 /* 想要保证对象的唯一:
    	   1、为了避免其他程序过多建立该类对象,先禁止其他程序建立该类对象。
    	   2、为了让其他程序可以访问到该类程序,只好在本类中自定义一个对象。
    	   3、为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式。*/
    	 
    	 }
    
    }
    

    实现:

      1、构造函数私有化;
      2、在类中创建一个本类对象;
      3、提供一个方法可以获取到该对象;
    

    实现方式二:

    对象是方法被调用时,才初始化,也叫做对象的延时加载,称为:懒汉式
     class Single{
    private static Single s = null;
    private Single(){
    
    }
    public static Single getSingle(){
    	if(s == null){
    		synchronized(Single.class){
    		if(s == null){
    		s = new Single();
    		}
    		}
    	}
    return s;
    }
    

    }

  • 相关阅读:
    蚁群算法(AntColonyOptimization,ACO)与TSP问题
    EASY-X
    扩展欧几里得
    堆,set,优先队列
    单链表的几个基本操作
    剑指offer JZ-20
    剑指offer JZ-19
    拉普拉斯机制下的差分隐私(1)
    剑指offer JZ-17
    剑指offer JZ-16
  • 原文地址:https://www.cnblogs.com/chendujie/p/6804999.html
Copyright © 2011-2022 走看看