Logo

郎哥编程

对象的创建

2019-12-13 996

类是抽象的概念集合,表示的是一个共性的产物,类中定义的是属性和方法,而对象是类的实例。

例如前面课程中的水果被归纳为类,而苹果、香蕉、葡萄为水果类的实例或对象。水果是人们赋予具有苹果、香蕉、葡萄等共同特点的名称,不单指某一事物;对象是指具体的实物或概念,如苹果、香蕉、葡萄等对象是实物,而一项政策可能就是一个概念性的对象了,在现实生活中,万事万物皆对象,面向对象编程就是模拟现实生活中的一个个对象来编程的。

类也可以看做是对象的模板,它描述一类对象的行为和状态,决定着对象的属性和方法。由对象可以抽象出类,类也可以实例化成对象,就像水果类决定了苹果、香蕉、葡萄等对象具备糖分、汁液、芳香度都基本特征,也可以通过抽取香蕉、葡萄等对象的共同特征抽象为水果类。下图给出了水果类与水果对象的关系。

image.png   

                                          

水果类与水果对象的关系

 由苹果、葡萄等对象抽象出水果类,水果类属性有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 虚拟机自带的垃圾回收机制进行处理,该对象就不能再使用了。


代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论