精华内容
下载资源
问答
  • java构造方法的调用顺序

    千次阅读 2017-10-14 19:36:47
    java中,通常需要在继承的子类与父类之间的关系中,创建对象,这时我们需要对构造方法的调用顺序相当了解  1. 在构造子类之前,会先调用父类的默认空参构造方法,再调用子类本身对应的相应参数个数的构造方法。 ...

         在java中,通常需要在继承的子类与父类之间的关系中,创建对象,这时我们需要对构造方法的调用顺序相当了解

           1. 在构造子类之前,会先调用父类的默认空参构造方法,再调用子类本身对应的相应参数个数的构造方法。

             提示:如果子类的各构造方法中首行没有显式的写出super();这条语句,则系统会默认加上这句,也就是说真正意义上的java代码中,子类的各构造方法中的首行应该有super();这条语句。但如果我们不想让其默认调用父类无参构造方法,就可以在子类的各构造方法中显式的写出super(参数1,参数2, ...);这条语句来达到调用父类相应参数的构造函数的目的。

          

    展开全文
  • 心有猛虎_细嗅蔷薇正确的调用方法应该是直接一个this()来调用构造方法。请看代码:classStudent{Stringid;Stringname;Stringsex;//创建构造方法publicStudent(Stringid,Stringname,StringclassNum,Stringsex,intage){...

    535e16483efd23e5031372280ac0f581.png

    心有猛虎_细嗅蔷薇

    正确的调用方法应该是直接一个this()来调用构造方法。请看代码:class Student{

    String id;

    String name;

    String sex;

    //创建构造方法

    public Student(String id,String name,String classNum,String sex,int age){

    this(id,name,classNum,sex);

    this.age = age;

    }

    //重载构造方法,有两个参数

    public Student(String id,String name){

    this.name = name;

    this.id =id;

    }

    //重载构造方法,有3个参数

    public Student(String id,String name,String sex){

    this(id,name);                //在三个个参数的构造方法里面调用两个参数的构造方法 this(id,name)

    this.sex = sex;               // 在添加另一个参数,实现构造方法调用构造方法

    }

    public static void main(String[] args) {

    }

    }

    展开全文
  • 这里解释一下,抽象类其实也是有构造方法的,只不过抽象类是不能被实例化,也就是说,抽象类的构造方法不能在对抽象类进行实例化的场合调用。 那么言外之意,如果在某个场合抽象类的方法被调用并不会引起抽象类的...

    我们知道,在java中,类的实例化由 内存分配 + 构造两步完成的如果这个类存在父类,那么它的构造过程其实是由其 父类.构造() + 子类.构造()共同完成的。由于java中,所有的类都是继承自Object,所以其实所有的类的实例化过程中都包含类它的父类的构造过程,编译器会隐式地为我们加上每个类的super(),除非某个父类无参构造函数不存在。

    如下所示:成员赋值 这一步取决于类在定义时是否已对成员变量指定值。

    内存分配-----> 构造(父类.成员赋值--父类.构造() + 子类.成员赋值--子类.构造()) 
    

    在这个过程中,其实也是有一些规则,那就是子类的构造是编译器默认调用父类.构造(void)无参方法,如果父类中并没有定义无参构造方法,那么就会出现编译报错。如果父类中只有带参数构造方法(此情况下,父类没有定义无参构造方法),由于编译器并不会调用带参数构造方法,那么在子类的构造方法中,必须由我们显式调用父类的带参数构造方法,否则 父类.构造() + 子类.构造()的这个过程会无法完成,编译器会报错

    那么有人会问到,类不是有默认的无参构造方法么?怎么会有你说的这种情况呢?
    其实类只有两种情况存在无参构造方法:
    1、在没有显式定义任何一个构造方法的时候,默认存在一个无参数构造方法,
    2、在类中显式定义一个无参构造方法。

    有一种情况会导致类没有无参构造方法:
    那就是一个类中存在一个或者多个构造方法,并且这些构造方法都是有参数的

    如果父类是一个抽象类,那么会产生怎么样一种情况呢?
    我们来看一段代码,假如一个抽象类Money 存在private 成员amount,并且该抽象类没有定义无参数构造方法,另一个类USD继承自这个类;
    父类Money :
    这里解释一下,抽象类其实也是有构造方法的,只不过抽象类是不能被实例化,也就是说,抽象类的构造方法不能在对抽象类进行实例化的场合调用。在java中,抽象类的构造方法用于子类访问父类数据的初始化,一旦一个普通类继承了抽象类,便可以在这个子类的构造方法中调用其父抽象类的构造方法。

    我们将在下面的代码中来介绍这样一种特殊情况。

    public abstract class Money {
        private double amount = 0; //类在定义时已对成员变量指定值为0,那么构造过程会多一步父类.成员赋值
        public Money(double amount){  
            this.amount = amount; //父类只有一个带参数方法,也就没有默认的无参数构造方法了
        }
        public void setAmount(double am){
            this.amount = am;
        }
        public double getAmount(){
            return this.amount;
        }
    
        public abstract String getCurrencyName();
    }
    

    子类USD:

     class USD extends Money {
        public USD()
        {           
            super(4); //子类的构造方法必须显式调用父类的构造方法,否则编译器报错
            //子类的构造方法调用了父类的构造方法,但是并不是实例化了一个父类对象,它只是子类实例化过程中的一部分
        }
        public double getAmount(){
            return super.getAmount();
        }
        public  String getCurrencyName(){
            return "USD";
        }
        public void setCurrencyName(double x){
            super.setAmount(x);
        }
    }
    

    在这个例子中,我们看到,子类USD的构造方法中必须显式地调用父抽象类的构造方法,这也说明继承了抽象类的子类的构造过程同样也是父类.构造() + 子类.构造()共同完成的。

    最后,我们在这段示例代码中,来看一下private 成员的继承,
    我们可以看到,子类USD继承来父类Money 的private amount成员,但是并不能直接访问该成员,
    子类必须通过父类的public/protected方法来访问这个成员。

    展开全文
  • Java构造方法的相互调用

    千次阅读 2018-11-29 17:01:10
    Java中,当给一个类创建了多个构造方法时,有时想在一个构造方法调用另一个构造方法以减少代码量。这时可以使用this关键字来实现。 通常,当使用this关键字时,它意味着“这个对象”或者“当前对象”,并且它...

    在Java中,当给一个类创建了多个构造方法时,有时想在一个构造方法中调用另一个构造方法以减少代码量。这时可以使用this关键字来实现。
    通常,当使用this关键字时,它意味着“这个对象”或者“当前对象”,并且它自身产生对当前对象的引用。在一个构造方法中,当给传递给它一个参数列表时,它就有了不同的意义。它将直接的调用能够匹配这个参数列表的构造方法。因此,我们可以直接的调用其它构造方法:

    //举例:用this(参数列表)的形式,自动调用对应的构造方法。不可以直接使用类名进行调用。

    public class Person {
            private String name;
            private int age;
            //构造方法一
            public Person() {
                this(null);
            }
            //构造方法二
            public Person(String n) {
                this(n, 12);//调用第三个
            }
            //构造方法三
            public Person(String n, int a) {
                this.name = n;
                this.age = a;
            }
        }

    看例子,第一个构造方法调用第二个的,第二个的再调用第三个。第三个是最终的实现。这样就能减少代码量了。

    展开全文
  • java语言中,构造函数又称构造方法。...当创建类对象时候调用其对应的构造方法去创建。每创建一个类实例都去初始化它所有变量是乏味。(推荐学习:Java视频教程)如果一个对象在被创建时就完成了所有...
  • 构造方法之间的调用使用this来完成。 this:1.用来区分局部变量和成员变量同名的情况。 2.在构造方法内就是代本类对象,this代表它所在方法所属对象的引用。 2.构造函数之间进行调用时,this语句只能出现在第一行,...
  • 1、 必须在构造方法的第一行使用用this调用类中其他构造方法或super调用父类构造方法    2、 类的构造方法中没有通过this关键字显示的调用类中的其他构造方法,  又没有使用关键字super调用父类的构造方法,在...
  • 子类中的构造方法的规则子类的构造过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。如果使用this(argument_list)调用本类的另外构造方法。如果调用super,...
  • 其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super() 隐示super() 先说一下什么情况下会有隐示的super()。 1.子类构造函数中没写super()并且子父类具有无参构造函数。那么子类第一行便会自动一条...
  • java构造方法不允许调用重载方法 今年在搭建一个项目基础架构时候,遇到了一个问题,一个类初始化对象总是得到错误数据,从常规语法上不到赋值错误。java代码大概如下: import org.junit.Test; ...
  • 如果父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句中进行调用。究其原因,想必是 Java 语言...
  • 下面是关于父类构造方法调用的实验:当父类子类都没有定义构造方法时,系统为父类、子类提供一个无参构造方法,并在子类中隐式调用父类无参构造方法:class Father {} class Son extends Father {}我们可以自己写...
  • JAVA构造函数内调用方法函数 javastringclassfileimportdate 在构造器中调用多态方法进行初始化,也许会产生不可预料结果。 [java] view plaincopy import java.io.FileWriter; import java.io....
  • java语言中,构造函数又称构造方法。...当创建类对象时候调用其对应的构造方法去创建。每创建一个类实例都去初始化它所有变量是乏味。(推荐学习:Java视频教程)如果一个对象在被创建时就完成了所有...
  • 构造方法是类一种特殊方法,用来初始化类一个新对象,在创建对象(new 运算符)之后自动调用Java每个类都有一个默认的构造方法,并且可以有一个以上的构造方法Java 构造方法有以下特点:方法名必须与...
  • 在 Java 中,无论是 explicit 还是 ... 父类有自己的构造方法(这时父类不会有默认无参的构造方法),那么在子类的构造方法中,必须要调用父类的某个构造方法,而且必须是在构造方法的第一个语句 中进行调用。  
  • Java构造方法调用顺序理解

    千次阅读 2018-06-08 17:02:34
    ​ 之前对构造函数的调用顺序一直很迷,只知道很死板地记着“父类构造函数先于子类构造函数调用”,但是其中的原因并没有去深究。前几周大概看了一遍JAVA编程思想,真的是博大精深……但是对这个概念起码有了一点...
  • Java中,如果一个构造方法调用另一个构造方法,需要是用this(参数列表)形式,自动调用对应的构造方法。不可以直接使用类名进行调用。public class Person { private String name; private int age; public ...
  • Java中Object类是其他所有Java基类(直接或间接继承),在Object类...作为所有Java基类(Object自己除外),Object的构造方法是所有Java类创建对象时所必须调用的. 在Java中,创建子类对象时,因为可能会用到父类
  • 父类的构造方法总是在子类的构造方法中被调用,而且按照继承层次逐渐向上链接,来使得每个父类的构造方法都能得到调用。实际是向上链接到最顶层父类之后开始调用。子类只能访问自己成员,不能访问父类中成员...
  • System.out.println(“调用父类parent()构造方法”); } } class Subparent extends parent{ //继承parent类 Subparent(){ System.out.println(“调用子类Subparent()构造方法”); } } public class...
  • 如果文章对你有所帮助,请点喜欢并关注,这将是我最大动力,谢谢构造方法是类里一个特殊方法,他不能有返回值(包括void)。所谓构造方法,就是这个类在被实例化时(创建对象时)就要执行方法,方法名为类名字...
  • JAVA构造函数的调用

    2016-02-17 17:06:08
    参数的个数不同或参数的类型不同或参数的顺序不,不能用方法的返回类型来决定方法的重载,重载经常用于构造方法。 一个类中允许有多个构造函数,并且如果你没有给出构造函数,系统也会提供一个默认的构造函数。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,751
精华内容 9,500
关键字:

java构造方法的调用

java 订阅