静态属性:
package com.yuanyu.Oop; public class Student{ private static int age; //静态变量 private double score; //非静态变量 public static void main(String[] args) { Student s1 = new Student(); System.out.println(age=10); System.out.println(s1.age=11); System.out.println(Student.age=12); //System.out.println(Student.score=89); //编译报错 System.out.println(s1.score=90); //System.out.println(score=91); //编译报错 } }
若是static静态变量推荐使用类名调用变量,可以很清楚看出是个静态变量
静态变量对于这个类而言在内存中只有一个,可以被类中所有的实例共享,常用于多线程
静态方法:
package com.yuanyu.Oop; public class Student{ public void run(){ //非静态方法 go(); //非静态方法可以直接访问类中的静态方法 System.out.println("run"); } public static void go(){ //静态方法 System.out.println("go"); } public static void main(String[] args) { //run(); //编译报错 静态方法不能直接调用非静态方法 new Student().run(); Student.go(); go(); } }
非静态方法可以直接访问类中的静态方法
代码块:
package com.yuanyu.Oop; public class Student{ { System.out.println("匿名代码块"); } static { System.out.println("静态代码块"); } public Student() { System.out.println("构造方法"); } public static void main(String[] args) { Student student1 = new Student(); System.out.println("================================"); Student student2 = new Student(); } }
运行结果:
静态代码块最先执行且执行一次,其次是匿名代码块、构造方法
因此静态代码块和匿名代码块都可以用来赋初始值
静态导入包:
package com.yuanyu.Oop; import static java.lang.Math.random; public class Student{ public static void main(String[] args) { System.out.println(Math.random()); //0.35021309558598646 System.out.println(random()); //0.07537262741719064 } }
导入包中方法时加入static修饰,否则会报错