黑马程序员_静态及单例设计模式

---------------------android培训java培训、java学习型技术博客、期待与您交流! -------------------

static可以用来修饰变量、方法和代码块,变量在前一天的总结中已经写了,这里说下static方法、代码块和单态设计模式。

1、static方法也称为静态方法

作用:使该方法独立于类的示例,使用类去访问,而不是类示例,所以也叫类方法。

具有如下特点:

a、只能访问其它的静态成员,不能访问非静态的成员。

b、静态方法没有this关键字。

c、静态方法不能被覆盖(重写)非静态方法。

如下面的例子所示:

public class Demo {
	public static void main(String[] args){
	Static s = new Static();
	s.speak();
	}
}

class Static {
	String name = "jack";
	static int age = 20;

	public static void speak(){
		System.out.println(age);
		System.out.println(name);//编译出错,无法从静态上下文引用非静态,因为这里有访问到了成员变量中的非静态属性
	}

}

从上面这个例子可以看出,静态方法无法访问非静态成员,在编程时,需要注意此类事项。

2、静态代码块

静态代码块优先于构造函数和主函数运行,随着类的加载而加载,只运行一次。

public class Demo {
	static{
		System.out.println("这是第一个静态代码块");
	}
	public static void main(String[] args){
		System.out.println("这是主函数");
		Static s = new Static();
	}
}

class Static {
	static{
		System.out.println("这是一个静态代码块");
	}
	Static(){
		System.out.println("这是一个构造函数");
	}
	}

上面这段代码输出的结果为:

这是第一个静态代码块
这是主函数
这是一个构造代码块
这是一个构造函数

从结果可以看到,静态代码块优先于主函数执行,执行完之后再执行主函数,创建对象之后,也是先执行静态代码块之后,才执行的构造函数。

3、单态设计模式

有三种方法,分别如下:

a、饿汉式

class Single {
	private Single(){}		//私有构造函数
	private static Single s = new Single();	//建立本类对象
	public static Single getInstance(){		//提供公共访问方式
		return s;
	}
}

b、懒汉式(延迟单例加载模式)

class Single {
	private Single(){}	//私有化构造函数
	private static Single s = null;	//建立本类对象引用,但是没有创建对象
	public static Single getInstance(){	//提供公共访问方式
		if ( s == null){		//进行判断
			s = new Single();	//创建对象,并指向s
		}
		return s;			//返回值
	}
	}
}

这种方法,只有在调用时,才会创建对象,节省内存空间。

前面那种在开发过程中用的较多,第二种方式,用的较少,只会在面试过程中出现,因为有其不足之处,特别是在多线程中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值