成员变量分为实例变量和静态变量。其中实例变量属于某一个具体的实例,必须在类实例化后才真正存在,不同的对象拥有不同的实例变量。而静态变量被该类所有的对象公有(相当于全局变量),不需要实例化就已经存在。
静态方法的调用:
- ClassA a = new ClassA(); //必须经过实例化,用对象名访问
- a.instanceMethod();
- [访问权限修饰符] static [返回值类型] 方法名([参数列表]){
- 语句序列
- }
- public static void stFun(){
- System.out.println("这是一个静态方法");
- }
- class accessMember{
- private static int sa; //定义一个静态成员变量
- private int ia; //定义一个实例成员变量
- //下面定义一个静态方法
- static void statMethod(){
- int i = 0; //正确,可以有自己的局部变量
- sa = 10; //正确,静态方法可以使用静态变量
- otherStat(); //正确,可以调用静态方法
- ia = 20; //错误,不能使用实例变量
- insMethod(); //错误,不能调用实例方法
- }
- static void otherStat(){
- }
- //下面定义一个实例方法
- void insMethod(){
- int i = 0; //正确,可以有自己的局部变量
- sa = 15; //正确,可以使用静态变量
- ia = 30; //正确,可以使用实例变量
- statMethod(); //正确,可以调用静态方法
- }
- }//end of class accessMember
- static {
- 语句序列
- }
- public class staticBlock{
- //定义一个普通的main()方法
- public static void main(String args[]){
- System.out.println("This is main method.");
- }
- //定义一个静态代码块
- static{
- System.out.println("This is static block.");
- int stVar = 0; //这是一个局部变量,只在本块内有效
- }
- }
- This is static block.
- This is main method.
- //-----------文件名supplyTest.java-----------------
- public class supplyTest{
- //定义一个静态方法供测试用
- public static void statShow(){
- System.out.println("这是静态方法");
- }
- //定义一个实例方法供测试用
- public void instShow(){
- System.out.println("这是实例方法");
- }
- }//end of supplyTest.java
- //-----------文件名supplyTest.java-----------------
- //-----------文件名hasStatMember.java-----------------
- public class hasStatMember{
- static supplyTest stVar; //定义一个静态成员
- public static void main(String args[]){
- stVar.statShow(); //调用静态方法
- stVar.instShow(); //调用实例方法
- }
- }
- //-----------文件名hasStatMember.java-----------------
- 这是静态方法
- Exception in thread "main" java.lang.NullPointerException
- at hasStatMember.main(hasStatMember.java:5)
- //-----------文件名hasStatMember.java-----------------
- public class hasStatMember{
- static supplyTest stVar = new supplyTest(); //定义一个静态成员并实例化它
- public static void main(String args[]){
- stVar.statShow(); //调用静态方法
- stVar.instShow(); //调用实例方法
- }
- }
- //-----------文件名hasStatMember.java-----------------
- 这是静态方法
- 这是实例方法
- //-----------文件名useStVar.java-----------------
- public class useStVar{
- public static void main(String args[]){
- hasStatMember.stVar.statShow(); //调用静态方法
- hasStatMember.stVar.instShow(); //调用实例方法
- }
- }
- //-----------文件名useStVar.java-----------------
- 这是静态方法
- 这是实例方法
- 初始化顺序:先初始化父类的静态代码--->初始化子类的静态代码-->
- (创建实例时,如果不创建实例,则后面的不执行)初始化父类的非静态代码
- (变量定义等)--->初始化父类构造函数--->初始化子类非静态代码(变量定义等)--->初始化子类构造函数