Java中的static

来源:互联网 发布:java线程 编辑:程序博客网 时间:2024/05/16 07:48

static关键字

static是一种特殊的关键字,可以修饰方法,成员变量等成员。static修饰的成员表面这个成员是属于类的本身,不属于对象,因此static修饰的成员只能通过类来调用,而不能通过对象来调用。一般称static修饰的方法和变量为类变量、类方法,也可以称为静态变量、静态方法。

static修饰的成员是随着类的加载而加载,意味着jvm一开始就会存在static修饰的成员。

class StaticClass{  public static void main(String[] args)  {      static int i = 5;      int j =1;  }}

这里写图片描述
static真正作用是区分成员变量、方法、内部类、初始化块这四种成员到底属于类本身还是实例。

static与this的关系

static修饰的方法中不能使用this引用。因为在static修饰的方法中使用this,就导致this无法指向合适的对象。由于static修饰的方法中不能使用this,所以static修饰的方法不能访问非静态成员。
如果想在静态方法中访问非静态方法,则需要重新创建对象

class StaticMethod{    void tool()    {        System.out.println("静态成员不能访问非静态成员");    }    public static void main(String[] args)    {        //创建新对象调用非静态方法        new StaticMethod().tool();      }}

同理,static修饰的方法中也无法出现super()关键字。

static和abstract的关系

abstract修饰的方法是没有方法体的方法,所以通过类来调用抽象方法会出现错误。因此无法同时使用static和abstract修饰方法。

静态内部类

因为static修饰的成员属于类本身,外部类的上一级是包(package),所以不能使用static修饰外部类。而static修饰内部类,则内部类属于外部类,所以可以使用static修饰内部类。
外部类不能直接访问静态内部类的成员,需要使用静态内部类的类名调用来访问,或者用静态内部类对象来访问。

public class StaticOuterClass{    static class StaticInnerClass    {        private static int prop1 = 5;        private int prop2 = 9;    }    public void accessInnerProp()    {        // System.out.println(prop1);        // 上面代码出现错误,应改为如下形式:        // 通过类名访问静态内部类的类成员        System.out.println(StaticInnerClass.prop1);        // System.out.println(prop2);        // 上面代码出现错误,应改为如下形式:        // 通过实例访问静态内部类的实例成员        System.out.println(new StaticInnerClass().prop2);    }}
1 0
原创粉丝点击