目录
属性
方法
静态代码块,匿名代码块,构造器的执行顺序
静态导入包
final 的特性:如果有final,就不能被继承了
属性
public class Student { private static int age;//静态的变量 多线程 private double score;//非静态的变量 public static void main(String[] args) { Student s1 = new Student(); System.out.println(Student.age);//静态的变量可以被多个类共享 //System.out.println(Student.score); 报红 //不是静态的变量,不可以直接用类名去调用 System.out.println(s1.age);//对象都是可以直接这样去调用 System.out.println(s1.score); }}
方法
//static : 类中使用修饰成员变量 方法使用的话就是成员方法public class Student { //方法 public void run(){ } public static void go(){ } public static void main(String[] args) { new Student().run();//非静态调用方法,需先new 一个对象再去调用; Student.go();//静态方法,不用去new一个对象,可以直接通过类名的方法去直接调用 go();//静态方法,在当前这个类里面,可以直接调用 //run();静态方法不能直接去调用非静态方法,类一加载,非静态还没出来,所以不能调用。 }}
静态代码块,匿名代码块,构造器的执行顺序
public class Person { { //代码块(匿名代码块) //创建对象时自动创建,它在构造器之前 } static{ //静态代码块 //和类一加载就直接执行,永久只执行一次 }}
public class Person { //匿名代码块第二个被执行 2 赋初始值 { System.out.println("匿名代码块"); } //静态代码块最先被执行 1 只执行一次 static { System.out.println("静态代码块"); } //构造方法最后被执行 3 public Person() { System.out.println("构造方法"); } public static void main(String[] args) { Person person1 = new Person(); // 说明执行的顺序不同 System.out.println("======================="); Person person2 = new Person(); // 说明静态代码块只执行一次 }}
静态导入包
//静态导入包import static java.lang.Math.random;import static java.lang.Math.PI;public class Test { public static void main(String[] args) { System.out.println(Math.random()); System.out.println(random());//有了静态导入包,Math都可以省略 System.out.println(PI); }}
final 的特性:如果有final,就不能被继承了