static关键字表示静态的,用于修饰成员变量、成员方法、代码块
静态变量
- static修饰的成员变量,叫静态变量,或者类变量
- 被static修饰的变量,被类中所有对象共享
- 不能修饰局部变量
- 类变量也称为静态变量,在类中以static关键字声明,但必须在方法构造方法和语句块之外。
- 无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
- 静态变量除了被声明为常量外很少使用。常量是指声明为public/private,final和static类型的变量。常量初始化后不可改变。
- 静态变量储存在静态存储区。经常被声明为常量,很少单独使用static声明变量。
- 静态变量在第一次被访问时创建,在程序结束时销毁。
- 与实例变量具有相似的可见性。但为了对类的使用者可见,大多数静态变量声明为public类型。
- 默认值和实例变量相似。数值型变量默认值是0,布尔型默认值是false,引用类型默认值是null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
- 静态变量可以通过:ClassName.VariableName的方式访问。
- 类变量被声明为public static final类型时,类变量名称一般建议使用大写字母。如果静态变量不是public和final类型,其命名方式与实例变量以及局部变量的命名方式一致。
静态方法
- 使用static修饰的成员方法,称为静态方法,不需要创建实例,就可以调用静态方法
- 工具类会这么用,不需要创建对象,用起来方便
修饰代码块
代码块指的是大括号括起来的一段代码 {}
- 普通代码块
package com.xdl.java.pkg06;
public class TestCodeBlock1 {
public static void main(String[] args) {
// 定义普通代码块
{
// 局部变量
int x = 100;
System.out.println("普通代码块x=" + x);
}
int x = 10;
System.out.println("代码块作用域之外x=" + x);
}
}
- 构造代码块
package com.xdl.java.pkg06;
public class Person3 {
//构造方法
public Person3(){
System.out.println("构造方法执行了");
}
{
System.out.println("构造代码块");
}
//静态代码块
static{
System.out.println("静态代码块");
}
}
package com.xdl.java.pkg06;
public class TestPerson3 {
public static void main(String[] args) {
new Person3();
new Person3();
new Person3();
}
}
- 静态代码块(只运行一次,最先运行,一般用于加载资源,例如JDBC加载mysql驱动)
单例模式
- 在一个类的程序运行期间,有且只有一个实例
- 私有的构造方法,构造必须是私有的
package com.xdl.java.pkg06;
public class Single {
// 创建一个静态私有对象
private static Single INSTANCE = new Single();
// 私有的构造方法,构造必须是私有的
private Single() {
}
// 返回静态私有对象
public static Single getInstance() {
return INSTANCE;
}
}
package com.xdl.java.pkg06;
public class TestSingle {
public static void main(String[] args) {
Single s1 = Single.getInstance();
Single s2 = Single.getInstance();
// 比较
System.out.println(s1 == s2);
}
}
结果:true