12.Java静态变量与常量

12.Java静态变量与常量
转载请保留原文链接: http://dashidan.com/article/java/basic/12html

`static`修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们. 因此`static`修饰的变量和方法,可以在它所属的对象创建之前访问,不用创建对象.

① 静态变量

访问语法为:

    类名.静态方法名(参数列表...) 
    类名.静态变量名</p> 
按照是否静态的对类成员变量进行分类可分两种: * 被static修饰的变量,叫静态变量或类变量. * 没有被static修饰的变量,叫实例变量.

1.静态变量与实例变量区别:

  1. 静态变量在内存中只有一个拷贝(节省内存), JVM只为静态分配一次内存.在加载类的过程中完成静态变量的内存分配. 可用类名直接访问, 当然也可以通过对象来访问(不推荐).
  2. 对于实例变量, 每创建一个实例, 就会为实例变量分配一次内存, 实例变量可以在内存中有多个拷贝, 互不影响, 需要通过实例的引用来访问.

2.静态变量应用场景:

  • 在对象之间共享值时
  • 方便访问变量时

猫都有4条腿,2只眼睛一张嘴.这3条属性是猫的通用属性,我们便可以把这三个属性设置为static静态变量.我们在定义静态变量时,通常将所有字母大写,与实例变量作区分.

静态方法可以直接通过类名调用, 任何的实例也可以调用.因此静态方法只能访问所属类的静态变量和静态方法, 不能用thissuper关键字.不能直接访问所属类的实例变量和实例方法(没有static修饰的成员变量和成员方法).

示例代码:

package com.dashidan.lesson11;

/**
 * 大屎蛋教程网-dashidan.com
 * <p>
 * Java教程基础篇: 11. Java静态变量与常量
 */
public class Demo1 {
    public static void main(String[] args) {
        /** 出处猫的静态属性*/
        System.out.println("MOUSE_NUM: " + Cat.MOUSE_NUM);
        System.out.println("EYE_NUM: " + Cat.EYE_NUM);
        System.out.println("LEG_NUM: " + Cat.LEG_NUM);
    }
}

Cat类:

package com.dashidan.lesson11;

/**
 * 大屎蛋教程网-dashidan.com
 * <p>
 * Java教程基础篇: 11. Java静态变量与常量
 * Cat 类
 */
public class Cat {
    public static int MOUSE_NUM = 1;
    public static int EYE_NUM = 2;
    public static int LEG_NUM = 4;
}

输出:

MOUSE_NUM: 1
EYE_NUM: 2
LEG_NUM: 4

② Java常量

final是Java的一个保留关键字, 可以声明成员变量、方法、类以及局部变量. 被声明final的变量, 一但赋值便不能再次修改.编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误.final变量经常和static关键字一起使用作为常量.

例:

public static final WEB_NAME = "大屎蛋教程网."
public static final WEB_URL = "http://dashidan.com"

1.final关键字要点

  • 方法前面加上final关键字,代表这个方法不可以被子类的方法重写.
  • 类名前面加上final关键字,代表这个方法不可以被继承.
  • final关键字可以用于成员变量、局部变量、方法以及类.
  • final成员变量必须在声明的时候初始化或者在构造器中初始化, 否则就会报编译错误.
  • 不能对final变量再次赋值.
  • fina局部变量必须在声明时赋值.
  • 在匿名类中所有变量都必须是final变量.
  • final方法不能被重写.
  • final类不能被继承.
  • 接口中声明的所有变量本身是final的.
  • final和abstract这两个关键字是反相关的, final类就不可能是abstract的.
  • final方法在编译阶段绑定, 称为静态绑定(static binding).
  • 没有在声明时初始化final变量的称为空白final变量(blank final variable), 必须在构造器中初始化, 或者调用this()初始化. 否则编译器会报错.
  • 将类、方法、变量声明为final能够提高性能, 这样JVM就有机会进行估计,然后优化.
  • 按照Java代码惯例,final变量就是常量, 而且通常常量名要大写
  • 对于集合对象声明为final指的是引用不能被更改, 但可以向其中增加, 删除或者改变内容.

涉及到了很多类的继承相关的概念, 可以参考Java教程进阶篇Java对象相关的文章后, 再回头看这些知识就很好理解了.Java对象

③ 相关文章

Java教程入门到精通

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值