类是抽象的概念集合,表示的是一个共性的产物,类中定义的是属性和方法,而对象是类的实例。
例如前面课程中的水果被归纳为类,而苹果、香蕉、葡萄为水果类的实例或对象。水果是人们赋予具有苹果、香蕉、葡萄等共同特点的名称,不单指某一事物;对象是指具体的实物或概念,如苹果、香蕉、葡萄等对象是实物,而一项政策可能就是一个概念性的对象了,在现实生活中,万事万物皆对象,面向对象编程就是模拟现实生活中的一个个对象来编程的。
类也可以看做是对象的模板,它描述一类对象的行为和状态,决定着对象的属性和方法。由对象可以抽象出类,类也可以实例化成对象,就像水果类决定了苹果、香蕉、葡萄等对象具备糖分、汁液、芳香度都基本特征,也可以通过抽取香蕉、葡萄等对象的共同特征抽象为水果类。下图给出了水果类与水果对象的关系。
水果类与水果对象的关系
由苹果、葡萄等对象抽象出水果类,水果类属性有water(汁液含量)、sugar(糖分含量)、fragrance(芳香度),这些属性是水果类所具有的共同特点。当在程序中需要使用苹果对象时,将水果类实例化苹果,同时初始化苹果对象的water(汁液含量)、sugar(糖分含量)、fragrance(芳香度)属性。
对象的创建
对象是根据类来创建的。在Java语言中,可以通过new运算符、反射机制和序列化来创建对象,最常用的是通过new运算符来创建对象。本课主要讲述通过new运算符来创建对象,使用反射机制和序列化来创建对象的内容,将在Java 核心技术课程中讲述。
使用new运算符创建对象语法如下:
类名 对象名 = new 类名();
案例1:创建Fruits类。
在eclipse下新建项目PBaseUnit14,创建包fruits,在fruits包下创建Java类Fruits。代码如下:
/**
* @Title: Fruits.java
* @Package fruits
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package fruits;
/**
* @ClassName: Fruits
* @Description: 对象(对象的创建)案例1
* @author 编程训练营
* @date
*
*/
public class Fruits {
//水果名称
private String name;
//水果类汁液含量属性
private String water;
//水果类糖分含量属性
private String sugar;
//水果类芳香度属性
private String fragrance;
//水果类的构造方法
public Fruits(String name,String water,String sugar,String fragrance)
{
System.out.println("正在实例化" + name);
this.name = name;
this.water = water;
this.sugar = sugar;
this.fragrance = fragrance;
}
/**
* Function showFruit
* Description: 输出水果的水分含量、糖分含量、芳香度
* input: 无输入参数
* return: 无返回
*/
public void showFruit()
{
System.out.printf("----%s的属性----\n", getName());
System.out.println("水分含量:" + getWater());
System.out.println("糖分含量:" + getSugar());
System.out.println("芳香度:" + getFragrance());
}
// 水果类的开花行为
public void flower()
{
System.out.println("开花");
}
// 水果类的成熟行为
public void ripe()
{
System.out.println("成熟");
}
// 水果类的落果行为
public void drop ()
{
System.out.println("落果");
}
/**
* @return the water
*/
public String getWater() {
return water;
}
/**
* @param water the water to set
*/
public void setWater(String water) {
this.water = water;
}
/**
* @return the sugar
*/
public String getSugar() {
return sugar;
}
/**
* @param sugar the sugar to set
*/
public void setSugar(String sugar) {
this.sugar = sugar;
}
/**
* @return the fragrance
*/
public String getFragrance() {
return fragrance;
}
/**
* @param fragrance the fragrance to set
*/
public void setFragrance(String fragrance) {
this.fragrance = fragrance;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
}Fruits类结构分析
Fruits类是水果类。它有四个成员变量,分别是name、water、sugar、fragrance,并提供了成员变量的get和set方法。它提供了一个显示构造方法,该构造方法用传入的参数来初始化类的成员变量。showFruit()是Fruits类的成员方法,用于输出类成员变量的信息。
在PBaseUnit14项目下,创建manager包,在包manager下创建Java类FruitsManager。代码如下:
/**
* @Title: FruitsManager.java
* @Package manager
* @Description: Java基础知识课程案例
* @author 编程训练营
* @date
* @version V1.0
*/
package manager;
import fruits.Fruits;
/**
* @ClassName: FruitsManager
* @Description: 对象(对象的创建)案例1
* @author 编程训练营
* @date
*
*/
public class FruitsManager {
/**
* @Title: main
* @Description:Java程序入口main方法
* @param @param args 参数
* @return void 返回类型
* @throws
*/
public static void main(String[] args) {
// 实例化Fruits类,创建一个apple对象
Fruits apple = new Fruits("苹果","80%", "60%", "30%");
// 调用apple对象的showFruit方法
apple.showFruit();
// 实例化Fruits类,创建一个peach对象
Fruits peach = new Fruits("桃","60%", "30%", "50%");
// 调用peach对象的showFruit方法
peach.showFruit();
}
}FruitsManager类结构分析
FruitsManager类是程序的主类,在类中提供了main()方法。程序执行入口从main()方法开始。
在main()方法内部使用new运算符创建了两个Fruits类对象,一个对象是apple(苹果),一个对象是peach(桃),最后调用对象的showFruit()方法,输出对象的成员变量信息。因为FruitsManager类和Fruits类不是同一个包,因此FruitsManager类需要使用import语句导入Fruits类。
在Fruits类实例化对象的过程中,Java虚拟机会为apple和peach对象分配内存,同时也为apple和peach对象内的成员变量和成员方法分配存储空间。apple和peach对象是相互独立的,在内存中占据独立的内存地址,并且每个对象都有自己的生命周期,当一个对象的生命周期结束时,对象变成了垃圾,由Java 虚拟机自带的垃圾回收机制进行处理,该对象就不能再使用了。