static关键字及单例模式
用static修饰的属性、方法是属于类本身的,可以直接通过
调用。类名.属性
`或
`类名.方法
类属性作为该类各个对象之间共享的变量。 在设计类时, 分析哪些属性不因对象的不同而改变 ,将这些属性设置为类属性。相应的方法设置为类方法。
如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法 ,从而简化了方法的调用。
关于静态方法,有几个注意点:
- 静态方法体中,不可以使用this、super
- 静态方法不能被重写
- 在静态方法中,只能访问静态属性和静态方法,不能够访问非静态方法和非静态属性
static的应用——单例模式
在java中,因为可以直接new一个对象赋值给属性,所以和php相比,java的单例模式分为了两种:饿汉式(PHP没有)、懒汉式
// 饿汉式
class Db
{
static Db instance = new Db();
private Db () {}
static Db getInstance ()
{
return instance;
}
}
为什么称为饿汉式,因为它太饿了,上来就new。
// 懒汉式
class Db
{
static Db instance = null;
private Db () {
// ...
}
static Db getInstance ()
{
if (instance == null) {
instance = new Db();
}
return instance;
}
}