static修饰静态变量/方法/块
static变量不可定义在方法里
package entity; public class test2 { String name;//static只能定义在方法外 public static void main(String[]args){ String name; int age ; String de=gouzao.Fname="ddd"; System.out.println(de); System.out.println(Math.random()); }
- static可以用来修饰
- 成员变量
- 静态变量,可以直接通过类名访问
- 成员方法
- 静态方法,可以直接通过类名访问
- 代码块
- 静态代码块,当Java虚拟机加载类时,就会执行该代码块
- 成员变量
static变量
-
类变量/方法可以直接【类.变量/方法】调用
-
实例变量/方法需要创建实例(对象)【对象.变量/方法】调用
-
类的成员变量包括
-
类变量(静态变量)
-
被static修饰的变量
-
在内存中只有一个拷贝
- 被static修饰的变量,所有对这个变量的操作,都指向唯一的该变量
- 能被类的所有实例共享;可作为实例之间进行交流的共享数据
- 如果类的所有实例都包含一个相同的常量属性,可把这个属性定义为静态常量类型,从而节省内存空间
public class StaticTest{ static num; public static void main(String[]args){ num++; StaticTest st1=new StaticTest(); st1.num++; StaticTest st2=new StaticTest(); st2.num++; StaticTest.num++; System.out.println(num); } }//输出 4
-
类内部,可在任何方法内直接访问静态变量
-
其他类中,可以直接通过类名访问
-
-
实例变量(创建一个实例:Student stu=new Student)
- 没有被static修饰的变量
- 每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响
-
静态方法
- 静态方法:可直接通过类名访问
- 静态方法中不能使用this和super
- 不能直接访问所属类的实例变量和实例方法
- 可直接访问类的静态变量和静态方法
- 实例方法:通过实例访问
- 可直接访问所属类的静态变量、静态方法、实例变量和实例方法
- 静态方法必须被实现
静态块
执行顺序:
-
静态代码块 (永久只执行一次)
-
如果有多个静态块,按顺序加载
public class StaticTest{ static int num=100; static{ num+=100; System.out.println(num); } static{ num+=100; System.out.println(); } } ...... StaticTest st1=new StaticTest(); StaticTest st2=new StaticTest(); System.out.println(StaticTest.num); //输出 200 300 300
-
匿名代码块
通过final修饰的类不能被继承,没有子类