-
2021-02-12 22:02:47
标签:
package com.mejustdoit;
public class Component1 {
public Component1(int i) {
// TODO Auto-generated constructor stub
System.out.println("Component1"+i);
}
}
package com.mejustdoit;
public class Component2 {
public Component2(int i) {
// TODO Auto-generated constructor stub
System.out.println("COmponent2"+i);
}
}
package com.mejustdoit;
public class Component3 {
public Component3(int i) {
// TODO Auto-generated constructor stub
System.out.println("component3"+i);
}
}
package com.mejustdoit;
public class Father {
Component1 c1 = new Component1(1);
Component2 c2 = new Component2(2);
public Father(int i) {
// TODO Auto-generated constructor stub
System.out.println("Father"+i);
Component3 c3 = new Component3(3);
}}
package com.mejustdoit;
public class Son extends Father {
Component1 c1 = new Component1(4);
Component2 c2 = new Component2(5);
Component3 c3 = new Component3(6);
public Son(int i) {super(i);
System.out.println("Son");}}
package com.mejustdoit;
public class PlayFatherandSon {
public static void main(String[] args) {
new Son(69);
System.out.println("8ioew");
}
}
运行结果如下:
Component11
COmponent22
Father69
component33
Component14
COmponent25
component36
Son
8ioew
下面说一下过程:进入main后new Son(69);开始构造Son对象,进入Son的构造函数
public Son(int i) {
super(i);
// TODO Auto-generated constructor stub
System.out.println("Son");
}
Son(int i)中的i被赋值69,然后往下执行到super(i);(我不知道是不是进入构造函数后调用父类的构造(要么是默认的Super()要么是Super(参数))方法,这里构造的父类的对象属于子类,然后创建对象后开始
初始化父类变量,输出
Component11
COmponent22
再初始化(执行)构造方法(是 默认的Super()要么是Super(参数)以下内容),输出
Father69
component33
然后就是初始化子类的变量,输出
Component14
COmponent25
component36
接着子类的构造方法(也就是 默认的Super()要么是Super(参数)以下内容)输出
Son
最后输出
8ioew
初始化的介绍可以参考点击打开链接
这里有些疑惑,希望可以交流:
是不是在创建对象时进入构造函数如果该类有继承关系就根据Super()/Super(参数)进入父类构造父类构造对象完成后按照初始化方法初始化子类对象(先初始化变量在初始化方法(包含构造方法))?
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
更多相关内容 -
JAVA入门——构造函数赋值问题
2019-10-14 00:48:00直接赋值 public class student { String name; // 不能有private int age; student(){} // 不可缺少 student(String name,int age){ this.n...- 直接赋值
public class student { String name; // 不能有private int age; student(){} // 不可缺少 student(String name,int age){ this.name =name; // 可有可无 this.age = age; } // 无get()set() public void show() { System.out.println("学生爱学习"); } }
- 利用set()赋值,get()接收
public class Teacher { private String name; // private可有可无 private int age; public Teacher(){} // 必有空参,不可缺少 public Teacher(String name,int age){ this.name = name; // 可有可无 this.age = age; } // 用set赋值 必有get()set() 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 void show(){ System.out.println("老师爱讲课"); } }
- 构造函数赋值
public class xiaozhang { private String name; // 可有可无 private int age; public xiaozhang() { } // 必有空参,不可缺少 public xiaozhang(String name, int age) { this.name = name; // 必有this.变量 this.age = age; System.out.println(name); // 若无set()get(),则必有输出sout System.out.println(age); // 若有set get,则test中必有System.out.println(xz.getName()); System.out.println("校长爱转圈"); } } /* 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;*/
- 测试类test
public class practice { public static void main(String[] args) { // 直接赋值,不能有private student stu = new student(); stu.name = "小明"; stu.age = 15; System.out.println(stu.name); System.out.println(stu.age); stu.show(); // 对象名调用函数 System.out.println("————————"); //用set() get()赋值 Teacher t = new Teacher(); t.setName("李老师"); t.setAge(45); System.out.println(t.getName()); // 用set赋值用get接收 System.out.println(t.getAge()); t.show(); System.out.println("————————"); //用构造函数赋值 xiaozhang xz = new xiaozhang("张校长",60); //System.out.println(xz.getName()); //System.out.println(xz.getAge()); } }
-
Java有参构造方法和无参构造方法详解
2021-03-09 22:38:03一:有参数构造方法在之前我们要为一个对象赋值,先要创建好对象之后然后“对象名.属性名”或者调用属性的setter为属性赋值。但是在很多时候觉得这样做很麻烦,最好的做法是在创建对象的时候完成属性的初始化操作,...一:有参数构造方法
在之前我们要为一个对象赋值,先要创建好对象之后然后“对象名.属性名”或者调用属性的setter为属性赋值。但是在很多时候觉得这样做很麻烦,最好的做法是在创建对象的时候完成属性的初始化操作,此时需要使用到有参数构造方法方能完成该功能(有人把构造方法叫做构造器)。
DEMO:定义有参数构造方法
上面定义了四个有参数构造方法,发现了构造方法可以重载,
书写的习惯是重载的构造方法按照参数的个数进行升序排序。但是如何去调用有参数的构造方法呢?
DEMO:调用有参数构造方法
此时发现了我们不需要像之前一样,要为对象的属性赋值就必须先创建对象再使用“对象名.属性名”或者使用setter 方法去实现了,而是直接使用有参数的构造方法去实现。
DEMO:继续观察代码
此时提示“这个无参数构造Student()方法未定义”,在之前我们说了JVM会默,认为类提供无参数构造方法,但是这只能是在没有任何有参构造方法的条件下,
Java学习交流群697888503现在我们定义了四个有参数构造方法(JVM认为你不需要无参数构造方法了),所以JVM不再提供无参数的构造的构造方法了。
所以我们定义 了有参数构造方法那么也需要显示的定义出无参数构造方法。
DEMO:显示定义无参数构造方法
总结:
1、构造方法的出现是为了方便为对象的属性初始化值
2、一般在类中构造方法的顺序都是按照参数的个数去升序排序的
3、如果定义了有参构造方法那么JVM就不会在提供无参数构造了,所以如果我们定义了有参构造那么无参构造也要显示的定义出来。
二:Java无参构造方法
一:构造方法给的概念
在之前我们使用过方法,在调用的方法的是时候需要在方法名称之后加.上小括号,括号里面可以传递实参,那么我们在创建一个对象的时候使用的是“new类名()”的方式去实现,其实上这也是一种方法,但是这个方法我们没有明确的去定义,那为什么可以调用呢?观察代码。
DEMO:观察代码
以上的代码在创建的对象的时候使用“Student()”,发现了在“Student”之后使用小括号,这和方法的调用很相似,其实“Student()”就是-一个方法,是一个特殊的方法-构造方法,发现了构造方法的名称和类名一样,
Java学习交流群697888503而且一定是在new关键字之后调用的。但是我们没有在Student类中看到这个方法依然能够调用,原因是JVM(Java的虚拟机,暂时不用管,你就认为是系统,后面我们讲解JVM内存模型的时候会分析)系统默认为该类提供了无参数构造方法,所以我们才能调用。
我们也可以显示的将该方法定义出来。
DEMO:显示的定 义构造方法
此时我们显示的定义了一个五参数构造方法,构造方法是在什么时候调用的呢?如何很明显的看出调用了构造方法?
DEMO:观察构造方法调用的时机
总结:
1、构造方法的概念(构造方法的出现是为了在实例化对象的时候可以为对象的属性初始化值)。
2、默认jvm会为每个类提供一个无参数构造方法。
3、构造方法的特征和它与普通方法的区别你要清楚。
-
Java Bean 为什么必须要有一个无参构造函数
2021-02-26 08:39:51通过类的set方法在javaBean里,一般参数在4个以上的,极不推荐使用带参数构造函数赋值:1. 对于一个实体类,对于多个参数,降低可读性2. 需要记住构造参数的顺序3. 一个参数无效就会造成整个构造函数失效4. 当我...JAVAEE中,javaBean是一个很重要的概念
而JavaBean还有以下的使用习惯
首先我们知道,有两种方法为java对象中的元素赋值,
1. 通过类的带参数构造函数的方法
2. 通过类的set方法
在javaBean里,一般参数在4个以上的,极不推荐使用带参数构造函数赋值:
1. 对于一个实体类,对于多个参数,降低可读性
2. 需要记住构造参数的顺序
3. 一个参数无效就会造成整个构造函数失效
4. 当我们要添加新的属性时,不仅要传参数,还要修改构造函数,同时之前所有的构造都要修改。
5. 必须在对象创建之前给参数赋值,而不可以在对象创建后赋值
使用set方法的优势:
1. 我们可以显式的看到赋值元素的名称
2. 可以以任何顺序赋值
3. 可以忽略一些元素的初始化
4. 添加新属性时,不需要修改类
5. 可以在对象创建后赋值
所以对于javaBean,最好的方法就是只定义一个无参数构造函数,
然后用set方法来赋值
最后复习一下类的构造器概念:
//constructor with parameters
public Bicycle(int startCadence, int startSpeed, int startGear) {
gear = startGear;
cadence = startCadence;
speed = startSpeed;
}
Bicycle myBike = new Bicycle(30, 0, 8);
//constructor without parameters
public Bicycle() {
gear = 1;
cadence = 10;
speed = 0;
}
Bicycle yourBike = new Bicycle();
一个类可以重载多个构造函数,只要他们的参数不同
当没有申明构造函数时,java将自动创建构造函数
若已申明带参数构造函数,必须申明无参数构造函数
否则当你调用无参数构造函数时,将会编译错误
对于一个普通的没有父类的类:
TO a class that has not a explicit super class
then it has an implicit superclass of Object,
which does have a no-argument constructor.
-
Java 基础(构造器,属性赋值先后顺序)
2021-02-12 21:00:47构造器构造器的作用:创建对象初始化对象的属性说明:...系统就不再提供默认的空参构造器一个类中,至少会有一个构造器构造器的特征:它具有与类相同的名称它不声明返回值类型。(与声明为void不同)不能被 static、f... -
不同Java泛型构造函数的详解
2020-08-25 22:48:03主要介绍了不同Java泛型构造函数的详解,因为对象是应用类型,对象赋值是指向同一个对象,所以如果需要保存对象某个时刻的状态,就需要构造函数来new一个新的对象。下面我们来详细了解一下吧 -
java的有参构造有什么用
2021-03-06 03:36:19java中有参构造是构造方法的一种,而构造方法作用就是当new一个对象的时候,调用构造函数完成对象的初始化,为了初始化成员属性,但不是初始化对象,初始化对象是通过new关键字实现的。要想了解有参构造有什么用,... -
Java无参构造和有参构造的区别
2021-01-16 21:53:56Java无参构造和有参构造的区别欢迎使用Markdown编辑器 欢迎使用Markdown编辑...有无参数构造函数具体区别在main函数中,有参构造可以在new 类名()这个括号中进行传参书写,无参的只能如上一个一样,分别set传参。 ... -
Java的构造函数与默认构造函数(深入版)
2021-02-25 19:34:33(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正)构造函数与默认构造函数构造函数构造函数,主要是用来在创建对象时初始化对象,一般会跟new运算符一起使用,给对象成员变量赋初值。cl... -
有参构造函数和无参构造函数的区别,我想了很久
2018-07-22 15:14:46构造函数是面向对象编程思想所需求的,它的主要作用有以下两个: 1) 创建对象。任何一个对象创建时,都需要初始化才能使用,所以任何类想要创建实例对象就必须具有构造函数。 2) 对象初始化。构造函数可以... -
Java:在构造函数或方法中传递参数?
2021-02-13 01:19:40目前我有一个类TransactionData,它只比POJO多一点...我所做的:public class TransactionData{// ...public TransactionData(HttpServletRequest request) throws IOException{// do actual work here}}这里有很多WT... -
通过构造器为bean属性赋值(有参数的构造函数赋值)
2020-07-31 18:59:35快捷写出有参无参构造函数:右键代码空白处 spring这个eclipse改代码后要ctrl s刷新错误才会消失 javaclass public person01(String lastname, int aage, String email) { super(); this.lastname = lastname; ... -
Java中的拷贝构造函数
2021-02-12 16:18:031.介绍Java 中的拷贝构造方法是一种使用该类的一个对象构造另外一个对象的构造方法。...2.如何创造拷贝构造方法要创建拷贝构造方法,首先需要声明带有和本类相同类型的参数构造函数:public class Employee ... -
新手 java 在构造函数中给类中的变量赋值问题
2017-04-05 07:56:00package complex_number; import java.util.*;.../*构造函数,ComplexNumber,将实部和虚部置0*/ public ComplexNumber(){ m_dRealPart=0; m_dImaginPart=0; } 请问在构造函数的时候为什么会错? -
Java Bean 为什么必须要有一个无参构造函数?
2021-02-26 09:45:13通过类的set方法在 JavaBean 里,一般参数在4个以上的,极不推荐使用带参数构造函数赋值:1. 对于一个实体类,对于多个参数,降低可读性2. 需要记住构造参数的顺序3. 一个参数无效就会造成整个构造... -
调用有参构造函数的三种方法
2017-04-17 09:31:52[cpp] view plain copy print? #include using namespace std; class Test { public: Test() { m_a = 0; m_b = 0;... cout"无参构造函数 -
构造函数属性赋值不用this案例
2021-03-17 12:57:08 -
java中的构造函数
2020-12-06 20:11:28特点:函数名与类名相同,没有返回值,不可以写return,可以有多个构造函数(参数列表不同),各个构造函数之间属于方法重载 3.代码示例 public class gkk { private String name; private int age; //无参构造 ... -
Java基础-构造函数的重写
2020-07-30 14:23:08构造函数是在实例化我们的类对象的时候所调用的函数,在这里我们可以快速的实现对类对象属性的赋值,当然这是对于类对象的属性是公有的属性,当类对象的属性为私有的时候,我们就需要get和set方法来实现对类属性的... -
java无参构造函数的意义
2015-10-26 17:36:30创建一个子类对象的实例的时候,必先调用父类的无参构造函数(默认构造函数),假如父类有带参数的构造函数,那么系统不会给他创建无参数的构造函数,这时,子类在实例化的时候,因为找不到父类的默认构造函数,编译器... -
反序列化时,java类需要无参构造函数
2019-02-13 20:20:33反序列化时,java类需要无参构造函数现象原因解决办法 现象 今天在调http接口时,接收到的返回值一直是null,debug后发现系统抛了“No suitable constructor found for type 。。。”,说明这个类没有无参数构造函数... -
java构造函数总结
2021-03-06 18:02:48构造函数总结概念: 创建对象时由JVM自动调用的函数作用: 在创建对象的时候给对象的成员变量赋值;写法:修饰符:可以用访问权限修饰符(public、private等)修饰;不能用static修饰;返回值类型:没有返回值类型,连... -
Java 子类构造函数默认调用父类构造函数super
2020-11-25 22:32:08一、继承中的构造方法的执行顺序 创建对象时,会先自动调用父类的构造函数,再自动调用子类...二、子类的所有构造函数中的第一行,其实都有一条隐身的语句super(); 1、父类有空参:没有有参构造时系统默认给出了,或. -
Java中构造函数的作用(转)
2021-02-12 15:11:02https://blog.csdn.net/vipmao/article/details/51530954,我觉得讲的非常好,学习到了构造函数的最大作用就是创建对象时完成初始化,当我们在new一个对象并传入参数的...//有参数的构造函数public Test(String n... -
Java 带参数的构造函数
2021-03-01 07:17:50Java 带参数的构造函数接下来,我们准备为大家介绍“带参数的构造函数”。那么,我们为什么要使用带有参数的构造函数呢?首先,我们可以举一个例子,例如:在一个游戏里面,假设它有多个不同类型的角色,而不同的... -
java的构造函数可以重载吗?java构造函数重载例子
2021-02-12 11:24:31------------------构造---------------------什么是构造方法:1、是个方法2、在创建对象时,由new这个关键字自动调用,将属性初始化3、类中没写构造,java提供一个默认的无参构造,如果你写了,就以你写为准,默认的...