A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭娇珍 中级黑马   /  2013-1-3 00:26  /  1785 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如何一个类有多个构造方法,可以从一个构造方法中调用另外一个么?

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

11 个回复

倒序浏览
本帖最后由 吴愿涛 于 2013-1-3 01:31 编辑

这个是可以的。
例如:
public class A
  {
   A()
   {
     System.out.println("This constructor of A has not parameter."):
    }
    A(int i)
   {
      this();//这是非常关键的调用语句。
     System.out.pfintln(“This constructor of A has parameter.it is”+i);
   }
    public static void main(String[] args)
    {
      int n= 8;
     A alnstanee=new A(n);
    }
  该程序的运行结果如下:
    This constructor of A has not parameter.
    This consturctor of A has parameter,it is 8
从上例中可以看出在类A的带参构造器中在第一行使用了this()语句,其意义即指调用前商
定义的类A的无参构造器。
回复 使用道具 举报
{:soso_e136:}没看明白,表示愚昧,求详解
回复 使用道具 举报
本帖最后由 吴愿涛 于 2013-1-3 01:04 编辑
郭娇珍 发表于 2013-1-3 00:44
没看明白,表示愚昧,求详解


好了,再看一遍 。
  1. public class A
  2. {
  3. A(){
  4. System.out.println("无参构造器");
  5. }
  6. A(int i){
  7. this();//这是非常关键的调用语句,即为该构造方法调用另一个构造方法!
  8. System.out.println("有参构造器,参数值是: "+i);
  9. }
  10. public static void main(String[] args)
  11. {
  12. int n= 8;
  13. A a1=new A(n);
  14. }
  15. }
复制代码
回复 使用道具 举报
吴愿涛 发表于 2013-1-3 00:47
好了,再看一遍 。

class A
{
        A()
        {
        System.out.println("A");
        }
        A(int i)
        {
        System.out.println("b");
        }
        A(int i,String str)
        {
                this(int i);
        System.out.println("c");
        }
        public static void main(String[] args)
        {
                int n=8;String str="haha";
                A abc =new A(8,"haha");
        }
}


如果我要调用A(int i)这个方法呢?怎么调用
我这个错了
回复 使用道具 举报
郭娇珍 发表于 2013-1-3 01:07
class A
{
        A()

在使用关键字new的时候就可以调用了 ,A a1= new A(int i);
回复 使用道具 举报
{:soso_e113:}构造方法要与类名一样,既然是方法肯定可以重载,就是你说的多个构造方法。每个构造方法的第一行都有默认的super(),就是调用父类的构造方法,你不写系统自己加。一般一个类都会写两个构造方法一个有参数的,一个无参数的。
new子类对象的时候子类都会先调用父类构造方法在执行自己的构造方法



这是我今天写的一个测试类
package day16_01_collection;


class Person {
        private String name;
        private int age;
        private String sex;

        public Person() {//这是无参构造方法
                super();
                /*这里的super()就是调用父类构造方法
                 * 这里Person没有指定继承一个类,那么就默认继承Object类,因为每个类都是Object 的子类或间接子类
                 */
        }

        public Person(String name, int age, String sex) {//这是有参数的构造方法
                //super();//这个同上
                this.name = name;
                this.age = age;
                this.sex = sex;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public int getAge() {
                return age;
        }

        public void setAge(int age) {
                this.age = age;
        }

        public String getSex() {
                return sex;
        }

        public void setSex(String sex) {
                this.sex = sex;
        }

        public String toString() {
                return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
        }
        public boolean equals(Object o) {
                // 测试参数类型是否为Person
                boolean b = o instanceof Person;
                // 如果参数类型不是Person,那么就没有比较的了,直接返回false
                if(!b) {
                        return false;
                }
                // 执行到这里,已经可以肯定参数是Person类型,所以可以大胆的向下转型了。
                Person p = (Person)o;
                return this.name.equals(p.name) && this.age == p.age && this.sex.equals(p.sex);
        }

}

评分

参与人数 1黑马币 +30 收起 理由
奋斗的青春 + 30 辛苦了 ,文不对题 !

查看全部评分

回复 使用道具 举报
吴愿涛 发表于 2013-1-3 01:12
在使用关键字new的时候就可以调用了 ,A a1= new A(int i);

如果不新建对象,只是单纯的构造方法之间进行互相调用,只能用this()调用空参数的构造方法吗
要调用A(int i){}只能新建对象了吗

点评

不创建也可以的,看下面 。  发表于 2013-1-3 01:26
回复 使用道具 举报
本帖最后由 吴愿涛 于 2013-1-3 12:27 编辑
郭娇珍 发表于 2013-1-3 01:16
如果不新建对象,只是单纯的构造方法之间进行互相调用,只能用this()调用空参数的构造方法吗
要调用A(int ...
  1. public class A
  2.   {
  3.    A(){
  4.      System.out.println("A");
  5.     }
  6.     A(int i){
  7.       this();//这是非常关键的调用语句,即为该构造方法调用另一个构造方法!
  8.      System.out.println("B:"+i);
  9.    }
  10.     A(int i,String str){
  11.             this(i);//根据this里面的参数决定你调用的是哪个构造方法 ,不知道LZ现在明白了没 ?! — —|||
  12.             System.out.println("C:"+i+"===="+str);
  13.     }
  14.     public static void main(String[] args)
  15.     {
  16.             int n= 8;
  17.             A a1=new A(n);
  18.             int m= 8; String str = "haha";
  19.             A a2=new A(m,str);
  20.     }
  21.   }
复制代码
回复 使用道具 举报
给LZ一个简单的方儿  你用this()的时候,就是要调用本类中的构造函数,那么具体调用哪一个构造函数,那就是根据你的参数所决定的.

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 何竹冬 于 2013-1-3 03:03 编辑

你好,使用this关键字调用本类重载的构造方法。
举例:
  1. class Person
  2. {
  3.         private String name;
  4.         //不带参数构造方法
  5.         Person()
  6.         {
  7.                 System.out.println("a person");
  8.         }
  9.         //重载构造方法,带参数的构造方法
  10.         Person(String name)
  11.         {
  12.                 this();//调用本来构造方法,这里调用的是不带参数的构造方法
  13.                 this.name=name;
  14.         }
  15. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
{:soso_e163:}吴愿涛 发表于 2013-1-3 01:25


嗯嗯,明白了,谢谢了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马