第六章 创建对象
主要知识点:
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”。
标签:构造方法,对象,创建对象,---,Person,实例,引用,面向对象编程,new From: https://www.cnblogs.com/kuangmeng/p/18318981