Java中的static

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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值