Java学习笔记14——常量与变量

曾和儿子分享过所谓计算机程序,都是编写代码进行“数据处理和处理数据”而已。任何编程语言编写何种应用,数据都必须以某种方式表示。掌握变量和常量的用法,可以使代码的可维护性、可读性大大提高。

一、常量

常量就是在程序中固定不变的量,一旦被定义,它的值就不能再被改变。

1、声明常量

在定义常量时需要对常量进行初始化,初始化后,常量的值是不允许再进行改变的。在Java语言中,为了区别常量与变量,常量名称通常用大写字母。声明常量使用final关键字,语法为:

final  数据类型 常量名称  [= 初始化的值 ]

2、常量应用示例

当常量用于一个类的成员变量时,必须给常量赋值,否则会出现编译错误。

如下代码示例,在类中声明一个常量PRICE,并在main()方法中打印它的值。

public class Zoo {
    static final float PRICE = 2.5F;
    public static void main(String[] args) {
        System.out.println("动物园门票价格是:" + PRICE + "元。");
    }
}

上面代码中,定义了常量PRICE,并赋给初始值,在主函数中打印PRICE的值。

二、变量

在程序中存在大量的数据来代表程序的状态,其中有些数据的值在程序的运行过程中会发生改变,这种数据被成为变量。在程序中通过改变变量的值来实现程序的逻辑功能。

1、声明变量

在Java语言中,所有的变量在使用前必须先声明,声明多个变量时使用逗号隔开(建议每行声明一个变量),分号结尾,基本格式如下:

类型  变量名 [ = value], 变量名 [ = value], 变量名 [ = value] ;

int x,y,z;                  // 声明3个int类型变量:x,y,z
int a = 3, b = 4, c = 5;    // 声明3个整数a、b、c变量并赋初始值
byte z = 22;                // 声明并初始化字节型变量z
String s = "Java example";  // 声明并初始化字符串型变量s
double pi = 3.14;           // 声明双精度浮点数变量pi,并赋值
char x = 'a'                // 声明字符型变量x,并赋值‘a’,使用单引号

一个知识点:

声明一个变量时,编译程序会在内存里开辟一块足以容纳这个变量的内存空间给它。不管变量的值如何改变,都永远使用相同的内存空间。因此,要学会使用变量,它是一种节省内存的方式。常量是不同于变量的一种类型,它的值是固定的,如整数常量、字符串常量。通常给变量赋值时,会将常量赋值给它。

2、变量的分类

变量是有作用范围的,一旦超出它的范围,就再无法使用这个变量(被分配的内存会给回收)。

按照作用范围进行划分,Java中的变量分为成员变量、局部变量和类变量。

1)成员变量

成员变量声明在一个类中,在方法、构造方法和语句块之外。它的作用范围是整个类,也就是在这个类中都可以访问。当一个对象被实例化之后,每个成员变量的值就跟着确定。

成员变量在对象建立的时候创建,在对象被销毁的时候销毁。成员变量可以直接通过变量名访问,但在静态方法以及其它类中,就要通过类的引用访问。

成员变量的值应该至少被一个方法、构造函数或者语句块引用,使得外部能够通过这些方式获取成员变量的信息。

访问修饰符可以修饰成员变量,成员变量对于类中的方法、构造函数或者语句块是可见的。一般情况下应该把成员变量设为私有(private)。通过使用访问修饰符可以使成员变量对子类可见(public,protected)。

成员变量具有默认值,数值型变量的默认值是0,布尔型变量默认值是false,引用类型变量的默认值是null。

成员变量的值可以在声明时指定,也可以在构造方法中指定。如果没有指定,则使用默认值;如果通过上面方式指定(初始化),则对象创建时,默认值是初始值。

public class MemberVar {
    private int age; // 声明私有的成员变量,仅在该类中可见
    public void setAge(int a) {
        age = a;
    }
    public void printMember() {
        System.out.println("我儿子的年龄是:" + age);
    }
    public static void main(String[] args) {
        MemberVar emp = new MemberVar();
        emp.setAge(19);
        emp.printMember();;
    }

}

上面代码声明的成员变量age,使用了private修饰符,它只能在MemberVar类中访问。但是可以在MemberVar类中定义相关方法,通过此类创建的对象来访问。

2)局部变量

局部变量是在方法、构造函数或者语句块中声明,它们在所在方法、构造方法、语句块被执行的时候创建,当该方法、构造方法、语句块执行完毕后,变量将会被销毁。访问修饰符不能用于局部变量,局部变量只在声明它的方法、构造方法、语句块中可见。

系统不会给局部变量没有默认值,所以局部变量被声明后,必须经过初始化进行赋值后才能使用,否则会出现编译错误。

3)类变量(静态变量)

类变量,也称为静态变量,在类中使用static关键字声明,但必须在方法、构造方法、语句块之外。无论一个类创建多少个对象,类只拥有静态变量的一份拷贝(只在内存中有一个地址指引)。静态变量的访问格式一般是:

类名.类变量名

类变量和成员变量特别相似,一旦声明(未赋值),会有默认值。数值型变量的默认值是0,布尔型变量默认值是false,引用类型变量的默认值是null。

类变量的值可以在声明时指定,也可以在构造函数中指定(赋值)。除此之外,还可以在静态语句块中初始化(使用static 关键字和{} 中定义的代码块,会在类初次加载时运行)。

在当前类中访问类变量(静态成员变量)可以不加类名直接访问,也可以使用“类名.静态成员变量名)方式访问。但是其它类想要访问静态变量,必须使用“类名.静态变量名”来引用。

3、Java中静态变量(类变量)和成员变量的区别

Java中静态变量(类变量)和成员变量的区别是否被static关键字修饰,被static关键字修饰的叫静态变量(类变量),否则即成员变量。两者的区别是:

(1)静态变量在内存中只有一份拷贝(节省内存),JVM只为静态变量分配一次内存,在加载类的过程中完成静态变量的内存分配及初始化默认值,可以通过类名直接访问。

(2)成员变量是每创建一个对象,就会为成员变量分配一次内存。创建多个对象,成员变量就有多个拷贝,互不影响。成员变量属于每个对象,而静态变量属于这个类创建的所有对象共享。

public class QuBieVar {
    private static int staticInt = 0;  // 定义静态变量,并赋值0
    private int random = 0;  // 定义成员变量,并赋值0

    public QuBieVar() {  // 构造方法中初始花静态变量和成员变量
        staticInt++;  // 静态变量自加1
        random++;     // 成员变量自加1
        System.out.println("静态变量staticInt的值:" + QuBieVar.staticInt);
        System.out.println("成员变量random的值:" + random);
        System.out.println("");
    }

    public static void main(String[] args) {
        QuBieVar test1 = new QuBieVar();
        QuBieVar test2 = new QuBieVar();
    }

}

运行上面代码的结果是:

静态变量staticInt的值:1
成员变量random的值:1

静态变量staticInt的值:2
成员变量random的值:1

在上面代码中,无论创建多少个类QuBieVar的对象,永远都只分配一个staticInt变量,所有对象都共享这个变量(对应的同一个内存地址),所有对象修改这个静态变量,都将发生变化;但是创建的任何类的对象,都会分配一个专属的成员变量random,互不影响,因为被分配在不同的内存,有不同的内存指引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值