Java基础篇:一个简单的类

102 阅读3分钟

让我们先从一个简单的例子来开始对类的研究。下面定义了一个名为box的类,它定义了3个实例变量:width,height和depth。当前,box类不包含任何方法(但是随后将增加一些)。

class Box { 
 double width; 
 double height; 
 double depth; 
}

前面已经说过,一个类定义一个新的数据类型。在本例中,新的数据类型名为Box。 你可以使用这个名字来声明Box类型的对象。记住类声明只是创建一个模板(或类型描述),它并不会创建一个实际的对象。因此,上述代码不会生成任何Box类型的对象实体。 要真正创建一个Box对象,你必须使用下面的语句:

Box mybox = new Box(); // create a Box object called mybo

这个语句执行后,mybox就是Box的一个实例了。因此,它将具有“物理的”真实性。现在,先不必考虑这个语句的一些细节问题。

每次你创建类的一个实例时,你是在创建一个对象,该对象包含它自己的由类定义的每个实例变量的拷贝。因此,每个Box对象都将包含它自己的实例变量拷贝,这些变量即width,height,和 depth。要访问这些变量,你要使用点号“.”运算符。点号运算符(dot operator)将对象名和成员名连接起来。例如,要将mybox的width变量赋值为100,使用下面的语句:

mybox.width = 100;

该语句告诉编译器对mybox对象内包含的width变量拷贝的值赋为100。通常情况下,你可以使用点号运算符来访问一个对象内的实例变量和方法。 下面是使用Box类的完整程序:

/* A program that uses the Box class. 
Call this file BoxDemo.java 
*/ 
class Box { 
 double width; 
 double height; 
 double depth; 
} 
// This class declares an object of type Box. 
class BoxDemo { 
public static void main(String args[]) { 
 Box mybox = new Box(); 
 double vol; 
 // assign values to mybox's instance variables 
 mybox.width = 10; 
 mybox.height = 20; 
 mybox.depth = 15; 
 // compute volume of box 
 vol = mybox.width * mybox.height * mybox.depth; 
 System.out.println("Volume is " + vol); 
 } 
 }

你应该把包含该程序的的文件命名为BoxDemo.java,因为main( )方法在名为 BoxDemo 的类中,而不是名为Box的类中。当你编译这个程序时,你会发现生成了两个“.class”文件,一个属于box,另一个属于BoxDemo。Java编译器自动将每个类保存在它自己的“ .class ”文件中。没有必要分别将Box类和Boxdemo类放在同一个源文件中。你可以分别将它们放在各自的文件中,并分别命名为Box.Java和 BoxDemo.java。 要运行这个程序,你必须执行BoxDemo.class。运行该程序后,你会看见如下输出:

Volume is 3000.0

前面已经讲过,每个对象都含有它自己的、由它的类定义的实例变量的拷贝。因此,假设你有两个Box对象,每个对象都有其自己的depth,width和height拷贝。改变一个对象的实例变量对另外一个对象的实例变量没有任何影响,理解这一点是很重要的。例如,下面的程序定义了两个Box对象:

// This program declares two Box objects. 
class Box { 
  double width; 
  double height;
  double depth; 
} 
class BoxDemo2 { 
 public static void main(String args[]) { 
  Box mybox1 = new Box(); 
  Box mybox2 = new Box(); 
  double vol; 
// assign values to mybox1's instance variables 
mybox1.width = 10; 
mybox1.height = 20; 
mybox1.depth = 15; 
/* assign different values to mybox2's 
instance variables */ 
mybox2.width = 3; 
mybox2.height = 6; 
mybox2.depth = 9; 
// compute volume of first box 
vol = mybox1.width * mybox1.height * mybox1.depth; 
System.out.println("Volume is " + vol); 
// compute volume of second box 
vol = mybox2.width * mybox2.height * mybox2.depth; 
System.out.println("Volume is " + vol); 
} 
}

该程序产生的输出如下所示:

Volume is 3000.0 
Volume is 162.0 

你可以看到,mybox1的数据与mybox2的数据完全分离。