java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。java中的变量都属于一特定的数据类型,使用前必须申明,申明后必须赋初值。变量的分类:
(1)按声明的位置分位:局部变量和成员变量。局部变量表示方法和语句块内部定义的变量,局部变量必须进行初始化;成员变量表示方法外部,类内部定义的变量,java默认对成员变量进行初始化,所以在定义时可以不赋初值。
(2)按照所属的数据类型分位:基本数据类型和引用数据类型。基础数据类型有数值型(byte、short、int、long、float和double)、字符型(char)、布尔类型(boolean)。byte占1个字节、short占2个字节、int占4个字节、long占8个字节、float占4个字节、double占8个字节,char采用unicode编码占2个字节,boolean由jvm决定;引用类型包括类、接口和数组。
(3)对象的创建和引用:必须使用new关键字来创建对象,使用“.”访问对象的成员或方法,同一类的不同对象具有不同的存储空间,同一类的每个对象共享该类的方法(非静态方法是针对每个对象进行调用,即调用的时候必须使用new关键字创建该类的对象,再由该对象调用该方法)。
几个注意点:
(1)声明为long类型的时候,要在末尾加“l”或者“L”,因为java中看到所有的整数默认为int,如果这样的语句 long a = 8888888888 ,此时java中把该整数当作int,就会截断出错。
(2)声明为float类型必须在数字后面加f,同样,java中看到所有的小数当作double类型,此时就会报错。即使1.2这种小数也不行,计算机小数只是一个近似的表示。
(3)boolean类型不能转换为任意类型。
(4)大的类型转换为小的类型,必须加强制转换符,除了int能转byte、short和char(但是不能超过范围)。
(5)基本数据类型在内存中占一块区域(分配在栈空间),引用类型占两块区域(除了基本类型之外,即四类八种,其他的所有都是引用类型,一块在栈空间,一块在堆空间)。
java中类的对象时引用类型,占有两块区域,例如下面这行代码:
class C{
main()
{
C c1 = new C();//c1是一个引用存储在栈空间中,指向堆内存的对象的空间(就是说c1其实是指针,即在java中其实是指针无所不在啊),但是平时就称c1是一个对象,其实它是对象的一个引用,即对象一定是new出来的,位于堆内存。
}
}
注:在堆内存中存在没有引用指向的对象,垃圾收集器会将它收集掉。
在java中,同一个类的对象有不同的成员变量存储空间(在堆中),当然静态成员变量除外。但是,同一个类的对象共享类的方法。