精华内容
下载资源
问答
  • 哪些会调用构造方法
    千次阅读
    2021-02-12 13:19:58

    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怎么调用构造方法

    千次阅读 2021-03-04 04:38:04
    Java调用构造方法,那就是子类调用基类(父类)的构造方法,如何调用,请看详细内容。子类中的构造方法的规则子类的构造过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用基类...

    Java调用构造方法,那就是子类调用基类(父类)的构造方法,如何调用,请看详细内容。

    8d2702e38c6668ccf218bb9f71fc626d.png

    子类中的构造方法的规则

    子类的构造过程中必须调用其基类的构造方法。

    子类可以在自己的构造方法中使用super(argument_list)调用基类的构造方法。

    如果使用this(argument_list)调用本类的另外构造方法。

    如果调用super,必须写在子类构造方法的第一行。

    如果子类的构造方法中没有显示的调用基类的构造方法,则系统默认调用基类的无参数构造方法。

    如果子类构造方法中既没有显示调用基类构造方法,而基类又没有无参数的构造方法,则编译出错。

    示例如下:class SuperClass{

    private int n;

    //SuperClass(){

    // System.out.println("SuperClass()");

    //}

    SuperClass(int n){

    System.out.println("SuperClass(int n)");

    this.n = n;

    }

    }

    class SubClass extends SuperClass{

    private int n;

    SubClass(){

    super(300);//调用父类的有参构造方法

    System.out.println("SuperClass");

    }

    SubClass(int n){

    System.out.println("SubClass(int n):"+n);

    this.n = n;

    }

    }

    public class TestSuperSub{

    public static void main (String args[]){

    //SubClass sc = new SubClass();

    SubClass sc2 = new SubClass(200);

    }

    }

    依次验证上面的语法。

    展开全文
  • java this关键字调用构造方法

    千次阅读 2021-02-12 13:22:11
    一 this调用构造方法构造方法之间的调用,可以通过this关键字来完成。格式:this(参数列表);构造方法的调用举例:classPerson {//Person的成员属性private intage;privateString name;//无参数的构造方法Person() {}...

    一 this调用构造方法

    构造方法之间的调用,可以通过this关键字来完成。

    格式:

    this(参数列表);

    构造方法的调用举例:

    classPerson {//Person的成员属性

    private intage;privateString name;//无参数的构造方法

    Person() {

    }//给姓名初始化的构造方法

    Person(String nm) {

    name=nm;

    }//给姓名和年龄初始化的构造方法

    Person(String nm, inta) {//由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可//调用其他构造方法,需要通过this关键字来调用

    this(nm);//给年龄初始化

    age =a;

    }

    }

    二 this的原理图解

    例如:

    classPerson {private intage;privateString name;

    Person() {

    }

    Person(String nm) {

    name=nm;

    }

    Person(String nm,inta) {this(nm);

    age=a;

    }

    }classPersonDemo {public static voidmain(String[] args) {

    Person p= new Person("张三", 23);

    }

    }

    内存图解:

    8ab1759f5813086155fdeec0b83b5726.png

    1、先执行main方法,main方法压栈,执行其中的new Person(“张三”,23);

    2、堆内存中开辟空间,并为其分配内存地址0x33,,紧接着成员变量默认初始化(name=null age = 0);

    3、拥有两个参数的构造方法(Person(String nm , int a))压栈,在这个构造方法中有一个隐式的this,

    因为构造方法是给对象初始化的,那个对象调用到这个构造方法,this就指向堆中的那个对象。

    4、由于Person(String nm , int a)构造方法中使用了this(nm);构造方法Person(String nm)就会压栈,

    并将“张三”传递给nm。在Person(String nm , int a)构造方法中同样也有隐式的this,this的值同样也为

    0x33,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后Person(String nm , int a)

    构造方法弹栈。

    5、程序继续执行构造方法(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。

    赋值结束构造方法(Person(String nm , int a)弹栈。

    6、当构造方法(Person(String nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值

    给main方法中的p引用变量。

    注意事项:

    this所在的方法,this就代表哪个对象。

    调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化动作要最先执行。

    三 成员变量和局部变量同名问题

    以在成员变量名前面加上this.来区别成员变量和局部变量

    例如:

    classPerson {private intage;privateString name;//给姓名和年龄初始化的构造方法

    Person(String name, intage) {//当需要访问成员变量是,只需要在成员变量前面加上this.即可

    this.name =name;this.age =age;

    }public voidspeak() {

    System.out.println("name=" + this.name + ",age=" + this.age);

    }

    }classPersonDemo {public static voidmain(String[] args) {

    Person p= new Person("张三", 23);

    p.speak();

    }

    }

    四 this的应用

    例如:在Person类中定义功能,判断两个人是否是同龄人

    classPerson {private intage;privateString name;//给姓名和年龄初始化的构造方法

    Person(String name, intage) {//当需要访问成员变量是,只需要在成员变量前面加上this.即可

    this.name =name;this.age =age;

    }public voidspeak() {

    System.out.println("name=" + this.name + ",age=" + this.age);

    }//判断是否为同龄人

    public booleanequalsAge(Person p) {//使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较//由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替

    /** if(this.age == p.age) { return true; } return false;*/

    return this.age =p.age;

    }

    }

    展开全文
  • 如何调用构造方法

    万次阅读 2019-05-09 18:48:21
    调用构造方法通过constructor-arg标签设置构造方法参数的值1. 参数类型为基本数据类型或String类型2.参数类型为引用数据类型3.参数类型为数组类型4.List集合5.Set集合6.Map集合 一.自动创建对象 ①创建一个web工程...

    一.自动创建对象


    ①创建一个web工程,拷入以下五个jar包
    在这里插入图片描述
    ②为了规范代码使逻辑清晰按以下方式创建两个Class类以及一个Spring文件
    在这里插入图片描述
    ③在命名为Test的Class文件中输入以下代码,当第一行代码执行时,创建了一个容器
    调用第二行代码的时候将Student对象从容器中拿出来使用

    package com.jd.test;
    
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    import com.jd.vo.Student;
    
    public class Test {
    
    	public static void main(String[] args) {
    		ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("application.xml");
    		Student student  = applicationContext.getBean(Student.class);
    		System.out.println(student);
    	}
    }
    

    ④由于并未设置懒加载,当③中容器创建的时候自动创建了一个Student对象

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    	<bean class="com.jd.vo.Student"></bean>
    </beans>
    

    ⑤在Test文件中运行,得下图(创建对象后会默认调用该Student类的无参构造方法,如果此时在Student类中定义了一个有参构造方法并且没有指定调用该有参构造方法则运行时会出错)
    在这里插入图片描述

    二.调用构造方法


    通过constructor-arg标签设置构造方法参数的值

    1. 参数类型为基本数据类型或String类型

    == 直接使用value标签属性赋值==
    ①Student类中

    public Student(String name,String age) {
    		System.out.println(name+":"+age);
    }
    

    ②application.xml中(constructor-arg标签的数和值对于调用构造方法的参数列表,若不对应则出错)

    <bean class="com.jd.vo.Student">
    		<constructor-arg name="name" value="Tom"></constructor-arg>
    		<constructor-arg name="age" value="12"></constructor-arg>
    </bean>
    

    2.参数类型为引用数据类型

    直接使用ref属性指定对象
    ①Student中

    public Student(Date day) {
    		System.out.println(day);
    }
    

    ②application.xml中

    <bean id="date" class="java.util.Date"/>
    <bean class="com.jd.vo.Student">
    	<constructor-arg name="day" ref="date"></constructor-arg>
    </bean>
    

    3.参数类型为数组类型

    使用array子标签设置数组,通过array子标签的value子标签设置数组每个元素的值
    ①Student中

    public Student(int [] scores) {
    	for (int score : scores) {
    		System.out.println(score);
    	}
    }
    

    ②application.xml中

    <bean class="com.jd.vo.Student">
    	<constructor-arg name="scores">
    		<array>
    			<value>1</value>
    			<value>2</value>
    		</array>
    	</constructor-arg>
    </bean>
    

    4.List集合

    使用list标签赋值,通过list子标签的value子标签设置数组每个元素的值
    ①Student中

    public Student(List<String> names) {
    	for (String name : names) {
    		System.out.println(names);
    	}
    }
    

    ②application.xml中

    <bean class="com.jd.vo.Student">
    	<constructor-arg name="scores">
    		<array>
    			<value>1</value>
    			<value>2</value>
    		</array>
    	</constructor-arg>
    </bean>
    

    5.Set集合

    使用set标签赋值,通过set子标签的value子标签设置数组每个元素的值
    ①Student中

    public Student(Set<String> ids) {
    	for (String id : ids) {
    		System.out.println(id);
    	}
    }
    

    ②application.xml中

    <bean class="com.jd.vo.Student">
    	<constructor-arg name="ids">
    		<set>
    			<value>451564651</value>
    			<value>845151548</value>
    		</set>
    	</constructor-arg>
    </bean>
    

    如果数组、List、Set集合存储的是基本数据类型或String类型,则使用value,否则使用bean子标签或者ref子标签
    ①Student中

    public Student(List<Date> birthdays) {
    	for (Date birthday : birthdays) {
    		System.out.println(birthday);
    	}
    }
    

    ②application.xml中

    <bean id="date" class="java.util.Date"></bean>
    <bean class="com.jd.vo.Student">
    	<constructor-arg name="birthdays">
    		<list>
    			<bean class="java.util.Date"></bean>
    			<ref bean="date"/>
    		</list>
    	</constructor-arg>
    </bean>
    

    6.Map集合

    使用set标签赋值,通过set子标签的value子标签设置数组每个元素的值
    ①Student中

    public Student(Map<String,Date> birthdays) {
    	Set<String> keys = birthdays.keySet();
    	for (String key : keys) {
    		Date birthday = birthdays.get(key);
    		System.out.println(birthday);
    	}
    }
    

    ②application.xml中

    <bean id="date" class="java.util.Date"></bean>
    <bean class="com.jd.vo.Student">
    	<constructor-arg name="birthdays">
    		<map>
    			<entry key="爸爸" value-ref="date"></entry>
    			<entry key="妈妈" value-ref="date"></entry>
    		</map>
    	</constructor-arg>
    </bean>
    

    如果Map集合 key或value是是基本数据类型或String类型,则使用key或value标签属性value,否则使用key-ref或value-ref

    展开全文
  • JAVA子类调用父类构造方法

    千次阅读 2021-03-06 16:59:23
    父类的构造方法不能被子类继承。以下语句中MyException类继承了java.lang.Exception类。public class MyException extends Exception{} //MyException类只有一个隐含的默认构造方法尽管在Exception类中定义了如下...
  • 构造方法何时被调用

    千次阅读 2021-03-07 04:20:57
    构造函数的作用是初始化对象,即在创建对象时被系统调用(与普通方法不同,程序不能显示调用构造函数)。构造函数还能够被重载,即可以传入参数,当程序中包含有带参的构造函数时,系统将不会再提供的无参构造函数。当...
  • java-静态方法中调用构造方法

    千次阅读 2020-06-21 20:29:37
    静态成员 基本定义: 静态成员包括静态方法(static method)和静态变量...java支持静态方法和静态变量,无需创建类的实例就可以调用静态方法。 ----《java语言程序设计 基础篇》原书第10版,梁勇著 要声明一个静态变量
  • Java里子类调用父类构造方法问题

    千次阅读 2021-02-13 01:44:43
    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?...构造方法是new一个对象的时候,必须要调的方法,这是规定,要new父类对象出...
  • 无需显式调用构造函数,这些构造函数在实例化时自动调用。Java中的this关键字是对当前类的对象的引用。使用它,您可以引用类的字段,方法或构造函数。因此,如果需要显式调用构造函数,则可以使用“ this()”进行...
  • java子类调用父类构造方法

    千次阅读 2021-04-16 16:41:33
    在Java中,子类的构造过程中,必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来,通过什么手段做到的?     答案如下:     当你new一...
  • 构造方法不能直接调用构造方法,需要使用关键字this
  • 调用父类的构造方法

    千次阅读 2021-01-19 09:44:56
    1、使用super调用父类的构造方法,必须是子类构造方法的第一个语句。 使用this调用重载的构造方法,也必须是构造方法的第一个语句。 可以看到,程序中已经标红,这是不行的。解决这个问题,可以自己定义一个init...
  • 构造方法之间如何调用

    千次阅读 2021-01-23 11:47:13
    构造方法作用:①简化代码 ②给成员变量赋值 构造方法定义:访问权限类名 (【参数列表...同一个类中可以定义多个构造方法,那构造方法之间如何调用呢?其实很简单,通过this([实参列表]),并把这句话放在有效代码...
  • Java构造方法的定义和调用

    千次阅读 2021-04-16 19:40:48
    Java构造方法的定义和调用 构造方法的定义 注意点 构造方法的名字必须和所在类的名字一致; 没有返回值; 不能声明void; 访问权限可以为任意,但是一般情况下使用public方法; 构造方法中的参数可以根据需要自行...
  • 首先我们要知道构造方法是类的一个特殊成员,它在类实例化对象时被自动调用 子类中,它在调用父类中空参数的构造函数。因为子类继承父类,继承到父类中的数据,所以必须要看父类是如何对自己的数据进行初始化的...
  • 调用子类构造方法之前调用父类没有参数的构造方法,其目的是? 帮助子类做初始化工作。
  • 在对对象成员变量初始化时,有输入时,通过有参构造方法进行赋值。当没有输入时,可以给个初始值,就通过无参写入默认的,无参调有参...// main方法中 new调用无参构造方法,再完成上面的无参调有参 new 类名(); ...
  • Java的静态方法里是不能调用非静态方法的,但为什么可以调用构造方法
  • 如果要在一个构造方法中,调用另一个构造方法,可以使用this() 这里通过this(name)在带两个参数的构造方法调用了带一个参数的构造方法
  • 所以在子类继承父类后,必须调用父类里面的构造方法。 目的就是为了初始化父类的参数,子类才能使用 class E{ private String e; E(String e){ this.e=e; } } class F extends E{ F(String e){ super(e);...
  • 其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super() 隐示super() 先说一下什么情况下会有隐示的super()。 1.子类构造函数中没写super()并且子父类具有无参构造函数。那么子类第一行便自动一条...
  • JVM不予许未实例化的情况下直接调用构造方法。必须new过才行。this是指实例化后的对象 代码: public class Person { String name; int age = 25; public Person(String name){ setName(name); } public ...
  • Java子类调用父类的构造方法

    千次阅读 2020-05-20 20:44:47
    一、自动调用父类无参构造方法 //这是父类 public class SuperClass { //父类无参构造方法 public SuperClass(){ System.out.println("父类无参构造方法"); } //父类带参构造方法 public SuperClass(String ...
  • 一般在子类中显式的调用父类构造方法,若没有显式调用调用,则子类默认调用父类的无参构造方法。(**若父类没有无参构造方法,则编译报错**) 为什么要这样规定呢? 笔者认为:子类从父类那里继承所有的...
  • java子类调用父类的构造方法

    千次阅读 2021-04-16 16:45:12
    class FatherClass{ public FatherClass(){ System.out.println("父类 无参 构造函数"); } public FatherClass(int i){ System.out.println("父类 一个参数构造函数...
  • 因为子类不可以继承父类的构造方法,所以,想要调用父类的构造方法的话,那么就可以使用得到super关键字下面的话就来对这个方面做一下详细的讲解。super关键字能够用来访问父类的构造方法、普通方法和属性。super...
  • 构造方法的定义和调用

    千次阅读 2019-10-09 23:09:32
    构造方法(什么时候调用?,作用是什么?) 构造方法: 1.它具有与类名相同的名称 2.它没有返回值(如果有,则不是构造方法,而是和构造方法同名的成员方法) 3.构造方法调用时机与一般的方法不同。一般的方法是在...
  • 先说构造方法,在使用Class类中的,newInstance() 取得实例化对象时,出现一些问题。看下面出错的代码:package com.jmd.bingo; class Person { private String name; private int age; // public Person() { //...
  • 学习java时,理解的this关键字的实质是用来指向当前对象... 关键字this可以出现在类的构造方法中,代表使用该构造方法所创建的对象。 public class Tom { int leg; Tom(int n) { this.cry(); //可以省略thi...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,736,780
精华内容 694,712
热门标签
关键字:

哪些会调用构造方法