一、static关键字
1、是静态的意思,可以修饰成员变量和成员方法。
2、static修饰成员变量的分类:静态成员变量、实例成员变量。
(1)静态成员变量:有static修饰,属于类,与类一起加载,内存中只有一份,可以被共享访问。如果信息要被共享,只需要一份就行,比如:系统在线人数。
访问规则:建议用类名访问,即类名.静态成员变量,而且在同一个类中,访问静态成员变量类名可省略。理论上也可以用对象名.静态成员变量来访问(不推荐)
(2)实例成员变量:无static修饰,属于对象,每个对象中都存在一份实例成员变量,比如:name,age等。在每个对象中都有这些信息而且这类信息还不同时,应定义实例成员变量。
访问规则:只能用对象名.实例成员变量来访问。
3、static修饰成员方法
(1)静态成员方法:有static修饰,属于类,与类一起加载,可以被共享访问。同一个类中,访问静态方法类名可以省略不写,理论上也可用对象名.静态成员方法来访问(不推荐)
(2)实例成员方法:无static修饰,属于对象,必须用对象触发访问。如果这个方法属于对象,而且要直接访问对象的实例成员对象,则申明成实例方法。
访问规则:只能用对象名.实例成员变量来访问。
4.static应用知识
(1)工具类:里面都是静态方法,为了完成一个共用的功能
好处:一次编写,处处可调用提高代码的复用和开发的效率。
注意:建议把工具类的构造器私有化,因为工具类无需对外创建对象,它的方法都是静态方法,直接用类名访问即可。
(2)代码块:是类的五大成分(成员变量、成员方法、构造器、代码块、内部类)
分为静态代码块和实例代码块。
静态代码块:
格式:static{}
特点:属于类,与类一起优先加载,自动触发执行一次
作用·:可以用于在程序启动时,进行静态资源的初始化操作
实例代码块(几乎不用):
格式:{}
特点:属于对象的,每次调用构造器构建对象前都会执行一次,再执行构造器
作用:可用于初始化实例资源
(3)单例:是一种设计模式,为了解决某个问题。保证一个类对外只能产生一个对象
分类:饿汉单例,懒汉单例
饿汉单例:特点:拿对象时,对象已经存在
实现步骤:1、构造器私有 ;2、定义静态成员变量存储一个对象
代码:
/**
使用饿汉单例实现单例类
*/
public class SingleInstance {
/**
2、饿汉单例是在获取对象前,对象已经提前准备好了一个,
这个对象只能是一个,所以定义静态成员变量
*/
public static SingleInstance instance=new SingleInstance();
/**
1、把构造器私有化
*/
private SingleInstance(){
}
}
懒汉单例:特点:要拿对象时,才开始创建一个对象
实现步骤:1、构造器私有;2、定义静态成员变量,暂时不存对象。
代码
/**
懒汉单例
*/
public class SingleInstance {
/**
2、定义一个静态成员变量负责存储一个对象。
之家再一次,只有一份。
注意:最好私有化,可以避免给别人挖坑
*/
private static SingleInstance instance;
/**
3、提供一个方法,对外返回单例对象
*/
public static SingleInstance getInstance(){
if (instance==null){
//第一次来拿对象:此时需要创建对象。
instance=new SingleInstance();
}
return instance;
}
/**
1、把构造器私有化
*/
private SingleInstance(){
}
}