Topic: 初学者,构造方法和方法你弄清除了吗?(初学总结) |
Print this page |
1.初学者,构造方法和方法你弄清除了吗?(初学总结) | Copy to clipboard |
Posted by: 菲利浦530 Posted on: 2005-03-08 09:20 呵呵, 我是自学Java的新手, 在看到构造方法的时候,相对于方法有些混淆. 经过反复阅读,慢慢的总结出了些规律, 贴出来大家参考. 可能有不对或者和书上很多相同的地方,只是方便大家理解,见笑了. 构造方法:构造方法是类的一种特殊方法,Java中的每个类都由构造方法,它的功能是为类的实例 定义初始化状态.构造方法与方法相似,也属于一种方法,但是相似却也有着不同之处:1,构造方 法的名称必须与类名相同.2,构造方法不能有返回值.3,用户不能直接调用构造方法,必须通过关 键字New自动调用它. 来看一个例子: class Constructor{ private int x; private double y;//定义私有变量 /** 没有参数的构造方法 */ Constructor(){ //注意到了吗,构造方法的名字与类名都是Constructor. x=0; y=0.0; } /** 一个参数的构造方法 */ Constructor(int x){ this.x=x; //使用this关键字标识成员变量,以区别于同名参数。下同 } /** 一个参数的构造方法,参数与前一构造方法不同 */ Constructor(double y){ this.y=y; } /** 两个参数的构造方法 */ Constructor(int x,double y){ this.x=x; this.y=y; } /** show()方法显示成员变量 */ void show(){ System.out.println("x="+x+" y="+y); } }//Constructor类结束 /** ConstructorTest类 */ public class ConstructorTest{ /** main()方法 */ public static void main(String args[]){ Constructor co1=new Constructor();//构造方法的初始化,用户不能直接调 用,而是通过New语句调用. 初始化类Constructor中方法1的值.构造方法在此处也用到了方法重 载,也是根据参数变量的数量和类型区分的. Constructor co2=new Constructor(3); Constructor co3=new Constructor(0.9); Constructor co4=new Constructor(5,5.9); //上面四行语句创建了四个Constructor对象,每一个对象的创建使用了不同 的构造方法 co1.show(); co2.show(); co3.show(); co4.show(); //上面四行语句分别显示四个对象的成员变量值 } }//ConstructorTest类结束 以上便是构造方法的例子.为了区别与普通的方法,再看一个普通方法的例子: class MethodOverloading{ long cube(long l){ //定义一个方法,方法名为cube. 该方法是一个普通方法.因为与 类不同名. return l*l*l; } double cube(double d){ return d*d*d; } public static void main(String args[]){ MethodOverloading obj=new MethodOverloading();//在此处是用new定义一个对象, 但可以注意到,此处无法对类中的方法初始化,原因很简单,类名与方法名不同. //创建一个MethodOverloading类的对象 System.out.println("the cube of 5 is "+obj.cube(5)); //在这儿才将变量代入了 类MethodOverloading的方法cube中. System.out.println("the cube of 0.9 is "+obj.cube(0.9)); } } 以上的两个例子非常清楚的说明了构造方法与普通方法的区别.对于那三点不同,死记一下就中了. 默认的构造方法: 当类中没有定义任何构造方法的时候,系统隐含提供默认构造方法.默认构造 方法是一个没有参数的特殊的构造方法. 例如与构造方法对比的那个普通方法的例子中的这句 话: MethodOverloading obj=new MethodOverloading() 此时因为在MethodOverloading类中没 有定义任何构造方法,所以此时使用的就是默认构造方法了. 默认构造方法的各种数据类型的默认值为: 数值型: 0 ; Boolean: False ; Char: '\0' ; 对象: null ; 注意:如果类中定义了构造方法(注意这个前题,是已经定义了构造方法),但没 有定义没有参数的构造方法,这时如采用没有参数的构造方法去初始化对象会产生编译错误.因 为只要类中定义了构造方法,系统就不会在提供默认构造方法 比如构造方法的那个例子: 如果 把 Constructor() { x=0; y=0.0; } 这个没有参数的构造方法删掉,然后再在Main函数中用 Constructor co1=new constructor() 这句话初始化一个没有参数的构造方法就会出现编译错误.(你可以有两种理解方法,第一种是因为在Constructor类中没有定义这个方法,而又在在函数中初始化了这个方法,所以错了. 还一种理解方法是 我想使用默认的初始方法去初始化这个构造函数,但是,因为在该类中我已经定义了构造方法,而又没有无参数的构造方法,所以根据我们刚才的结论,(即:如果类中定义了构造方法(注意这个前题,是已经定义了构造方法),但没有定义没有参数的构造方法,这时如采用没有参数的构造方法去初始化对象会产生编译错误.因为只要类中定义了构造方法,系统就不会在提供默认构造方法)会出现编译错误.).我们用第二种方法理解,即可了解这句话的意思. |
2.Re:初学者,构造方法和方法你弄清除了吗?(初学总结) [Re: 菲利浦530] | Copy to clipboard |
Posted by: rumly Posted on: 2005-03-11 12:27 和C++的差不多。 |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |