文章导读
【前面说到Java对象的封装,封装就是把现实世界同类事物的共同特征和行为抽取出来,放到一个新建的类中,并设置类属性(特征)和行为的访问权限,同时提供外部访问类属性和行为的方法。本文在理解Java对象封装的基础上,探讨Java对象的创建和使用。通过本文的学习,你将掌握类和对象的关系以及类和对象的创建和使用。】
本文分成二个小节讲述Java类和对象。第一小节给出了日期类、Person类、Job类三个案例,通过这三个案例可以了解如何创建和声明一个Java类;第二小节讲述类与对象的关系,并通过Fruits案例演示如何对类进行实例化,实例化后的类就是对象。
第一节 Java类的声明和创建
类是把同类事物的共同特征和行为封装在一起的结构体,事物的特征称为属性,事物的行为称为方法,类是抽象的概念集合,表示的是一个共性的产物,类中定义的是属性和方法。例如前面讨论的Fruits类(水果类),Fruits类有属性water(汁液含量)、sugar(糖分含量)、fragrance芳香度,这些属性是水果类所具有的共同特点,汁液含量丰富、糖分含量大、有一定程度的芳香气味。Fruits类也有方法showFruit(),showFruit对外展示水果的汁液含量度、糖分含量度、芳香度,当外部需要了解水果的各种成份含量时,可以调用类的showFruit方法。
在Java中,通过关键字class来声明类,类声明语法如下:
public class 类名
{
//定义类属性部分
属性1的类型 属性1;
属性2的类型 属性2;
……
属性n的类型 属性n;
//定义方法部分
方法1:
……
方法n:
}
一个完整的Java类由类声明和类体构成,类体内容包含在{ }括号之内。
类声明为“public class 类名”,其中class是Java类定义关键字,声明Java类时,类声明需要包含class关键字。public是Java预定义的访问权限关键字,用来修饰被定义类的访问权限,当被定义类修饰为public时,其它定义的外部类就可以访问该类的内部成员和方法。类体包含了类的属性和方法。
例1:定义一个日期类。
public class Date
{
//属性的定义
private int year;
private int month;
private int day;
//方法的定义
//判断是否是闰年
public boolean isRunnian()
{
if( ( year % 4 == 0 && year % 100 != 0) || year % 400 == 0 )
{
return true;
}
else
{
return false;
}
}
//输出日期
public void print()
{
System.out.println("year" + "-" + month + "-" + day);
}
}声明的日期类有year、month、day三个属性,用来存储日期的年、月、日。另外,日期类还提供了isRunnian()和print()两个方法,isRunnian()用于判断当前日期是否是闰年,print()用于输出当前日期。
例2:定义一个Person类
public class Person {
String name ;
int age ;
public void tell() {
System.out.println("姓名:" + name + ",年龄:" + age) ;
}
}声明的Person类有name、age两个属性,用来存储人的姓名、年龄。另外,Person类还提供了tell()方法,用来输出人的姓名、年龄。
如果用类的思想来描述职业信息的话,我们需要从职业这个事物中抽取共同特征和行为,并将抽取的特征和行为封装到一个类中,把这个类命名为Job, 把职业的共同特征名称、类别、技能、测评内容等作为Job的属性,把职业的评测行为作为方法,代码如下:
public class Job
{
//职业名称属性
private String jobName;
//职业类别属性
private String jobCategory;
//职业技能属性
private String jobTechnical;
//职业测评内容
private String jobExamination;
//输出测评内容
public void jobTest()
{
System.out.println(jobExamination);
}
}用eclipse创建Job类
启动eclipse,新建项目JobManager,在JobManager项目下,创建com.bcwk. job包。
在“JobManager”项目列表中。选择新创建的“com.milihua. job”包项,单击鼠标右键,在弹出的菜单中选择【New】命令,再下一层菜单中选择【Class】命令,如下图所示:

图1 在job包下创建Job类
系统弹出“New Java Calss”对话框中,如下图所示:

