static关键字
static是什么?
static是静态关键字;
被修饰static的变量和方法分别叫做静态成员和静态方法。
static关键字能用来干什么?
static用于属性时,能做数据的共享;用于将方法时,能帮助更好的封装
被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问。
static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能
总之就是方便在没有创建对象的情况下进行调用(方法/变量)。
如何使用static
在需要静态化的方法和属性前面加上static关键字
public class Test3 {
public static void main(String[] args) {
A.name = "zhangsan";
A.doing();
}
}
class A {
static String name;
static int age;
public static void doing() {
System.out.println(A.name + "正在干活");
}
}
使用static关键字的注意事项
1,被static修饰的方法建议使用类名调用
2,static修饰的方法里面不能使用this关键字
3,被static修饰的属性或方法是随着类加载而存在的。
static方法
static方法也成为静态方法,静态方法可以直接通过类名的方式调用,有因为静态方法在类加载的时候产生,而此时并没有创建对象,所以无法在静态方法中使用this关键字。(虽然在静态方法中不能访问非静态成员方法和非静态成员变量,但是在非静态成员方法中是可以访问静态成员方法和静态成员变量。)
在静态方法中使用this关键字编译不会通过。
静态变量
static变量也称为静态变量,静态变量和非静态变量的区别:
1,在类初次加载的时候就会初始化,静态变量被所有对象共享,在内存中只有一个副本
2,非静态变量是对象所拥有的,在创建对象的时候被初始化,每个对象都拥有自己的变量,互不影响
静态代码块:
静态代码块的作用:
静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。静态代码块随着类加载而加载,有多个静态代码块的,按代码块前后顺序加载。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
静态代码块的执行顺序:
静态代码块>非静态代码块>构造方法>普通的成员方法
例如:
父类:F
public class F {
static {
System.out.println("F静态代码块执行");
}
{
System.out.println("F非静态代码块执行");
}
public F() {
System.out.println("F构造方法执行");
}
public void fPT() {
System.out.println("fpT开始执行");
System.out.println("fpT执行结束");
}
}
子类:S
public class S extends F{
static {
System.out.println("S静态代码块执行");
}
{
System.out.println("S非静态代码块执行");
}
public S() {
System.out.println("S构造执行方法");
}
public void spT() {
System.out.println("spT开始执行");
fPT();
System.out.println("S的pT执行结束");
}
}
测试类:Test2
public class Test2 {
static {
System.out.println("Test2静态代码块执行");
}
{
System.out.println("Test2非静态代码块执行");//没有对象不执行
}
public static void main(String[] args) {
S s = new S();
s.spT();
}
}
执行结果: