Java基础---------Static的简单总结
Static修饰的成员变量:
static修饰的成员变量是其所属类的所有对象共享;
Static修饰的成员变量是随着类的加载就在内存方法区的静态区开辟空间了,优先与非静态;
Static修饰的成员变量既可以通过对象来访问,也可以通过类名访问。
class Test
{
Public static int temp=5;
}
Class Demo
{
Public static void main(String[] args)
{
System.out.println(Test.temp); //输出5
System.out.println(new Test().temp);//输出5
}
}
静态成员变量与非静态成员变量的区别:
存储的数据:非静态成员变量存储的是其所属类每个对象特有属性;静态成员变量存储的是其所属类的所有对象共享属性的数据。
存储的位置:非静态成员变量是随着对象的创建在堆中开辟内存;静态成员变量是随着类的加载在方法区的静态区开辟内存的。
生命周期:非静态成员变量是当其所属的对象被创建时才开辟内存的,对象被垃圾回收时就释放内存了;静态成员变量是随着类的加载在方法区的静态区开辟内存,程序退出时才释放内存。
访问方式:非静态成员变量只能通过对象来访问;静态成员变量即可以通过对象来访问,也可以通过类名直接访问。
Static修饰静态成员函数:
静态函数内部只能使用静态变量,不可以使用非静态变量;
静态函数在加载类时同时被加载到方法区的静态区;
静态函数可以直接通过类名访问。
class Test
{
Public static void show()
{
System.out.println(“hello world!”);
}
}
Class Demo
{
Public static void main(String[] args)
{
Test.show();//输出hello world!
new Test().show();输出hello world!
}
}
静态的应用:
可以运用在工具类,直接类名.方法名调用,如果该工具类不想被实例化,可以让该类的构造函数私有化,就只能同过类名来访问。
静态代码块:随着类的加载就执行,且只执行一次,优先于main函数的执行.
class Test
{
static
{
System.out.println("Hello World!");
}
public void static void main(String[] args)
{
}
} //执行这段代码会输出:Hello World!
静态代码块的作用:可以实现类的初始化。
在继承中,父类的方法如果是静态的,子类重写这个方法也要是静态的;
在内部类中,如果含有静态成员,那么该内部类必须也是静态的;