图2 新建Java类对话框
对话框的主要选项或输入项说明如下:
① Source folder
创建的类代码文件默认的存储目录,默认目录为当前项目目录下的src目录,一般情况下,该目录不要改动。
② Package
创建的类隶属于哪个包,一般无需改动。
③ Name
创建的类名称,在输入框中输入“Job”。
④ Superclass
创建类的父类(类的继承后面会讲述),默认的继承父类是java.lang.Object,本案例中无需改动。
⑤ public static void main(String[] args)
该选项是指在创建新类时,是否在新类中添加main方法,main方法是Java应用程序的入口,一般包含在项目主类(例如:10.4节的HelloWorld项目的HelloWorld类)中。本案例创建的Job类不是项目的主类,因此无须选择该选项。
在Name输入框中输入类名“Job”,其它选项采用默认值即可,单击“Finish”按钮即完成Job类的创建。
第二节 Java对象的创建和使用
类是抽象的概念集合,表示的是一个共性的产物,类中定义的是属性和方法,而对象是类的实例。
例如前面讨论的水果类,水果被归纳为类,而苹果、香蕉、葡萄为水果类的实例或对象。水果是人们赋予具有苹果、香蕉、葡萄等共同特点的名称,不单指某一事物;对象是指具体的实物或概念,如苹果、香蕉、葡萄等对象是实物,而一项政策可能就是一个概念性的对象了,在现实生活中,万事万物皆对象,面向对象编程就是模拟现实生活中的一个个对象来编程的。
类也可以看做是对象的模板,它描述一类对象的行为和状态,决定着对象的属性和方法。由对象可以抽象出类,类也可以实例化成对象,就像水果类决定了苹果、香蕉、葡萄等对象具备糖分、汁液、芳香度都基本特征,也可以通过抽取香蕉、葡萄等对象的共同特征抽象为水果类。

图3 水果类与水果对象的关系
在图3中,由苹果、葡萄等对象抽象出水果类,水果类属性有water(汁液含量)、sugar(糖分含量)、fragrance(芳香度),这些属性是水果类所具有的共同特点。当在程序中需要使用苹果对象时,将水果类实例化苹果,同时初始化苹果对象的water(汁液含量)、sugar(糖分含量)、fragrance(芳香度)属性。
对象的创建
对象是根据类创建的。在Java中,使用关键字new来创建一个新的对象。创建对象语法如下:
类名 对象名 = new 类名();
例如:创建前面的水果对象
Fruits apple = new Fruits("80%”, “60%”, ”30%”);
使用new创建对象时,会调用Fruits类的构造方法初始化对象,Fruits类的构造方法要求传入water(汁液含量)、sugar(糖分含量)、fragrance(芳香度)三个属性值,初始化对象的属性。
Fruits类的构造方法代码如下:
Fruits(String inwater,String sugar,String fragrance)
{
this.water = inwater;
this.sugar = sugar;
this.fragrance = fragrance;
}其中,this表示类实例(对象)本身,后面会详细讲述。
访问对象的属性和方法
访问对象中封装好的属性和方法是通过“.”操作符进行的。例如:
Fruits apple = new Fruits("80%”, “60%”, ”30%”);
apple. water;
apple. showFruit();
例3:以“事物抽象与Java对象“一文创建的Fruits项目为案例,在项目FruitManager类中创建Fruits对象,并调用Fruits类的showFruit()输出Fruits对象的属性。
启动eclipse,在Package Explorer工作窗口展开Fruits项目,编辑FruitManager.java文件,输入如下代码:
public static void main(String[] args) {
// TODO Auto-generated method stub
//声明和创建Fruits对象apple
Fruits apple = new Fruits("80%","60%","30%");
//调用appleshowFruit方法输出对象属性
apple. showFruit();
}代码结构分析
FruitManager.java是Fruits项目的主要控制类,该类包含main方法,main方法是Java应用程序的入口,Java项目中只需要有一个类包含main方法即可,一般来说包含main方法的类为Java程序的主要控制类。
在mian方法中,增加了apple对象的声明和创建语句,并调用apple对象的showFruit()方法输出apple对象的属性。
保存FruitManager.java文件,用鼠标单价eclipse工具条上的运行按钮,编译并运行Fruits项目,如下图所示:

图4 运行Fruits项目
查看Fruits项目运行结果。Fruits项目运行后,eclipse会自动打开“Console”控制台窗口,控制台窗口会显示Fruits项目的输出内容。

图5 Fruits项目运行结果
文章小结
1、从现实世界的事物中抽取特征并归纳为类,对Java初学者或项目经验缺乏者确实有一定的难度。不过也无须担心,从现实世界的事物中抽取特征并归纳为类属于项目的需求分析阶段,是系统分析员做的事情,在实际工作中,项目涉及到的类及属性和行为在需求规格说明书和系统设计文档中已经详细给出,程序员只需按照文档要求创建项目和编写类代码就可以了。
2、Java对象是Java类的实例化,Java类的实例化就是在代码中声明一个类型为Java类的变量,然后用new关键字申请Java类的存储空间并初始化Java类的属性,被初始化的Java类赋值给前面已声明的变量,该变量即为Java类的实例化对象。
思考与练习
如果没有创建Fruits项目,请参照“事物抽象与Java对象“一文创建Fruits项目。在已创建Fruits项目的基础上,编写本文例3的代码。