static关键字的总结

static静态方法

static修饰的方法,即无需本类的对象即可调用此方法,关于static方法,声明为static的方法有以下几条限制:

1、它们仅能调用其他的static方法

2、它们只能访问static数据

3、它们不能以任何方式引用this或super

static修饰的变量、static修饰的方法,都是属于类本身的。用static修饰的变量和方法在类加载的时候,只分配一块存储空间,所有此类的对象都可以操控此块存储空间。

问题:Java中子类是否可以继承父类的static变量和方法而呈现多态特性?

1、子类是不继承父类的static变量和方法的。因为这是属于类本身的,但是子类可以访问父类的static变量和方法。

2、因为不继承,所以子类和父类中同名的static变量和方法是相互独立的,并不存在任何的重写的关系。

代码示例如下:

package sol1_10;

public class Parent {
    public static void  staticMethod(){
        System.out.println("Parent staticMethod run");
    }
    public void method(){
        System.out.println("Parent method run");
    }
}
package sol1_10;

public class Son extends Parent {
    public static void  staticMethod(){
        System.out.println("Son staticMethod run");
    }
    public void method(){
        System.out.println("Son method run");
    }
}
package sol1_10;

public class Main {
    public static void main(String[] args) {
        Parent.staticMethod();
        Son.staticMethod();
        Parent parent = new Son();
        parent.staticMethod();
        parent.method();
        Son son = new Son();
        son.staticMethod();
        son.method();
    }
}
Parent staticMethod run
Son staticMethod run
Parent staticMethod run
Son method run
Son staticMethod run
Son method run

 static的使用

1、修饰成员变量和成员方法
2、静态代码块

(1)静态代码块定义在类中方法外

(2)静态代码块的格式是

static{  

  语句体;

}

(3)优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行

(4)该类不管创建多少对象,静态代码块只执行一次

一个类中的静态代码块可以有多个,位置可以随便放,它不存任何的方法体内,JVM加载类时会执行这些静态的代码块,如果静态代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

3、修饰类(只能修饰内部类)

静态内部类:普通类时不允许声明为静态的,只有内部类才可以,被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。

public class Outter {
    static class Inner {
        public void show() {
            System.out.println("这是一个静态内部类");
        }
    }
 
    public static void main(String[] args) {
        Inner i = new Inner();
        i.show();
        
        /**
         * 如果是普通内部类,则创建对象的格式为:
         * 外部类名.内部类名    对象名 = new 外部类名().new 内部类名();
         */
    }
 
}
public class Outter {
     class Inner {
        public void show() {
            System.out.println("这是一个普通内部类");
        }
    }

    public static void main(String[] args) {
        Inner i = new Outter().new Inner();
        i.show();
    }
}

4、静态导包(用来导入类中的静态资源,1.5之后的新特性)

格式为:import static 
这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法

适用场景:

工具库方法。不需要实例化的方法。与具体业务无关,执行比较频繁,用的地方多的方法。

posted @ 2019-10-29 21:24  wangAQS  阅读(134)  评论(0)    收藏  举报