Java中的static
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的static相关的知识,希望对你有一定的参考价值。
static表示静态的意思。
static关键字可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类。
(1)静态成员(与对象无关,与类有关)
成员使用static修饰----类成员(全局变量)。所有对象共同使用唯一一份静态的成员变量。(一般将常量使用static修饰)
如果一个成员变量是static的,那么可以通过:类名.成员变量名的形式使用。(也可以用变量名.成员变量名的形式,但是使用类名更好一些)。
例:private static final int A = 10;(在实例化多个对象的时候,就只需在数据段的静态区划分一个A的存放空间)
(2)静态方法(一般用于工具类的工具方法------Math中的方法(类产不产对象对使用者无影响,使用者只用其方法))
static修饰的方法称为静态方法。
静态方法可以使用类名.方法名的方式来访问。
静态方法只能继承,不能重写。
static 的方法不能操作非static 的任何属性与行为。
多态调用时,静态方法属于一种特殊情况,父类的引用指向子类的对象,调用静态方法时,调用的仍是父类中的版本。因为子类不能覆写父类的静态方法。如果子类和父类中定义了同样的静态方法,起到的仅仅是隐藏的作用。
静态方法只能访问静态的成员变量,因为非静态的成员与特定的对象相关联,而静态方法并不能明确是哪个对象。
但是非静态的方法静态非静态的成员都可以访问。
不能在静态方法中使用this关键字。
(3)static代码块
静态代码块:
static
{
//内容
}
静态代码块的作用一般是完成一些初始化工作。
静态代码块在类被加载的时候执行。要想调用某个类来生成对象,首先需要将类加载到Java虚拟机(JVM)上,然后用JVM加载这个类来生成对象。
因为每个类只会被加载一次,所以静态代码块也只会被执行一次。而构造方法是在生成对象的时候被执行,每次生成对象都会调用构造方法--------不用static修饰构造方法。
如果继承体系中有静态代码块,那么首先执行最顶层的类的静态代码块,一直执行到最底层的类的静态代码块;然后再去执行最顶层的类的构造方法,一直执行到最底层的类的构造方法。注意,静态代码只会执行一次。
如果有多个static代码块,JVM将按照它们在类中出现的顺序依次执行它们。
补充说明一下:如果有非静态的初始化语句,这些语句将在构造方法之前执行。
例:public class Father {
{
System.out.println("父类实例化");
}
static{
System.out.println("父类静态");
}
public Father(){
System.out.println("父类构造");
}
}
public class Son extends Father{
{
System.out.println("子类实例化");
}
static{
System.out.println("子类静态");
}
public Son(){
System.out.println("子类构造");
}
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Son w = new Son();
Father f = new Father();
System.out.println();
}
}
运行结果:
父类静态
子类静态
父类实例化
父类构造
子类实例化
子类构造
父类实例化
父类构造
(4)静态内部类:
静态内部类是成员内部类的一特例。
可以有访问修饰符,class文件的文件名:外部类类名$内部类类名.class。
在本类的任意方法中都可以实例化出来,在第三方类中要new出来,无需产生外部对象,只需用"外部类类名."的方式访问
以上是关于Java中的static的主要内容,如果未能解决你的问题,请参考以下文章