美文网首页
一篇文章告诉你 static 关键字有什么用

一篇文章告诉你 static 关键字有什么用

作者: zeamonk | 来源:发表于2019-02-05 13:08 被阅读5次

0x00 从一个有意思的问题开始


    public static void main(String[] args) {

      // doSomeThing;

    }

这是 Java 代码中的入口函数,应该是用的最多的代码了,但不知道你想过没有,为什么一定要用 static 关键字修饰 main 方法?下面我们一起来分析。

0x01 static 关键字有什么用

首先我们要明白 static 能用来修饰什么东西?

简单来说,主要是下面三种:

  • 修饰成员变量

  • 修饰成员方法

  • 修饰代码块

那么,用不用 static 修饰有什么区别呢?

  • 对于成员变量而言

    static 修饰的静态成员变量在类加载时初始化,存放在数据段中,有且仅有一份,所有类的实例共享同一个静态变量,可以通过类名调用,也可以通过对象实例调用。

  • 对于成员方法而言

    其实最重要的就是一条:可以通过类名直接访问,不依赖于任何对象!也就是说静态方法的执行可能先于任何对象的创建,因此与对象相关的变量、方法都不允许在静态方法中使用,比如:

    • 静态方法中不允许使用 this 、super指针

    • 静态方法中不允许使用非静态的方法或变量

    • 静态方法不允许使用 abstract 进行修饰

    静态方法的这个特点也就回答了开始提出的问题,因为 main 方法在执行时,没有任何一个对象被创建,所以,main 必须是静态方法。

    但同时,需要注意的是,静态方法与静态变量一样,都允许通过对象实例调用!

  • 对于代码块而言

    static 修饰的代码块通常用于初始化静态数据成员,对于一些不需要在每个对象中进行初始化的变量,通常放在 static 代码块中,仅在类加载时初始化一次。

0x02 应用场景

静态方法的应用场景挺多了,在 Java 中大量存在,如 Math 类的各种方法等等,静态变量常用的是实现类的实例间的数据共享,举个栗子:


package com.zeamonk;

public class StaticTest {

    public static void main(String[] args) {

        //  创建三个对象,由于共享了 sid,实现了 book id属性的自增

        Book book1 = new Book("大秦帝国");

        Book book2 = new Book("乌合之众");

        Book book3 = new Book("原则");

    }

}

class Book {

    static int sid = 0;    // 静态成员变量,对所有类的实例共享

    int id;

    String name;

    Book(String _name) {

        id = sid++;

        name = _name;

        System.out.println(name + "  id = " + id);

    }

}

代码很简单,由于 sid 是保存在数据段中的,有且仅有一份,所以 Book 对象的每一个实例在创建时都会调用 sid复制给自身的 id,同时将 sid 自增。

0x03 需要注意的问题

  1. static 修饰的变量、方法或代码块在类加载时指执行,且仅执行一次。

  2. 多个 static 代码块在执行时按定义顺序执行

  3. 静态变量被修改后无法恢复,类似于 C/C++ 中的全局变量

欢迎关注公众号-

qcode.jpg

相关文章

  • 一篇文章告诉你 static 关键字有什么用

    0x00 从一个有意思的问题开始 这是 Java 代码中的入口函数,应该是用的最多的代码了,但不知道你想过没有,为...

  • runtime的关联引用

    下文会用到const,static关键词,下一篇文章会针对const,static,extern等关键字的用法详细...

  • Java基础系列-static关键字

    原创文章,转载请标注出处:《Java基础系列-static关键字》 一、概述 static关键字是Java诸多关键...

  • 面试官:兄弟,说说Java的static关键字吧

    读者乙在上一篇我去系列文章里留言说,“我盲猜下一篇标题是,‘我去,你竟然不知道 static 关键字’”。我只能说...

  • Java static 的一两点使用

    这篇文章是关于Java static关键字的使用,主要会介绍以下的内容: static 的概念 static的各种...

  • OC中static、const、extern关键字理解

    static关键字 static关键字用于修饰变量。 static修饰局部变量当使用static修饰局部变量时, ...

  • 深入分析java中的关键字static

    在平时开发当中,我们经常会遇见static关键字。这篇文章就把java中static关键字的使用方法的原理进行一个...

  • static关键字

    Static关键字概述 static(静态)关键字可以用于修饰变量、方法和代码块。我认为static关键字的主要用...

  • 【Java】关键字

    一、 static关键字 static关键字的总结: static关键字 可以再没有创建对象的时候进行调用类的元素...

  • Java学习Day03

    今日学习内容总结 Static关键字 Arrays类 Math类 继承 Static关键字 一旦用了static,...

网友评论

      本文标题:一篇文章告诉你 static 关键字有什么用

      本文链接:https://www.haomeiwen.com/subject/xqhvsqtx.html