模块2 面向对象编程初级 --- 第六章:创建对象

第六章 创建对象

主要知识点:

  1、类的实例化

  2、构造方法

  3、对象的使用

  4、对象的清除

学习目标:

  根据定义的类进行实例化,并且运用对象编写代码完成一定的功能。本章对类进行实例化,生成类的对象,利用对象开始软件的设计过程,掌握对象的使用方法。

6.1 创建对象概述

  对类进行实例化,就是产生类的一个对象,一个类可以产生多个不同的对象。同一个类的对象只是在内部状态的表现形式上相同,但是它们所分配的存储空间却是不同的。一个对象的生命周期包括三个阶段:生成、使用和消失。

6.1.1 类的实例化

  将类实例化的命令格式如下:

  类名 对象名 = new 类名([参数列表]);

  其中,“类名”表示对象的类型,必须是复合数据类型,包括类,字符串等。“对象名”是一个合法的标识符。“参数列表”要根据本类的构造方法的形式参数确定,与构造方法匹配,以便自己调用构造方法。

public class Person{
    String name;
    int age;
    float salary;
    public void work(){
        System.out.println("I am an engineer!");
    }
}    

  生成一个对象teacher的方法是:Person teacher = new Person();

  每一条语句只实例化一个对象,通过运算符new为对象分配存储空间。这时Java自动执行类对应的构造方法进行初始化。当然了构造方法可以是系统默认的,也可以是用户通过重载实现的。

6.1.2 对象的引用

   类的成员(包括成员属性和成员方法)必须在产生对象,也就是实例化之后才能被引用,引用的方法是:对象名.成员;

  1、引用对象的变量

  访问对象的某个变量的属性时,可以是一个已经生成的对象,也可以是能够生成对象引用表达式。主要有两种方法,第一种是:

方法1:
Person teacher = new Person();
teacher.name = "LingLing";

  第二种方法,可以直接生成变量的引用,是方法1中两条语句的合并,但是并没有产生变量teacher,通常用于一次性使用;

方法2:
new Person().name = "LingLing";

  2、引用对象的方法

  格式:对象引用.方法名([参数列表]);

public Person{
    int age;
    void shout(){
        System.out.println("Oo God,my age is " + age);    
    }
}

public class TestPerson{
    public static void main(String args[]){
        Person xiaoli = new Person();
        Person zhangsan = new Person();
        xiaoli.age = 20;
        zhangsan.age = 38;                      //成员属性的引用
        xiaoli.shout();                               //成员方法的引用
        zhangsan.shout();
    }
}

6.1.3 方法的参数传递

  在方法中,如果变量的类型是基本数据类型,则按照值传递,即方法调用前后变量的值不变;如果变量的类型是类或者接口。即引用数据类型,则按照地址传递,变量的值在方法调用后会发生改变;

  1、基本数据类型的参数传递

  (1)基本数据类型的变量作为实参传递,并不能改变这个变量的值;

  (2)方法中的形式参数相当于局部变量,方法调用结束后自行释放,不会影响到主程序中的同名变量;

  2、引用数据类型的参数传递

  (1)引用数据类型的参数传递可以改变对象的内容。

6.1.4 对象的清除

  Java运行时,通过垃圾收集器周期性地释放无用对象所占的内存,来完成对象的清除,但是当不存在对一个对象的引用时,该对象被称为无用对象,当前的代码段不属于对象的作用于或者对线的引用赋值为NULL,就会成为无用对象;

  根据被引用对象所引用的状态,可以分为三种:激活状态、去活状态和死亡状态。三者的关系如图所示。

                    

  此外,程序只能控制一个对象何时不再被任何引用变量引用,但是绝对不能控制它何时被回收。引用系统垃圾回收有如下两个方法:

  (1)调用System类的gc静态方法System.gc();

  (2)调用Runtime对象的gc实例方法:Runtime.getRuntime().gc()。

6.2 构造方法

  构造方法也称为构造函数,是包含在类中的一种特殊的方法,在类实例化时,它会被自动调用。其参数在实例化命令中指定;

6.2.1 构造方法的定义

  首先看一个构造方法的例题

class Person{
    public Person(){
        System.out.println("method person is using!");
    }
    private int age = 18;
    public void shout(){
        System.out.println("age is "+ age);
    }
}

public TestPerson{
    public static void main(String[] args){
        Person p1 = new Person();
        p1.shout();
        Person p2 = new Person();
        p2.shout();
        Person p3 = new Person();
        p3.shout();
    }
}

  构造方法的特殊之处在于,每当new命令生成一个实例时,构造方法都会自动执行一次,而无需编程者手工引用;

  构造方法的特征:

  (1)具有和类相同的名称

  (2)不含返回类型;

  (3)不能在方法中用return语句返回一个值;

  (4)在类实例化时,由系统自动调用

6.2.2 构造方法的重载

  构造方法也可以重载。一个类的构造方法可以有多个,而且还可以进行重载。

  构造方法重载总结:

  (1)每一个类至少有一个构造方法,如果用户没有定义,系统自动产生一个默认构造方法,没有参数,也没有方法体;

  (2)用户可以定义构造方法,如果用户定义了构造方法,则系统不再提供默认构造方法;

  (3)构造方法的访问控制修饰符一般是public,不可以定义为private;

习题

一、简单题

  1、什么是类的实例化?

  2、类的初始化有哪几种方法?

  3、如何引用一个对象?

  4、基本数据类型参数和引用数据类型在方法中的传递有哪些不同?

  5、什么是构造方法?构造方法有什么特点?

  6、字符串类有哪两种?各有什么特点?

  7、在一个类中,如果几个构造方法同名,则参数不能相同,参数指的是什么?

二、操作题

  1、定义一个日期类,包括年、月、日三个属性和一个方法,用于判断是不是闰年。然后实例化两个对象:今天和明天,并分别给它们赋值;

  2、编写一个程序实现构造方法的重载;

  3、编写一个类BankCard,表示银行卡,属性自定,给它建立一个构造方法,功能是在实例化时,输出信息“您的卡上余额是:XXXX”。

posted @ 2024-07-24 12:32  我太想努力了  阅读(168)  评论(0)    收藏  举报