static修饰变量
static关键字表示全局的,静态的,用它修饰的变量称为静态变量
- 静态变量也被称为类变量,静态变量属于类所属,由类来直接调用static修饰的变量,它不需要手动实例化类进行调用。即static关键字只能定义在类的{}中,而不定义在任何方法中。
public class StaticDemo {
private int a=10;
private static int b = 20;
public static void method() {
//以下定义编译报错
// static int i = 10;
System.out.println("method is invoke");
}
}
就算去掉method()中的static也是一样的
static修饰方法
static 方法就是没有this方法,在static内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法,这实际上是static方法的主要用途。
main方法必须是static的,因为程序在执行main方法的时候没有创建任何对象,因此只有通过类名来访问。
- 修饰方法的注意事项
- 常用:不用创建对象,直接
类名.变量/方法
即可访问 - static修饰的方法内部不能调用非静态方法
- 非静态方法内部可以调用static静态方法
- 常用:不用创建对象,直接
public class StaticDemo {
private int a=10;
private static int b = 20;
public static class StaticClass{
public static int c = 30;
public int d = 40;
public static void out1() {
//以下代码会报错,静态内部类不能访问外部类实例成员
// System.out.println("a="+a);
System.out.println("b="+b);
}
public void out2() {
out1();
}
}
public static void staticMethod() {
System.out.println("staticMethod is invoke");
//以下调用编译报错,静态方法不能调用非静态方法
// method2();
}
public void method() {
System.out.println("method is invoke");
staticMethod();
}
public static void main(String[] args) {
StaticDemo.staticMethod();
}
}
static修饰代码块
- 静态游离块(初始化块),静态代码块可以置于类中的任何地方,类中也可以有多个static块,在类初次被加载的时候,会按照static代码块的顺序来执行,每个static修饰的代码块只能执行一次。
- 静态代码块可以用来优化程序执行顺序
static用作静态内部类
- 静态内部类可以包含静态成员,也可以包含非静态成员,但是在非静态内部内中不可以声明静态成员。
- 由于非静态内部类的实例创建需要有外部类对象的引用,所以非静态内部类对象的创建必须依托于外部类的实例;而静态内部类的实例创建只需依托外部类。
- 由于非静态内部类对象持有了外部类对象的引用,因此非静态内部类可以访问外部类的非静态成员;而静态内部类只能访问外部类的静态成员。
- 内部类需要脱离外部类对象来创建实例
- 避免内部类使用过程中出现内存溢出
静态导包
静态导包就是使用import static
用来导入某个类或者某个包中的静态方法或者静态变量。
/**静态导包*/
import static java.lang.Integer.*;
public class StaticTest {
public static void main(String[] args) {
System.out.println(MAX_VALUE);
System.out.println(toHexString(111));
}
}