Java static关键字

来源:互联网 发布:linux 新建文件夹命令 编辑:程序博客网 时间:2024/05/16 01:27

为什么需要static

创建对象时,只有执行了new之后。数据的存储空间才被分配,对象的属性和方法才能被外界调用。

那么,如果以下情况

  • 不创建对象,也可以调用此方法
  • 为某特定域只分配单一存储空间,而不考虑对象需要被创建多少次

此时。。。static华丽低调登场

当事物被声明为static时,即使不创建对象,也可以访问其static域和static方法

static 变量

上代码

public class StaticMember {    public static int num = 1;}

测试类

/** * Created by 侯彬彬 on 2016/4/15. */public class Main {    public static void main(String[] args) {        StaticMember statieMember = new StaticMember();        StaticMember statieMember1 = new StaticMember();        System.out.println(StaticMember.num);   //直接访问        System.out.println(statieMember.num + " == " + statieMember1.num);        statieMember.num++; //2对象共享此变量        System.out.println(statieMember.num + " == " + statieMember1.num);    }}

结果

11 == 12 == 2Process finished with exit code 0

总结

  • 可以直接通过ClassName.member访问静态变量
  • static变量会被多个对象共享
  • static 一般可以用来声明静态常量,如下
/** * Created by 侯彬彬 on 2016/4/15. */public class StaticMember {    //public static int num = 1;    public static final String INFO = "hello world";    public static void main(String[] args) {        System.out.println(StaticMember.INFO);    }}

结果

hello worldProcess finished with exit code 0

这种静态常量有利于代码的编写与维护

static 方法

static方法 的用处之一,就是用来写工具类方法
比如 java.util.Collections

public class Collections extends Object此类完全由在 collection 上进行操作或返回 collection 的静态方法组成

注意

  • static 方法中不能引用非静态方法。反之可以
/** * Created by 侯彬彬 on 2016/4/15. */public class StaticMethod {    public void show() {        staticShow();        System.out.println("common method");    }    public static void staticShow() {        show(); //error        System.out.println("static method");    }}

static 块

static 代码块中的代码仅执行一次。在类被创建时,或者静态成员被访问时。(即使对象未创建)

上代码

/** * Created by 侯彬彬 on 2016/4/15. */public class StaticBlock {    public static int num = 0;    public static int num2 = 10;    static {        System.out.println("hello world");    }    public static void main(String[] args) {        StaticBlock staticBlock = new StaticBlock();        StaticBlock staticBlock2 = new StaticBlock();    }}

结果

hello worldProcess finished with exit code 0

访问静态成员时

/** * Created by 侯彬彬 on 2016/4/15. */public class StaticBlock {    public static int num = 0;    public static int num2 = 10;    static {        System.out.println("hello world");    }    public static void main(String[] args) {        System.out.println(StaticBlock.num);    }}

结果

hello world0Process finished with exit code 0

总结
static代码块可以用来优化代码

参考资料

  • 《Thinking in Java》
0 0
原创粉丝点击