精华内容
下载资源
问答
  • 构造方法不能直接调用构造方法,需要使用关键字this

    构造方法不能直接调用构造方法,需要使用关键字this

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

    千次阅读 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

    展开全文
  • JVM不予许未实例化的情况下直接调用构造方法。必须new过才行。this是指实例化后的对象 代码: public class Person { String name; int age = 25; public Person(String name){ setName(name); } public ...

    JVM不予许未实例化的情况下直接调用构造方法。必须new过才行。this是指实例化后的对象
    在这里插入图片描述
    代码:

    public class Person {
        String name;
        int age = 25;
        public Person(String name){
           setName(name);
        }
        public Person(String name,int age){
            this(name);//使用this可以调用。
            Person(name);//这里编译失败,JVM不予许未实例化的情况下直接调用构造方法。
            new Person(name);//可以实例化调用,或者使用this关键字调用,使用this调用构造方法必须放置方法的在第一行
        }
        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 static void main(String[] args) {
             Person xiao = new Person("xiao", 1);
        }
    }
    
    
    展开全文
  • Java的静态方法里是不能调用非静态方法的,但为什么可以调用构造方法
  • 用this调用构造方法

    千次阅读 2013-12-12 08:09:17
    如果在程序中想用某一构造方法调用另一构造方法,可以用this来实现,具体的调用形式如下; this(); 例: public class java_ex09 { public static void main(String[] args){ new Person09("xiangwang",25);...

    如果在程序中想用某一构造方法调用另一构造方法,可以用this来实现,具体的调用形式如下;

    this();

    例:

    public class java_ex09 {
    public static void main(String[] args){
    new Person09("xiangwang",25);
    }
    }
    class Person09{
    String name;
    int age;
    public Person09(){
    System.out.println("1.public Person09");
    }
    public Person09(String name,int age){
    this();
    this.name = name;
    this.age  = age;
    System.out.println("2.public Person09(String name,int age)");
    }
    }

    结果:

    1.public Person09
    2.public Person09(String name,int age)

    解析:

    使用this()调用本类中的无参构造方法。所以程序先去执行Person09中无参构造方法,之后再去执行其他的构造方法。

    注意:this()调用构造方法只能放在构造方法的第一行。



    展开全文
  • 调用构造方法时,首先要对成员变量进行赋初始值
  • 使用this调用构造方法

    千次阅读 2014-07-23 20:25:10
    package lkp; class Person{ private String name; private int age;...2、this调用构造方法时一定要留下一个构造方法作为出口,即程序中至少存在一个构造方法是不使用this调用其他构造方法的 */
  • 转载请注明出处:http://blog.csdn.net/xyang81/article/details/44002089在第6章我们学习到了在Native层如何调用Java静态方法和实例方法,其中调用实例方法的示例代码中也提到了调用构造函数来实始化一个对象,但...
  • 先说构造方法,在使用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...
  • public class ThisQuoteTest { String name; int age; String work; public ThisQuoteTest() { this("Lily",23,"teacher");... public ThisQuoteTest(String name,int age,String work) ... this.name =nam
  • 看Head First Java 256页 ,书中提到“this()只能用在构造函数中,且它必须是第一行语句!...在构造函数中,如果你不指定构造器之间的调用关系,那么编译器会给你加上super();目的是在初始化当前对象时,先保证了
  • package Test; abstract class FatherClass{ ...System.out.println("无参父类构造方法"); } FatherClass(int i){ System.out.println("有参父类构造方法"); } } class SonClass extends FatherClass{
  • Java反射之调用构造方法and操作数组

    千次阅读 2011-03-12 21:48:00
    首先是通过Java反射方式调用构造方法的demo package com.jadyer.reflection; import java.lang.reflect.Constructor; /** * 反射方式调用构造方法 */ public class InvokeConstructor { public static void ...
  • 在对对象成员变量初始化时,有输入时,通过有参构造方法进行赋值。当没有输入时,可以给个初始值,就通过无参写入默认的,无参调有参...// main方法中 new调用无参构造方法,再完成上面的无参调有参 new 类名(); ...
  • 是不是子类构造方法调用了任何方法,不管是自己重构的构造方法,还是其他方法,系统就不会给super()了,初学者有疑问,求大神解答
  • 无参构造方法和有参构造方法调用
  • 调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 帮助子类做初始化工作。
  • Java中规定:在实例化子类对象时,必须先调用父类的构造方法,再调用子类的构造方法(先有父母再有孩子)。且必须在子类构造方法的第一行调用父类方法。 一般在子类中显式的调用父类构造方法,若没有显式调用调用...
  • 方法的调用 this方法 构造方法

    千次阅读 2015-09-04 21:49:04
    1 调用者和被调用方法位于同一类中,调用形式如下 (this)方法名[] 在大多数情况下,关键字this可以忽略 2 调用者位于被调用方法所在类的外部 对象名.方法名或者类名.方法
  • 笔者之前一直很疑惑:为什么别人的源代码中的类...这个是Java的规定:子类继承父类,子类的构造方法必须调用super()即父类的构造方法,而且必须放在构造方法的第一行。那么问题又来,为什么我写的类有时候都不用去...
  • 下面是关于父类构造方法调用的实验:当父类子类都没有定义构造方法时,系统为父类、子类提供一个无参构造方法,并在子类中隐式调用父类无参构造方法:class Father {} class Son extends Father {}我们可以自己写...
  • 其实子类的所有构造方法的第一行都有一条隐示super()或者显示的super() 隐示super() 先说一下什么情况下会有隐示的super()。 1.子类构造函数中没写super()并且子父类具有无参构造函数。那么子类第一行便会自动一条...
  • 1.构造方法为为了初始化对象中的属性和方法 2.子类继承父类的成员变量,所以要先调用fuqi父类的构造方法和属性。
  • 构造方法

    万次阅读 多人点赞 2019-05-21 15:54:08
    构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用构造方法。 格式 public 类名称(参数类型 参数名称){ 方法体 } 注意事项 构造方法的名称必须和所在的类名称完全一样,就连大...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,516,839
精华内容 606,735
关键字:

怎么调用构造方法