primitive主数据类型与引用

《Head First Java》
第三章 认识变量
Java程序设计基础三
变量有两种:primitive主数据类型和引用

对象的状态(instance variables)
局部(local)变量(声明在方法中的变量)
参数(arguments 传递给方法的值)
返回类型(执行方法所返回的值)

一. 声明变量
变量有两种:primitive主数据类型(用来保存基本类型的值,如:整数,布尔和浮点数等)和对象的引用(保存的是对象的应用)

声明对象的规则:
(1)variables must have a type.(变量必须要有类型)
(2)Variables must have a name.(变量必须要有名称)
注意:当你读“X类型的Y对象”时,类型(type)此时与类是相通的同义字。

int(类型) count(名称);

二. Primitive主数据类型
1-变量(有大小与类型)就好像是杯子,是一种容器,能装载某些事物。
2-在Java中,primitive主数据类型有不同的大小和名称;声明变量时,必须要说明类型。
3-Java中四种基本整数类型:long,int,short,byte。
4-每种primitive主数据类型变量有固定的位数(就是杯子大小)
5-存放数值的primitive主数据类型有下列六种大小:byte(8) short(16) int(32) long(64) float(32) double(64)

Primitive主数据类型
类型 位数 值域
boolean (Java虚拟机决定) true或false
char 16 bits 0 ~ 65535

数值带正负号
integer(整数)
byte 8bits -128~127
short 16bits -32768~32767
int 32bits -2147483648~2147483647
long 64bits -很大~——很大

浮点数
float 32bits 范围规模可变
double 64bits 范围规模可变

float f = 32.5f;
注意:“f”。除非加上f,否则所有带小数点的值都会被Java当作double处理。

溢位:
小心别溢出,要确保变量能存下所保存的值。(其实可以用小杯子装大值,但会损失某些信息,就是说的溢位)

给变量赋值的几种方式:
(1)在等号后面直接打出(x = 12,isGood = true)
(2)使用其它变量的值(x = y)
(3)两种方式的组合(x = y + 43)

注意:编译器在安全性的问题上比较保守。

三. Java关键字
根据以下规则来帮助类,方法,变量命名:
(1)名称必须用字母,下划线(_)或$符号开头,不能以数字开头。
(2)除了第一个字符之外,后面就可以用数字;只要不是第一个就行。
(3)只要符合上述规则,就可以随便命名,但要避开Java的保留字(保留字是Java编译器要辨别的关键字)

Primitive主数据类型有8种:
boolean char byte short int long float double

句子表示:Be Careful! Bears Shouldn’t Ingest Large Furry Dogs.

四. 引用变量
问题:非primitive主数据类型的变量又该如何处理呢?换句话说:对象要怎么处理?
(1)实际上没有对象变量这种东西。
(2)只有引用(reference)到对象的变量(3)对象引用变量保存的是存取对象的方法
(4)它不是对象的容器,而是类似指向对象的指针。或者说是地址。
对象只会存在于可回收的垃圾堆上。

Primitive主数据类型变量以字节来表示实际的变量值;对象引用变量以字节来表示取得对象的方法。

使用原点运算符( . )来引用变量表示:
取圆点前面的对象,求出该对象在圆点后面的事物。
例:myDog.bark();
代表名为myDog的变量引用对象上的bark()。

对象引用也只是个变量值;还是会把东西放进杯子中,只是引用放进去的是遥控器。

Primitive主数据类型变量
byte x = 7;
代表把7的字节放到变量中(00000111).

引用变量
Dog myDog = new Dog();
代表Dog对象的方法以字节的形式放到变量中。对象本身并没有放在变量中。

五. 对象的声明与赋值
对象的声明,创建与赋值有3个步骤:
(1)Dog myDog (3)= (2)new Dog();

  1. 声明一个引用变量:Dog myDogJava虚拟机分配空间给引用变量,变量命名为myDog。引用变量被永远固定为Dog类型。
  2. 创建对象:new Dog();Java虚拟机分配堆空间给新建对象Dog。
  3. 连接对象与引用新的对象Dog赋值给引用变量myDog。

所有的对象引用都具有相同的大小,不管它实际上所引用的对象大小。

对象引用(Object Reference)
就好像是个遥控器,可以被设定来控制不同的对象;声明成什么之后就是什么了,如:Dog。如果被标记成final的话,一旦被指定给某个Dog之后就不能赋值给除它以外的事物;被固定。

六. 可回收堆空间
c与d引用到同一对象(相同的值拷贝两份,就像一台电视两个遥控器)。
Book c = null;
将null值赋值给c(空指针引用);不在引用任何事物,但可以引用其它事物。

七. 数组
数组犹如杯架
(1)声明一个数组变量;数组变量是数组对象的遥控器。 int[] nums;
(2)创建大小为7的数组,并赋值给int[]的变量nums。 nums = new int[7];
(3)赋值给int数组的每一个元素一个int值;每一个元素为int类型的变量。
(4)注意到元素本身是primitive主数据类型,数组却是个对象(int array object( int[] ))。

数组也是对象
(1)需要快速,有序,有效率地排列元素,数组是不错的选着。
(2)数组可以让你使用位置索引来快速,随机地存取其中的元素;数组中的每一个元素都是变量。
(3)问题:在Dog的数组中(Dog[])每个可以装载一个Dog吗?答:不能,引用变量只会保存引用,不是对象本身。Dog数组的元素持有的是Dog的遥控器。
(4)强调:数组是个对象(不管被声明来装载primitive主数据类型或对象引用,它就是个对象)。

创建Dog对象
(1) 声明一个Dog数组变量。 Dog[] pets;
(2) 创建大小为7的Dog数组,赋值给Dog[]类型变量pets。 pets = new Dog[7];
(3) 创建新的Dog对象并赋值给数组的元素。Dog数组中只有Dog引用变量;还需要Dog对象。 pets [0] = new Dog(); pets [1] = new Dog();

控制Dog(通过引用变量)
Dog fido = new Dog();
fido.name = “Fido”;
创建Dog对象—使用圆点运算符—操作引用变量fido—存取name变量。

使用数组索引(位置)就可以操作特定对象:
Dog[] myDogs = new Dog[3];
myDogs[0] = new Dog();
myDogs[0].name = “Fido”;
myDogs[0].bark();

Java注重类型
一旦数组被声明出来,就只能装入声明的元素。

要点:
引用变量的值代表位于堆之对象的存取方法。

相关文章: