static静态修饰符
static修饰符:可以修饰类中的成员变量、成员方法。还可以编写static代码块来优化程序
-
对于静态的成员变量,可以被类直接调用,也可以被new出来的对象调用
-
对于非静态的成员变量,仅仅只能被new出来的对象调用
-
对于静态的成员方法,可以直接调用,也可以被new出来的对象调用。静态的成员方法不能调用非静态的成员方法
-
对于非静态的成员方法需要new一新的对象来调用非静态的方法,可以通过this关键方法静态成员变量,非静态的成员方法可以调用静态的成员方法
-
static修饰静态代码块: static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来依次执行每个static块,并且只会执行一次 ,且静态代码块会被首先执行
静态的成员变量、成员方法可执行多次(即可调用多次)
package com.impl.static1; public class Static1 { private static int age;//私有的静态变量 private double score; //私有的非静态变量 public void run(){ System.out.println("非静态方法被调用"); go();//在非静态方法中可以调用静态方法 this.age = age;//通过this关键字访问静态的成员变量 System.out.println(age); } public static void go(){ System.out.println("静态方法被调用"); /*run();*/ //在静态方法中不可以调用非静态方法 } public static void main(String[] args) { go();//对于静态的方法可以直接调用,不需要new对象 go(); Static1 s1 = new Static1(); s1.run();//对于非静态的方法需new一个对象来调用其方法. s1.g System.out.println(Static1.age); /*System.out.println(Static1.score);*/ //不能通过类名调用非静态的变量须通过new一个对象。 System.out.println(s1.score); System.out.println(s1.age); } } /* 静态方法被调用 静态方法被调用 非静态方法被调用 静态方法被调用 0 0 0.0 0 */
-
static修饰代码块
package com.impl.static1;
public class Static2{
{
System.out.println("匿名代码块");
}
//该静态代码块首先被执行且执行一次
static{
System.out.println("静态代码块");
}
public Static2(){
System.out.println("类Static2的构造方法Static2()");
}
public static void main(String[] args) {
new Static2();
}
}
/*
静态代码块
匿名代码块
类Static2的构造方法Static2()
*/