前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java关键字系列 -- static

Java关键字系列 -- static

作者头像
叫我阿柒啊
发布2022-05-09 20:20:24
2810
发布2022-05-09 20:20:24
举报
文章被收录于专栏:入门到放弃之路

前言

在Java代码中,static使用的是比较多的一个关键字,今天就来总结一下static的用法。首先写一段囊括static用法的代码:

代码语言:javascript
复制
public class Outer {
    private int age;
    // 静态变量
    private static String name;
    // 静态代码块
    static {
        name = "outer";
    }
    // 静态方法
    public static void say() {
        System.out.println("hello world");
    }
    // 静态内部类
    static class Inner {
        private static String name = "inner";
        private int age = 10;
    }
}
为什么static方法不能引用非static变量/方法
讲一讲类的初始化

当一个类被主动引用时,就会引起类的加载过程,首先会在方法区生成运行时结构(包括static变量和static方法),并在堆中生成一个唯一的Class对象作为整个类的入口,然后再执行静态代码块和初始化静态变量,静态方法,并分配内存地址。

最后调用类构造器,在内存中初始化非static变量(成员变量)和非static方法。所以说在static方法中不能使用no-static变量和方法,就是因为static方法分配内存的时候no-static变量还没有建立,找不到对应的引用

什么时候会触发主动引用?说几个比较常见的:

  1. new对象
  2. 通过类名调用一个类的静态方法或静态变量
  3. 反射调用类
static的使用
静态变量

static修饰的变量叫做类变量,是共享变量,属于整个类,通过类名.属性名即可调用,不需要持有此类的实例对象(new)即可使用此属性。未被static修饰的变量叫做成员变量,属于每个对象私有的。

静态代码块

只在类的加载过程中调用,因为一个类只加载一次,所以static代码块也只会执行一次,会在类的构造器前执行。常用来初始化链接、加载配置文件和给static变量赋值。

静态方法

static修饰的方法叫做类方法,通过类名.方法名即可调用,不需要持有此类的实例对象即可使用此方法。

静态内部类

静态内部类就是在一个用static修饰的内部类,而内部类就是定义在另一个类中的类。静态内部类有以下特点;

  1. 可以包含静态和非静态成员变量
  2. 可以直接调用外部类的静态方法|静态属性,但不能调用普通方法|属性
  3. 在外部类中可以像普通类一样访问内部类,可以直接访问其中private属性/方法
代码语言:javascript
复制
public class Outer{
  public static void main(String[] args) {
        System.out.println(Inner.name);
    }
}

4.在不相关类中可以直接创建静态内部类的对象

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
      // 第一种方法
       Outer.Inner inner = new Outer.Inner();
       // 第二种方法
       import com.Outer.Inner;
       Inner inner1 = new Inner();

    }

5. 静态内部类实际上和外部类联系很少,也就是命名空间上的联系,外部类相当于静态内部类的包,即package目录

总结

非static的变量/方法进不去static变量/方法的圈子,因为非static在static变量/方法声明后才被声明,有一种“君生我未生,我生君已老”的感觉在里面。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 入门到放弃之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么static方法不能引用非static变量/方法
  • 讲一讲类的初始化
  • static的使用
    • 静态变量
      • 静态代码块
        • 静态方法
          • 静态内部类
          • 总结
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档