static 关键字
static可以修饰类(内部类),成员变量,方法
局部变量不能用static修饰
static修饰成员变量
static修饰的成员变量称为静态成员变量,没有使用static修饰的变量叫做实例成员变量
静态成员变量与实例成员变量的区别
1.从变量的个数上讲
静态成员变量归整个类所有,由所有的对象所共享
改变了静态成员变量的值,其他对象调用的结果是修改后的结果,影响其他对象。
实例成员变量归当前对象所有,值的改变不影响其他对象。
2.访问方式
静态成员变量的推荐访问方式,通过类名.静态成员变量的方式访问。
3.初始化时间
类初始化的时候静态成员变量初始化,实例成员变量在创建对象时才会初始化,静态成员
变量初始化早于实例成员变量,静态成员变量不依赖对象而存在。
static修饰方法
使用static修饰的方法称为静态方法
没有使用static修饰的方法称为实例方法
1.从访问方式上讲
静态方法既可以通过类名来访问也可以通过指向对象的引用来访问(不推荐)
2.成员的访问
静态方法只能访问类中的静态成员,不能访问实例成员
实例方法既可以访问静态成员,也可以访问实例成员
3.this和super的使用
静态方法中不能使用this与super。
而实例方法中可以使用this与super。
public class Static {
//静态成员变量
static int x=1;
//实例成员变量
int y = 2;
public void method(){}
public static void method1(){}
public static void main(String[] args) {
Static s = new Static();
Static s2 = new Static();
s.y=3;
System.out.println("y的值:"+s2.y);
s.x=3;
System.out.println("x的值:"+s2.x);
//实例方法的调用
s.method();
//静态方法的调用
s.method1();
Static.method1();
method1();
}
}
y的值:2
x的值:3
静态成员变量的初始化
1.声明处初始化
2.使用静态初始化块
3.两种初始化执行顺序,按代码编写顺序执行
不能在构造器中对静态成员变量进行初始化,因为构造器在创建
对象的时候才会得到执行。而静态成员变量不需要创建任何对象
就能够进行访问。
public class StaticInit {
//声明处初始化
static int x=getX();
//静态初始化块
//静态初始化块会在初始化类时得到执行(在main方法执行之前执行)
static{
x = 2;
System.out.println("静态初始化块");
}
public static int getX(){
System.out.println("声明处初始化");
return 5;
}
public static void main(String[] args) {
System.out.println("main方法");
}
}
声明处初始化
静态初始化块
main方法