static关键字
- 静态的意思,可以修饰成员变量和成员方法
- 修饰成员变量表示该变量只在内存中存储一份,可以被共享访问、修改
- 静态访问只能访问静态成员,不能直接访问实例成员
- 实例方法可以访问静态成员,也可以访问实例成员
- 静态方法中不能出this关键字
// 静态成员变量
public class StaticDemo1 {
public static void main(String[] args) {
// 访问静态成员变量1
System.out.println(User.onlineNumber);
// 访问静态成员变量2, 不推荐
User u = new User();
System.out.println(u.onlineNumber);
// 访问实例成员变量
System.out.println(u.age);
}
}
class User {
public static int onlineNumber = 100;
public int age = 18; // 一般用private修饰
}
-----------------------------------------------------------------------
// 静态成员方法
public class StaticDemo2 {
private String name;
// 静态成员方法
public static void getAge(int a) {
System.out.println(a);
}
// 实例成员方法
public void getName() {
System.out.println(name);
}
public static void main(String[] args) {
// 类名. 访问静态成员方法
StaticDemo2.getAge(10);
// 同一类中直接静态成员方法名访问
getAge(11);
// 实例成员方法访问
StaticDemo2 s = new StaticDemo2();
s.name = "实例成员方法访问";
s.getName();
}
}
代码块
- 在类下,使用{}括起来的代码被称为代码块
- 静态代码块
① static{}
② 属于类,与类一起优先加载一次,自动触发执行
③ 作用:初始化静态资源
public class StaticDemo3 {
public static String name;
// 静态代码块
static {
System.out.println("触发静态资源");
// 可以用于初始化静态资源
name = "初始化静态资源";
}
public static void main(String[] args) {
System.out.println("main执行");
System.out.println(name);
}
}
- 构造器(实例)代码块
① {},一般不用
② 每次创建对象,调用构造器执行时,都会优先执行该代码块,并在构造器执行前执行
③ 初始化实例资源
public class StaticDemo4 {
public static String name;
// 实例代码块
{
System.out.println("实例代码块执行1");
}
// 无参构造器
public StaticDemo4() {
System.out.println("无参构造器执行2");
}
public static void main(String[] args) {
// 先执行实例代码块 再执行无参构造器
StaticDemo4 s = new StaticDemo4();
}
}
设计模式-单例
- 什么是设计模式:多种解决方案中,最优的方案被认总结出来,称为设计模式
- 单例:只有一个实例
- 饿汉单例
① 在用类获取对象时,对象已经提前创建好了
② 提供可访问对象
/**
* 饿汉单例
*
*/
public class SingleInstance {
// 构造器私有
private SingleInstance() {
}
// 提供访问对象
public static SingleInstance instance = new SingleInstance();
}
- 懒汉单例
① 在真正需要用的时候,才去创建对象
② 提供一个方法,返回一个单例对象
/**
* 懒汉单例
*
*/
public class SingleInstance1 {
// 构造器私有
private SingleInstance1() {
}
// 静态成员变量
private static SingleInstance1 instance;
// 提供方法,返回对象
public static SingleInstance1 getInstance() {
if(instance == null) {
instance = new SingleInstance1();
}
return instance;
}
}