Java static关键字四种用法

static关键字,是我们在java开发中必须掌握的关键字之一,不同的关键字有着不同的作用,在适合的环境下运用可以,可以提高程序的运行性能,优化程序的结构。
静态成员的使用“类名.静态成员”,从调用方式我们可以了解到,静态成员肯定必须在我们调用前初始化好了的,那么也就是说在类被加载时已经初始化好了,类被装载到jvm虚拟机后,不初始化static修饰的成员的话,就不能正确的使用类名去调用静态成员了。当一个类被加载和实例化时,以下在jvm的内存存储图:
这里写图片描述
如果是一个类里面的静态成员变量和静态成员方法,它是存储在方法区的,静态成员变量是在方法区的静态域里面,而静态成员方法是在方法区的class二进制信息里面(.class文件和方法区里面的二进制信息不一样,读取.class文件按照虚拟机需要的格式存储在方法区。这种格式包括数据结构方面),静态成员和静态成员方法使用时不用创建对象,即类加载初始化后就可以使用,并且是线程共享的。

通过图中分析,很多问题也能够迎刃而解,比如不同线程调用方法为什么是线程安全的。局部变量存储在哪儿里(栈中),成员变量存储在哪儿里(静态成员变量存储在方法区,非静态成员变量存储在堆区),为什么局部变量不能够static修饰等(局部变量存储在栈区,在方法调用时不能够自动初始化必须由程序员手动初始化,否则会报错,归根结底是由于static变量和局部变量存储的位置不一样)。

static四种用法:

  • 修饰成员变量
public class Person1{
    public static name="nihao";
}
public calss Mytest{
    public static void main(String[] args){
     System.out.println(Person1.name);
    }
}
  • 修饰成员方法
public class Person1{
    public static name="nihao";
    public static sayHello(){
      //静态方法中不可使用this
      //静态方法使用的变量和方法,必须是被static修饰
      System.out.println(name);
    }
}
public calss Mytest{
    public static void main(String[] args){
     System.out.println(Person1.sayHello());
    }
}
  • 静态代码块
    可将多个类成员放在一起初始化。
public class Person1{
    //用户登录状态
    public static Map<Integer,String> S_RESULTCODE=new HashMap<Integer,String>();
    static{
        S_RESULTCODE.put(1001, "验证成功");
        S_RESULTCODE.put(-1009, "密钥验证失败");
        S_RESULTCODE.put(-1010, "数据类型异常");
        S_RESULTCODE.put(-1011, "验证消息响应失败");
    }
}
  • 静态导包
package com.bigbigbu.static;
public class Person1{
    public static name="nihao";
    public static sayHello(){
      //静态方法中不可使用this
      //静态方法使用的变量和方法,必须是被static修饰
      System.out.println(name);
    }
}
import static com.bigbigbu.static.Person1.*;
public calss Mytest{
    public static void main(String[] args){
     System.out.println(sayHello());
    }
}

上面的代码来自于两个java文件,其中的Person1很简单,包含了一个用于sayHello的static方法。而在Mytest.java文件中,我们首先将Person1类导入,这里在导入时,我们使用了static关键字,而且在引入类的最后还加上了“.*”,它的作用就是将Person1类中的所有类方法直接导入。不同于非static导入,采用static导入包后,在不与当前类的方法名冲突的情况下,无需使用“类名.方法名”的方法去调用类方法了,直接可以采用”方法名”去调用类方法,就好像是该类自己的方法一样使用即可。

总结

static是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法:

  • 用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享;
  • 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类;
  • 静态块用法,将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键;
  • 静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。

以上为博主查阅博文和资料的整合加入一些自己的理解希望对大家有所帮助。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值