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