OCJP(310-065)精选笔记之-变量声明 (Variable Declaration)
2015-01-28 17:23
369 查看
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是作为正数存储的
数据类型的范围见下表
对布尔类型(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 variablesLocal变量是指定义在method内的变量
对象只在堆上创建,而local 对象引用在栈上。当local变量在栈上,且是一个对象引用。对象仍然在堆上被创建。没有栈对象这一说,只有栈变量
Local 变量可以用final
如果在没有赋值前就使用local变量,会编译不通过,因为local变量没有缺省值。
用和instance变量同样的名字命名local变量是允许的。比较常见的是以下这种情况:
class Foo { int size = 27; public void setSize(int size) { this.size = size; } }
最后用图来比较下变量和方法在修饰符上的区别
数组(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的地方包括:方法
变量
内部类(nested class),这个类必须是在另一个类里的,不能在一个方法里
初始化代码块(initialization)
不可以用static的地方:
构造体
类(除非是内部的)
接口
方法内的本地内部类(Method local inner classes)
内部类的方法和变量
本地变量
相关文章推荐
- OCJP(310-065)精选笔记之-类构造体声明(Constructor Declaration)
- OCJP(310-065)精选笔记之-声明接口(Declare Interface)
- OCJP(310-065)精选笔记之-标识符(Identifiers)
- OCJP(310-065)精选笔记之-Java语言编码规范(Code Conventions)
- OCJP(310-065)精选笔记之-访问控制修饰符 (Access Modifiers)
- OCJP(310-065)精选笔记之-封装(Encapsulation)
- OCJP认证教程(310-065)精选笔记之-目录
- OCJP(310-065)精选笔记之-继承(Inheritance)
- OCJP(310-065)精选笔记之-枚举(Enum)
- OCJP(310-065)精选笔记之-JavaBeans标准
- OCJP(310-065)精选笔记之-多态(Polymorphism)
- OCJP(310-065)精选笔记之-声明类(Declare Class)
- OCJP(310-065)精选笔记之-非访问控制修饰符 (Nonaccess Method Modifiers)
- C++ Primer学习笔记 之 变量的声明与定义
- php学习笔记(一)变量的声明与使用
- iOS开发笔记--声明全局变量
- 老虞学GoLang笔记-变量声明与初始化
- C语言学习笔记(一)变量声明的规则
- 【js学习笔记-023】-- 变量声明
- php——学习笔记,变量声明以及3种赋值方式