Java构造方法解析

2016-03-13 20:39黄艳峰
河南科技 2016年3期
关键词:构造方法面向对象

黄艳峰 陈 涛

(商丘师范学院 计算机与信息技术学院,河南 商丘 476000)



Java构造方法解析

黄艳峰陈涛

(商丘师范学院计算机与信息技术学院,河南商丘476000)

摘要:构造方法是面向对象程序中在创建对象时系统自动调用的一个方法,与其他方法相比,该方法在语法和应用上都具有一些特殊性。基于此,重点介绍Java语言中构造方法的特点、定义及使用方法。

关键词:Java;构造方法;面向对象

1 构造方法的引入

Java是面向对象的语言,类是构成Java程序的基本单元。面对一个特定的问题领域,需要抽象出该问题领域的对象,然后根据问题领域的需要,从这些对象身上抽象出属性和方法,把它们包装成类。而类只是对象的一个模板,要想实现其具体的功能,还要创建出该类的对象。创建一个类的对象的语法是:类名对象名=new构造方法([参数1,参数2,…….]);这条语句在执行时包含3个步骤:①在栈中为该对象名即对象的引用分配内存,也就是类名对象名这部分执行的操作;②利用new运算符在堆内存中为Java对象的各个属性分配内存,并把该内存的首地址赋值给对象名,即=new这部分执行的操作;③调用构造方法完成对象的初始化,给对象的各个属性赋初值。一个对象可能包含若干个属性,需要若干条赋值语句,把这若干个赋初值的语句组合成一个方法在创建对象时一次性执行,这个方法就是构造方法[1]。

2 构造方法的使用

2.1构造方法的特点及定义

构造方法是一种比较特殊的方法,其特殊性主要体现在以下几个方面:①构造方法的方法名与类名相同[2];②构造方法没有返回值类型,在构造方法的方法体里不能出现return语句;③构造方法的调用通常在创建对象时由系统自动调用;④构造方法通常用来初始化类的非静态属性。

一个类中可以定义多个构造方法,既可以不带参数也可以带参数,如:

class Student{

String name;

int age;

Student(){

name="张三";

age=21;}}

public class TestConstructor{

public static void main(String[]args){

Student s1=new Student();

Student s2=new Student();}}

假如一个类中只定义一个无参的构造方法,如上例,那么创建出来的所有对象s1、s2的属性值都一样,这显然不符合实际,为了创建出不同属性值的对象,我们需要添加多个不同参数的构造方法,

class Student{

String name;

int age;

Student(){

name="张三";

age=21;}

Student(String n){

name=n;

age=23;}

Student(String n,int a){

name=n;

age=a;}}

再分别创建对象Student s1=new Student(“张三”,21);Student s2=new Student(“李四”,23);通过传进不同的参数值,就可以创建出不同属性值的对象。一个类中可以包含多个不同的构造方法,在一个构造方法里面可以调用同类其他的构造方法,对同类构造方法的调用,不能使用构造方法名,而是使用关键字this,如上例可以改成如下形式:

class Student{

String name;

int age;

Student(String n,int a){

name=n;

age=a;}

Student(String n){

this(n,23)}

Student(){

this(“张三”,21);}}

如果在一个类中没有定义任何一个构造方法,则系统会自动创建一个参数为空,方法体也为空的默认构造方法,以满足创建对象的需要,但是如果在程序中一旦定义了一个构造方法,系统不会再创建默认的构造方法。

2.2子类对父类构造方法的调用

构造方法不能继承,但是在初始化子类对象时,为了确保继承自父类的所有属性被初始化,则在执行子类构造方法之前,一定要先对父类的构造方法进行调用[3]。子类对父类构造方法的调用分2种情况,一种是默认调用,即程序中不体现出来,这种情况下只能调用父类无参的构造方法,如果父类中没有定义无参的构造方法(系统也不创建),那么一定要显式调用。对父类构造方法的调用同样也不能用方法名,而是用super()形式调用。如:

class Art{

Art(){

System.out.println("Art()constructor");}}

class Drawing extends Art{

Drawing(){

System.out.println("Drawing()constructor");}}c

public class Cartoon extends Drawing{

Cartoon(){

System.out.println("Cartoon()constructor");}

public static void main(String[]args){

Cartoon x=new Cartoon();}}

本例的输出结果是Art()constructor,Drawing()con⁃structor,Cartoon()constructor,很显然,在Cartoon类的构造方法中并没有调用父类Drawing的构造方法,同样在Drawing的构造方法中也没有调用其父类Art的构造方法,这里对父类构造方法的调用是隐含的,是系统自动调用的。而如果把Drawing类的构造方法修改成Drawing (int i){System.out.println("Drawing()constructor");,则在Cartoon的构造方法中会提示找不到符号Drawing()的错误。显然,这里系统调用的是Drawing(),即父类无参的构造方法。而此时Drawing中的带参数的构造方法需要在Cartoon类中用super(6)(带一个任意整数的参数,如1,2,3,…….)来显式调用。

3 结语

构造方法是一种特殊的方法,主要完成对象初始化的工作,为了满足创建对象时的不同需求,在同一个类中可以定义多个不同参数的构造方法,即对构造方法进行重载,为了在子类中完成继承自父类的属性的初始化,在创建子类对象时需要首先调用父类的构造方法。

参考文献:

[1]印旻.Java语言与面向对象程序设计(第2版)[M].北京:清华大学出版社,2013.

[2]潘浩.Java程序设计教程[M].北京:北京邮电大学大学出版社,2008.

[3]Y.Daniel Liang.Java语言与面向对象程序设计基础篇[M].李娜译.北京:机械工业出版社,2012.

中图分类号:TP312

文献标识码:A

文章编号:1003-5168(2016)02-0037-02

收稿日期:2016-01-27

作者简介:黄艳峰(1977-),女,副教授,研究方向:计算机应用。

Analysis of Java Constructor

Huang YanfengChen Tao
(College of Computer and Information Technology,Shanqiu Normal University,Shangqiu Henan 476000)

Abstract:Construcor is a method that is automatically called when the object is created in the object orient⁃ed program,and the method has some special characteristics in grammar and application compared with oth⁃er methods.Based on this,this paper mainly introduced the characteristics,definition and using method in Java language.

Keywords:Java;constructor;object-oriented

猜你喜欢
构造方法面向对象
面向可靠性预计的软件运行时行为模型构造方法
《梦溪笔谈》“甲子纳音”构造方法的数学分析
几乎最佳屏蔽二进序列偶构造方法
面向对象Web开发编程语言的的评估方法
峰丛洼地农作物面向对象信息提取规则集
基于面向对象的车辆管理软件的研制与开发
面向对象的SoS体系结构建模方法及应用
汉语新术语构造方法的优先选择