构造方法的特点,它与一般方法的区别

 

首先,我们介绍一下Java中的一种特殊的方法:构造方法。

1.  Java中的构造方法又叫做构造函数,构造器(构造器方法)。构造方法是当用类生成对象时,系统在生成对象的过程中利用的方法。

当类在创建实例时 new 动作时要执行的方法,如果类中没有定义构造方法 ,java编译器会为类自动添加一个构造方法。也就是当类生成对象时,系统在生成对象中利用的方法。

构造方法的几个特点:

1)、构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有。

2)、构造方法的调用是在创建一个对象时使用new操作进行的。构造方法的作用是初始化对象。

3)、每个类可以有零个或多个构造方法.

4)、不能被static、final、synchronized、abstract和native修饰。构造方法不能被子类继承。

5)、构造方法在创建对象时自动执行,一般不能显式地直接调用.

6)、构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动,但是经常将他设计为进行各种初始化活动,比如初始化对象的属性。

2.  构造方法的格式:

public 构造方法名(数据类型 参数名,...){

//代码

}

构造方法的用途:

用来实例化对象的。

类名 对象名 = new 构造方法名[类名](参数值,...);

3. 构造方法的分类

在类中,构造方法以三种形式存在。

首先就是Java提供的默认构造器。当程序中没有显式定义构造方法时,生成类的实例对象时就使用该类的默认构造方法。而默义的构造方法是不带参数的,也没有程序体。

一旦我们显式定义了一个构造方法,无论它是否携带参数,默认的构造方法就自动丢失了。因此,构造器的第二种形式就是程序员定义的不带参数的构造方法,它不可以重复定义,而且即使它也没有程序体,它与默认的构造方法仍然是两个不同的概念。

第三种形式 是我们定义的带参数的构造方法。其中带参数的构造器会因为参数个数的不同、参数顺序的 不同、参数类型的不同而可以定义多个。当一个类有多个构造方法时,我们称之为“构造方法的重载”。

4. 一个类的不同构造方法之间的调用

如前述,一个类可以有多个构造方法,在这多个构造方法之间是可以产生调用关系的。只不过在一个构造方法中只能调用一次、一个其它的本类构造方法,而且必须将这个调用语句放在该构造方法语句的第一句,否则,将无法通过编译。

 

 

/**
 * 定义一个类A 	
 * @author wang
 *主函数,程序的入口
 */
public class A {
	public static void main (String args [] ){
		int n = 8;
		A a = new A (n);//实例化一个A的对象
		}
	public A( )//这是我们自己定义的一个无参构造函数
	{
		System.out.println("This constructor of A has not Parameter.");//打印这句话
		}
	public A( int i ){//带参构造方法,调用的是上一个A的无参构造方法
		this();//这是非常关键的调用语句。
		System.out.println("This constructor of A has parameter,it is"+"  "+i);}
	}	

 此程序输出的结果为:

 

This constructor of A has not Parameter.

This constructor of A has parameter,it is  8

 

 

 

5. 类与类之间构造方法的调用

假设程序员编写了多个彼此间既无继承关系,也无包含关系的类。那么当各个类之间产 生调用关系(不失一般性,假设类 A类需使用类 B的对象)时,构造方法的调用是必然的。只不过 这个调用比较简单,它只须在类A中根据需要正确地使用类 B的合适构造方法创建一个类 B的对象即可。

 

 

6. 子类与其父类构造方法的调用 在Java中,子类创建对象时,会自动调用其父类不带参数的构造方法。也就是说,使用子类的任何一种形式的构造方法(无论带参数与否)来创建一个实例对象时,都会自动调用其父类 不带参数的构造方法。如果这个类是层层继承下来的,则这个调用会回溯至级别最高的父类类,然 后依次调用这棵继承树的各类的无参构造方法。

例:

 

public class A{
	public A() {
		}
	{
	System.out.println("This is the constructor of class A .");
	}
	public A (int n){
	System.out.println("This is the constructor of classA ,it sparameter is"+ "  "+n);
			}
	}
	

 

 

 

 public class AA extends A{
	public AA(){
		System.out.println("This is the constructor of class AA.");
		}
	public AA (int n)
	{
		System.out.println("This is the constructor of class AA,it sparameter is "+"  "+n);
	}
	}
 

 

 

public class AAA extends AA{
	public AAA()
	{
		System.out.println("This is the constructor of classA AA .");
	}
	public AAA (int n)
{
	System.out.println("This is the constructor of class ,it sparameter is"+n+".");
	}
	public static void main (String args [] ){
		int m =20;
		AAA childl = new AAA () ;
		AAA child2 = new AAA (m);
		}
	}																	                 该例的运行结果如下:

 运行结果:

this is the constructor of classA

 

This is the constructor of classAA

 

this is the constructor of classAAA.

 

this is the constructor of classA

 

this is the constructor of classAA

 

     this is the constructor of classAAAits parameter is 20

 

在这里应注意一个问题:当使用子类构造方法时一定要保证其各级父类类无参构造方法的存在 与正确性。显然在上例中。如果没有定义类 A与类AA的无参构造器是无法通过编译的。

总起来说,在Java中,构造方法是一个非常基本而重要的内容,对它的理解与正确使用对 于帮助人们进一步搞清JAVA的面向对象的特征有着重要的意义。

 

 

 

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值