八、Java从头开始-变量的声明

变量的声明

 

变量的声明其实并不陌生,在之前的章节里就大量使用,比如上篇通讯薄类中,定义了姓名、电话、地址三个变量,这些变量都属于primitive主数据类型,而还有一种实例变量也叫引用

《人兽杂交》这部电影相信大多数的人都看过,讲的是两名反叛科学家将人类和动物的DNA进行杂交,创造出一个生物“Dren”,它迅速长大,但这个技术还不完全成熟,杂交基因的Dren因故发生了突变,变得暴躁,有攻击性,最终被消灭,导致了悲剧性的结局。

Java的角度来看,两名科学家强行将人类型变量放入动物类型变量,结果只会和电影结局一样悲剧。Human ms = new Animal();谢天谢地,这样的代码过不了编译器这关,编译器会指出大部分的问题。

为了保证我所用变量能够正确按照我的意图发挥作用,我必须声明每个变量的类型,指定它是int,或者是double类型,又或者是引用创建好的对象。这里,变量可以分为两种:primitive主数据类型对象引用,primitive主数据类型用来保存基本类型的值,包括整数、浮点数、布尔等,而对象引用保存的是对象的引用。

记住声明变量的规则:变量必须拥有类型;另一条规则是必须要有名称。

一、         primitive主数据类型

在《我的九九乘法表》这篇里,已经介绍过该怎么去定义基本类型的变量,这里不再重复说明,但在定义这些不同类型的变量时应该注意一些细节,比如确保别出现“溢位”的现象,还有避开那些关键字。
八、Java从头开始-变量的声明_第1张图片

primitive主数据类型就好比星巴克的咖啡杯,有不同的大小,而每种大小都有个名称,像是“小杯”、“中杯”、“大杯”、“超大杯”,每个杯子能容纳的咖啡是固定的。
八、Java从头开始-变量的声明_第2张图片

 

1、小心溢出来

一个咖啡杯无法装下一整壶的咖啡。如果非要把一壶咖啡倒入一个咖啡杯,很明显会损失一部分咖啡,在Java里这种现象叫溢位。比如:

 

int a = 33;
byte b = a;  //不能通过编译

也许有人会问8byte类型明明可以装得下33,但是为什么不能通过编译呢?是的,明明可以容得下33,你知我知,谁都知道,但是偏偏编译器它不知道,它只知道你把一个大容器放进了一个小容器,会有溢位的风险,虽然我们肉眼观察是可行的,但别指望编译器也会肉眼观察。所以编译器不容许将大类型容器放到小类型容器,但是反之是可以的。

2、避开Java的保留字

现在我已经掌握声明变量的规则一:变量必须拥有类型,现在来看看第二个规则:变量必须要有名称。在给变量取名时,需要注意一下几点要求:

Ø  名称必须以字母、下划线(_)$符号开头,不能以数字开头;

Ø  除了第一个字符外,后面就可以用数字。反正不要用在第一个字符就行;

Ø  符合上述两条规则,你就可以随意命名,但还得要避开Java的保留字
八、Java从头开始-变量的声明_第3张图片
 

二、         对象的引用

我们通常在Java讨论会上会听到:“我创建了一个叫u1User对象、我把一个String传入了某个方法中、这方法返回一个Pet对象、我把创建好的Father对象放进了myFather这个变量中”等等。其实这些都是对对象引用的误解,认为它和primitive主数据类型的变量声明一样,将对象装进变量中。

事实上并没有一个超巨型的杯子可以放大到能够装载所有对象,对象只会存在在可垃圾回收的堆上。所以,并没有对象变量这种东西,只有引用到对象的变量,它并不是存储对象的容器,而是类似指向对象的指针。还是很抽象?先看看下面这个例子:


八、Java从头开始-变量的声明_第4张图片

理解了主数据类型变量和引用变量之间的区别,来看看怎样利用引用变量来存取对象里的变量和方法:

1、  首先声明一个引用变量myFather然后指向创建好的Father对象

Father myFather = new Father();

2、  使用圆点符号来操作对象的状态和行为

myFather.age = 33;                     //存取age变量为33

myFather.makeMoney();           //让他去赚钱吧

 

 

垃圾收集

前面提到了对象只会存在在可垃圾回收的堆上,那么这里垃圾回收又是怎么一回事,为什么需要回收,什么样的对象才会被看作是垃圾。先来看看下面两个引用对象:


八、Java从头开始-变量的声明_第5张图片
 
  

把变量b赋值给变量a,两者这时都

具有相同的值。

对象1被抛弃,不再被任何变量所引

用,这时Java虚拟机就把它标记为可

垃圾回收的。

 

当某个对象不再需要时,在C++中,使用对象结束后必须明确删除该对象,否则,在关闭程序之前该对象将不会释放所占用的内存,但Java的设计者对这个问题很重视,他认为内存释放这一繁琐的操作不应由程序员来负责,因此设计了一种新的编程范例,这就是垃圾回收机制。Java会自动帮我们回收没有使用的对象来释放占用的内存。

 

你可能感兴趣的:(java)