OCJP(310-065)精选笔记之-变量声明 (Variable Declaration)

Java里有两种类型的变量

  • 主数据类型变量(Primitive):8种
  • 引用变量(Reference variables):可以指向声明某个类型或者其子类型(compatible type)的的任何对象
Primitive
  • All six number types are signed.The leftmost bit (the most significant digit) isused to represent the sign, where a 1 means negative and 0 means positive
  • 所有6种数据类型是有符号的。最高位表示符号,1是负数0是正数
  • 正数最大范围比负数的小1,因为0是作为正数存储的

数据类型的范围见下表

rang of numeric primitives

  • 对布尔类型(boolean)来说没有范围,只能是true或者false。实际由几位来存储不同的虚拟机各不同
  • 字符类型(char)包含一个16比特的Unicode字符
  • Unicode字符通常用无符号16比特整数表示,所以有216个值,范围从0到65535
实例变量(Instance Variables)
  • Can use any of the four access levels能用任何一种访问控制修饰符
  • 可以用final,transient
  • 不能用abstract,synchronized,strictfp,native和static
本地变量(Local Variables)
  • 又可以被称作automatic,stack或者method variables
  • Local变量是指定义在method内的变量
  • 对象只在堆上创建,而local 对象引用在栈上。当local变量在栈上,且是一个对象引用。对象仍然在堆上被创建。没有栈对象这一说,只有栈变量
  • Local 变量可以用final
  • 如果在没有赋值前就使用local变量,会编译不通过,因为local变量没有缺省值
  • 用和instance变量同样的名字命名local变量是允许的。比较常见的是以下这种情况:

class Foo {
    int size = 27;
    public void setSize(int size) {
        this.size = size;
    }
}

最后用图来比较下变量和方法在修饰符上的区别

comparison of modifiers on variables vs.methods

数组(Array)
  • Arrays可以包含primitives或者Object rreference
  • 但是array本身永远是个堆上的对象(object on the heap),即使它包含primitive成员
  • 声明中包含数组size永远都是非法的。直到你实例化了这个数组对象,虚拟机(JVM)才会去分配空间,这个时候数组size才有用。
  • 声明数组举例:

//声明primitive型数组
int[] key;          //推荐
int key [];         //合法但不推荐,可读性不好

//声明object reference数组
Thread[] threads;   //推荐
Thread threads [];  //合法但不推荐,可读性不好 

//声明多维数组(数组的数组)
String[][] occupantName;
String[] managerName [];
}


变量的修饰符

Final
  • 对primitive,表明这个变量的值不能再被改变
  • 对bject reference variable,被指向的对象是可改的,但是该reference variable不可以变,比如指向别的object或者置null
Transient
  • 当instance variable用transient时,你是在告诉JVM当序列化(serialize)这个对象的时候,忽略这个变量
Volatile
  • 告诉JVM当线程要获取这个变量的时候,总是从内存里拷贝一份给自己
  • 只能用于instance variable
  • 你可能会用同步(synchronization),而不是volatile来确保线程安全
Static
  • 可以用static的地方包括:
  1. 方法
  2. 变量
  3. 内部类(nested class),这个类必须是在另一个类里的,不能在一个方法里
  4. 初始化代码块(initialization)
  •  不可以用static的地方:
    1. 构造体
    2. 类(除非是内部的)
    3. 接口
    4. 方法内的本地内部类(Method local inner classes)
    5. 内部类的方法和变量
    6. 本地变量
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值