java中static详解

static修饰类中的变量

static修饰变量使得该变量有了静态属性,又叫类属性。这个变量会被保存在全局数据区(方法区–所有对象共享的区域)
在调用过程中通过类名调用,无需实例化出对象。
static是不能修饰方法中的变量的。因为方法(无论静态方法还是普通方法)中定义的变量都是局部变量保存在栈区,静态变量需要定义在方法区。所以Java中规定:static修饰的变量不能定义是方法中。
在final修饰变量是之变成常量时建议与static连用,是指称为一个全局常量。不会一个对象定义一个同值常量,浪费空间。主要要在类加载时也就是说利用静态代码块,构造快初始化。

class A{
	static int a;
} 
main{
	A.a = 2;
}

static修饰方法

和static修饰变量类似,static修饰方法也是通过类名调用,同样和对象无关。常见于Array等工具类中。static修饰的方法只能访问同类中的静态变量。因为普通变量依赖与对象产生,而static并不。

class A{
 static void fun(){
 }
} 
main{
 A.a();
}

static修饰成员内部类

static是不能够修饰外部类的,和pivate类似。外部类定义就是为了创建对象的,而static是不依赖与对象的。这就很矛盾了啊。
static也不可以修饰方法内部类,方法中都不能定义静态变量,怎么能定义静态类呢。
成员内部类和方法类似,就是在类中定义了一个类可以访问类外部的成员,如果这个内部类是静态的也就是说被static修饰了,和静态方法类似,只能方法类中的静态成员。
因为内部类被static修饰了,也就意味着这个内部类不依赖与外部类对象的产生而被调用。可以通过类只能生成。
但是和静态方法不同的是,静态内部类中是可以有自己的静态成员的。

class A{
	public static class B{
		static int a=0;
	}
}
main{
	A.B b = new A.B();
}

注意: 因为static修饰的静态无论是类还是方法都是在编译时静态绑定的。而覆写重写这种操作都是运行时动态绑定的所以不可以。而且static修饰是和类绑定的而不是和对象绑定,而多态中的覆写具体是和new出来的对象绑定的。所以,static不接受覆写。

你可能感兴趣的:(java)