技术开发 频道

Java程序设计知识与技能(六)

【IT168 技术教程】

回顾对象的历史
 
  早些时候的编程语言和初级程序员将每个变量看作相互无关的实体。例如,如果一个程序需处理某个日期,则要声明三个单独的整数:
 
int day, month, year;
 
  上述语句作了两件事,一是当程序需要日、月或年的有关信息时,它将操作一个整数;二是为那些整数分配存储器。尽管这种作法很容易理解,但它存在两个重大缺陷。首先,如果程序需同时记录几个日期,则需要三个不同的声明。例如,要记录两个生日,你可能使用:
 
int myBirthDay, myBirthMonth, myBirthYear;
int yourBirthDay, yourBirthMonth, yourBirthYear;
 
  这种方法很快就会引起混乱,因为需要的名称很多。
  第二个缺陷是这种方法忽视了日、月和年之间的联系并把每个变量都作为一个独立的值,每个变量都是一个独立单元(在本例中为date)的一部分并被相应地处理。
 
创建一个新类型
 
为克服上述两种缺陷,Java编程语言使用类来创建新类型。请看下列原始类型声明:
 
int day;
 
  Java编程语言被用来分配一定量的存储器并解释该存储器的内容。于是,要定义一个新的类型,你必须指出需要多大存储器和如何解释存储器内容。这不是根据字节数或位的顺序和含义来做,而是根据已经定义的其它类型来做。
 
  例如,要定义一个表示日期的类型,你需要足够的存储器存储三个整数变量;进而,日、月和年的意义即由这些整数变量给出。如下所示:
      class MyDate {
      int day;
      int month;
      int year;
      }
 
  词class是Java编程语言的一个关键字,必须全部小写。名称MyDate按照大小写的有关约定处理,而不是由语意要求来定。
  注意:class 不仅仅是一个集合数据类型,这个问题以后还将进一步讨论。
 
一个变量可被声明为归属于类型MyDate,从而日、月和年部分将被隐含声明。例如:
 
MyDate myBirth, yourBirth;
 
使用这个声明,Java编程语言允许变量的部分(day, month和year)通过调用成员和使用点(·)运算符而被访问。例如:
myBirth.day = 26;
myBirth.month = 11;
yourBirth.year = 1960;
 
创建一个对象
 
  当任何原始类型(如boolean, byte, short,char,ient,long,float或double类型) 的变量被声明时,作为上述操作的一部分,存储器空间也同时被分配。使用非原始类型(如String或class)的变量的声明不为对象分配存储器空间。
 
    事实上,使用class类型声明的变量不是数据本身,而是数据的引用(reference)。
 
  注意:你也可以认为引用是一个指针(pointer), 这可能会有助于你的理解。实际上, 在大多数实现中, 也确实可以这样认为。值得注意的是, Java编程语言实际上不支持指针数据类型。
 
在你可以使用变量之前,实际存储器必须被分配。这个工作是通过使用关键字new来实现的。如下所示:
 
MyDate myBirth;
myBirth = new MyDate ();
 
  第一个语句(声明)仅为引用分配了足够的空间,而第二个语句则通过调用对象为构成MyDate的三个整数分配了空间。对象的赋值使变量myBirth重新正确地引用新的对象。这两个操作被完成后,MyDate对象的内容则可通过myBirth进行访问。
 
  假使定义任意一个class XXXX, 你可以调用new XXXX () 来创建任意多的对象,对象之间是分隔的。一个对象的引用可被存储在一个变量里,因而一个"变量点成员"(如myBirth.day)可用来访问每个对象的单个成员。请注意在没有对象引用的情况下,仍有可能使用对象,这样的对象称作"匿名"对象。
 
创建一个对象----存储器分配和布局
 
在一个方法体中,声明
 
MyDate today
today = new MyDate();
 
仅为一个引用分配存储器
 
today
 
关键字new意味着存储器的分配和初始化
 
MyDate today;
today = new MyDate();
 
赋值则建立了引用变量,从而它可适当地引用新的创建对象
MyDate today;
today = new MyDate();
 
使用一个语句同时为引用today和由引用today所指的对象分配空间也是可能的。
MyDate today = new MyDate ();
 
引用类型的赋值
 
  在Java编程语言中,用类的一个类型声明的变量被指定为引用类型,这是因为它正在引用一个非原始类型,这对赋值具有重要的意义。请看下列代码片段:
 
     int x = 7;
     int y = x;
     String s = "Hello";
     String t = s;
 
四个变量被创建:
  两个原始类型 int 和两个引用类型String。x的值是7,而这个值被复制到y;x 和 y是两个独立的变量且其中任何一个的进一步的变化都不对另外一个构成影响。至于变量 s 和 t,只有一个String 对象存在, 它包含了文本"Hello" ,s 和 t均引用这个单一的对象。将变量t 重新定义,则新的对象World被创建,而 t 引用这个对象。
0
相关文章