变量概述
JAVA变量分为两种:primitive主数据类型和对象引用,变量具有大小和类型.
主数据类型保存基本类型的值,包括整数,布尔,浮点数
对象的引用保存的是对象的引用.(PS废话)
X类型的Y对象,此处类型与类是相通的同义字
变量分类之主数据类型
主数据类型具有不同的大小和名称,如下所示(共8种):
boolean true or false
char 16 0-65535
byte 8 -128-127
short 16 -32768-32767
int 32 -2147483648-2147483647
long 64 -? ~ +(?-1)
float 32 范围规模可变
double 32 范围规模可变
如float f=32.5f
注意后缀F,否则所有带小数点的值都会被当做double处理
根据类型大小,不可将范围大的变量内容放入范围小的变量,反之,则可以.
如int x=24;byte b=x;不可以
顺带提一句命名规则:
名称必须以字母,下划线或美元符号开头,不可用数字开头,名称不可与保留字相一致.
常见保留字
final native strictfp transient volatile default assert
instanceof interface package this finally throws const goto enum
变量分类之对象引用
1)事实上不存在对象变量,只存在引用到对象的变量.
2)对象引用变量保存的是存取对象的方法,对象本身并没有放进变量中
3)它并不是对象的容器,而是类似指向对象的指针,对象只会存在于可回收垃圾的堆上,因此不会知道其实际装载的是什么.
4)与主数据类型区别在于:
主数据类型变量以字节代表实际的变量值
对象引用变量以字节表示取得对象的方法
如mydog.bark();代表名为mydog的引用对象变量来引用对象上的bark().
5)对于任何一个JVM来说,所有的引用大小都一样,所有的对象引用具有相同的大小
6)引用变量不同于指针,在于其不可运算
7)对引用变量使用圆点运算符可存取其方法或实例变量
8)没有引用到任何对象的引用变量的值为null值
对象的声明,创建和赋值
1.声明一个引用变量
Dog mydog
要求JVM分配空间给引用变量,固定引用变量永远是Dog类型(只是类型锁定,若加上final则引用对象锁定)
2.创建对象
new Dog()
要求JVM分配堆空间给新建立的对象
3.连接对象和引用
Dog mydog=new Dog();
设定对象的引用,类似于指针指向这个新建立的对象
引用对象的辨析
Book b=new Book();
Book c=new Book();
声明两个book的引用变量并创建两个book对象,接着赋值给引用变量,此时两个book对象生活在堆上
Book d=c;
声明新的book引用变量,并将c的值赋值给d,代表c的字节组合拷贝给变量d.则c,d引用到同一对象(1台电视对应两个遥控器)
c=b;
同上,b和c引用相同对象
注:要注意到若某对象无引用变量指向,则被抛弃,作为垃圾收集器
数组对象
数组是个对象,所以数组本身绝对不会是主数据类型,只有装载主数据类型的数组,没有主数据类型的数组
数组变量是数组对象的遥控器(指针),所以创建数组过程如下
int[] nums;
nums=new int[7]
num[0]=6;
......
num[6]=1;
数组中每个元素都是变量,包括主数据类型或引用变量,可以放进此类型变量中的值都可以作为此类型数组的元素
但在DOG数组中DOG[]每个都可以装载一个DOG?答案是否定的,因为引用变量只是保存引用,不保存对象本身.
综上所述,只能装载引用变量
创建DOG数组(重难点)
1.声明Dog数组变量
Dog[] pets;
2.创建大小为7的Dog数组,并赋值给Dog[]类型变量pets
pets=new Dog[7];
此时数组只有对Dog的引用,但缺少实际的对象
3.创建新的Dog对象并将其赋值给数组元素
pets[0]=new Dog();
.......
以此类推
此时数组既有对Dog的引用,也有实际的对象
附录:
局部变量:声明在方法中的变量