Java中static关键字的应用

Java中static关键字的应用

static是Java中常用的关键字,代表全局或者静态的意思。

关于static的特征,我们可以理解为:方便在没有创建对象的情况下来进行某些操作。

通常可用于修饰成员变量和方法,也可以用于形成静态代码块。

实际应用中,可以将需要频繁操作通用型信息设置公共组件封装等操作设置为静态。

 

static修饰成员变量与普通成员变量的对比

概念

  • 静态成员:用static修饰的成员变量,通常也称为静态属性、类成员、全局属性等。
  • 非静态成员:没有被static修饰的成员变量,也称为实例变量、实例成员、对象成员、对象属性等。

 

特征

  • 静态成员:
    • 静态成员是属于整个类的,由类所进行维护,仅在类初次加载时会被初始化,直到在类被销毁才回收。
    • 通过该类实例化的所有对象都共享类中静态资源,任一对象对静态信息的修订,都将影响所有对象。
    • 由于静态成员在类加载期间就已经完成初始化,存储在Java Heap(JDK7.0之前存储在方法区)中静态存储区,因此优先于对象而存在,可以通过类名和对象名两种方式访问(建议通过类名访问)。
  • 非静态成员:
    • 非静态成员属于对象独有,每个对象进行实例化时产生各自的成员,随着对象的回收而释放。
    • 对象对各自成员信息的修订不影响其他对象。
    • 只能通过对象访问。

 

应用

可以将频繁调用的公共信息、期望加快运行效率的成员设置为静态。但需要注意,由于其生命周期长,即资源占用周期长,要慎用。

 

static修饰成员方法与普通成员方法的对比

概念

  • 静态方法:用static修饰的成员方法,通常也称为类方法、全局方法等。
  • 非静态方法:没有被static修饰的成员方法,也成为实例方法,对象方法等。

 

特征

与静态成员类似,静态方法属于整个类的,由类所进行维护,优先于对象而存在,因此可以通过类名和对象名两种方式访问,也因此在静态方法中无法直接访问同类中的非静态成员。

 

static修饰代码块与构造代码块及普通代码块的对比

概念

  • 静态代码块:被static修饰的,定义在类内部,用{}括起的代码段。
  • 构造代码块:没有被static修饰的,定义在类内部,用{}括起的代码段。
  • 普通代码块:定义在方法内部,用{}括起的代码段。

 

特征

  • 静态代码块:

    • 只能出现在类内,不允许出现在方法内。

    • 可以出现多次,按顺序在类加载时执行。

    • 无论该类实例化多少对象,只执行一次。

  • 构造代码块:

    • 可以在类内出现多次,按顺序在每个对象实例化时执行。
    • 执行优先级:比静态代码块低,比构造方法高。
    • 每次执行实例化对象时,均会执行一次。
  • 普通代码块:

    • 可以在方法内出现多次,按顺序在方法调用时执行。

 

应用

  • 静态代码块:基于性能优化的考量,多适用于需要在项目启动时执行一次的场景,譬如项目资源整体加载等。
  • 构造代码块:多适用于类中每个对象产生时都需要执行的功能封装。与构造方法的区别在于:构造方法是在new执行时有选择性的调用带参或者无参构造,而构造代码块则是,在每个对象实例化时都一定会执行。
  • 普通代码块:适用于在方法内进行代码功能拆分。

 

除了上述三个应用,我们还需要注意的是:

  1. 不允许在方法内部定义静态局部变量
  2. 方法内定义的局部变量,作用范围为:自定义位置起,至方法结束,在此期间,不允许普通代码块内声明同名的局部变量。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值