Java关键字static修饰成员变量与方法

4,387次阅读
10 条评论

共计 1585 个字符,预计需要花费 4 分钟才能阅读完成。

前言

static 的意思为“静态”,在我们写第一个 Java 程序《Hello World》的时候就用到了这个关键字,在一个 java 文件中的主方法就是使用的 static 修饰的,但是 static 有什么用处呢?我就以我个人的见解发表看法。

PS:以下解释为个人的认知,暂为非专业性解释,如有语法、逻辑性错误,麻烦请指出,谢谢!

静态变量

如果一个成员变量 / 方法使用了 static 修饰之后,那么当这个类被加载到内存的时候,这些静态成员会加载到共享数据区,如果有使用 static 修饰的代码块也会在这个类被加载到内存的时候执行里面的代码。可以看看如下代码:

class NewCount{
    public static int count = 0;
    {this.count++;}
    public void getCount(){System.out.println("方法一共被调用了:"+this.count+"次");
    }
    public static void main(String[] args){new NewCount();
        new NewCount();
        new NewCount();
        new NewCount();
        NewCount n1 = new NewCount();
        new NewCount();
        new NewCount();
        n1.getCount();}
/*   运行结果为:方法一共被调用了:7 次   */
}

静态成员变量只会在数据共享区维护一份,而非静态成员变量则会在每个对象中维护一份。
解释:所以在上方的案例中,我们每创建一次对象,JVM 都会自动执行构造代码块,构造代码块将静态成员变量 count 自增一次,所以每次创建对象 count 都会自增一次,以此达到记录对象被创建的次数。
应用场景:若一个数据需要被所有对象共享使用的时候,此时可以使用 static 进行修饰。
使用注意:非静态的成员变量只能使用创建对象进行访问,而不能使用类名进行直接访问。

静态方法

静态方法使用事项:

  • 静态方法可以直接调用类名或者创建对象进行调用,而非静态方法只能创建对象进行调用。
  • 静态方法可以直接访问静态的成员,但是不能直接访问非静态的成员。
  • 非静态的方法可以直接访问静态与非静态的成员。
  • 静态方法中不能出现 this/super 关键字。
静态方法应用场景:若一个方法内没有直接使用到非静态的成员时,那么此方法则可以使用 static 进行修饰。
我写了一个无实际意义的例子,仅供参考 :lol: 则请看下方代码区
class Demo1{
    public String name;
    public static String year = "2016 年";
    // 静态代码块
    static{System.out.println("### 这是静态代码块");
    }
    // 构造方法
    public Demo1(String name){
        this.name = name;
        System.out.println(this.name+"生活在"+this.year);
    }
    // 获取当前年份
    public static void getYear(){System.out.println(year);
    }
    public static void main(String[] args){
        // 通过类名获取年份
        Demo1.getYear();
        // 创建对象
        Demo1 d = new Demo1("张三");
        // 通过使用对象获取年份
        d.getYear();}
}

后记

文章中有些地方说的不是很完全,毕竟博主现在也不是专业的人员,措辞结构不能达到专业级别,若有地方不足,麻烦请在下方评论补充一下,谢谢!
正文完
使用官方微信小程序体验更多功能
post-qrcode
 3
憧憬Licoy
版权声明:本站原创文章,由 憧憬Licoy 于2016-09-13发表,共计1585字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(10 条评论)
我爱动感单车网 评论达人 LV.1
2016-09-18 14:38:25 回复

:mrgreen: 对Java一窍不通,也暂时还没兴趣学习它。

 Windows  Chrome  中国广西桂林市电信
爱眼博客 评论达人 LV.1
2016-09-17 09:34:20 回复

很好的技术

 Windows  Chrome  中国广西玉林市电信
Koolight 评论达人 LV.3
2016-09-14 23:53:01 回复

不明觉厉,厉害厉害!

 Windows  Chrome  中国湖北省宜昌市联通
爱眼博客 评论达人 LV.1
2016-09-14 17:00:50 回复

都是代码呀

 Windows  Chrome  中国广西玉林市电信
阿洪 评论达人 LV.1
2016-09-13 21:43:00 回复

可以

 Windows  Chrome  中国四川省成都市电信