Java(三)

static

所有static修饰的数据,正规的访问方式是:类名.

static修饰的变量叫做静态变量
static修饰的方法叫做静态方法

什么情况下声明成静态变量?
所有的对象都有这个特征,并且这个特征所对应的值都是相同的。
没必要声明成成员变量,因为浪费内存。
应该声明成静态变量,在方法区中只存储一份,让所有的对象共享这一份数据。

多数的工具类中的方法都是静态的,目的是方便调用。

static修饰的数据被称作“静态的”

使用static关键字可以定义静态代码块。

静态代码块在类加载阶段执行,并且只执行一次,是自上而下的顺序依次执行。

实例代码块

每调用一次构造方法,则实例代码块就会执行一次。
实例代码块在构造方法调用之前执行。

实例代码块也是自上而下的顺序执行。

单例模式:

单例模式的特点/主要解决的问题:保证JVM中该类型的java对象只有一个

优点:节省内存

缺点:单例模式中因为构造方法私有化,所以单例模式无法被继承。因为在子类构造对象的时候必须使用父类中的构造方法。

//饿汉式单例模式(在类加载阶段对象已经创建。)
public class Customer{

	//静态变量
	private static Customer c = new Customer();
  	
  	//单例模式第一步:将所有的构造方法私有化。
  	//目的是:让外部程序不能直接调用构造方法创建对象。
  	//因为只要构造方法执行,就会有一个新对象诞生。
  	private Customer(){}
  	
  	//对外提供一个公开的获取Customer类型对象的方法。
  	public static Customer getInstance(){
  		return c;
  	}
  	  	
}
//懒汉式单例模式
public class Customer{

	//静态变量
	private static Customer c;
  	
  	//单例模式第一步:将所有的构造方法私有化。
  	//目的是:让外部程序不能直接调用构造方法创建对象。
  	//因为只要构造方法执行,就会有一个新对象诞生。
  	private Customer(){}
  	
  	//对外提供一个公开的获取Customer类型对象的方法。
  	public static Customer getInstance(){
  		if(c==null){
  			c = new Customer();
  		}
  		return c;
  	}
}

main方法调用

class T{
	
	public static void main(String[] args){
		
		//Customer c = new Customer();
		
		Customer c1 = Customer.getInstance();
		Customer c2 = Customer.getInstance();
		
		System.out.println(c1==c2);
		
		
	}
}

  

  

  

原文地址:https://www.cnblogs.com/xiaowei89426/p/5718352.html