static关键字
代码示例:
import static org.quartz.JobBuilder.*;
//导入这个类里的静态方法
import static org.quartz.JobBuilder.newJob;
//只导入某个静态方法
public class Outer {
public static String name;//静态变量
public static void sayName(String myName){//静态方法
System.out.println("My name is "+myName);
}
static {//静态代码块
name = "张三";
}
static class Inner{//静态内部类
public void sayMyself(){
System.out.println("我是一个静态内部类");
}
}
}
一:静态变量/静态方法
对于静态变量和静态方法,在不创建该类的对象时,可以直接用类名.静态变量名/类名.静态方法名调用。
二:静态代码块
1.执行时机
静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行。后面在比较的时候会通过具体实例来证明。
一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。
这个应该很好理解,首先我们要明确静态代码块是在类加载的时候就要运行了。我们分情况讨论:
对于普通方法,由于普通方法是通过加载类,然后new出实例化对象,通过对象才能运行这个方法,而静态代码块只需要加载类之后就能运行了。
对于静态方法,在类加载的时候,静态方法也已经加载了,但是我们必须要通过类名或者对象名才能访问,也就是说相比于静态代码块,静态代码块是主动运行的,而静态方法是被动运行的。
不管是哪种方法,我们需要明确静态代码块的存在在类加载的时候就自动运行了,而放在不管是普通方法还是静态方法中,都是不能自动运行的。
这个理解思维同上,普通变量只能通过对象来调用,是不能放在静态代码块中的。
三:静态内部类
1.创建静态内部类的时候是不需要讲静态内部类的实例对象绑定到外部类的实例对象上。
2.静态内部类属于外部类,而不是属于外部类的对象。
3.只能访问外部类的静态成员变量或者静态方法。
4.生成静态内部类对象的方式:Outer.Inner inner = new Outer.Inner()。
5.会生成两个.class文件,一个是外部的类Outer.class , 另一个是 Outer$Inner.class
四:静态导包
1.静态导包就是java包的静态导入,用import static代替import静态导入包是JDK1.5中的新特性。
一般我们导入一个类都用 import com…..ClassName;而静态导入是这样:import static com…..ClassName.*;这里的多了个static,还有就是类名ClassName后面多了个.* ,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把 .* 换成静态方法名就行了。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名 的方式来调用。
好处:这种方法的好处就是可以简化一些操作,例如打印操作System.out.println(…);就可以将其写入一个静态方法print(…),在使用时直接print(…)就可以了。但是这种方法建议在有很多重复调用的时候使用,如果仅有一到两次调用,不如直接写来的方便。
2.只能用于静态方法,不能用于静态变量。
参考网址:
https://www.cnblogs.com/ysocean/p/8194428.html#_label0
https://blog.csdn.net/jiao_zg/article/details/79745628