精华内容
下载资源
问答
  • 构造方法不能直接调用构造方法,需要使用关键字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

    展开全文
  • Java的静态方法里是不能调用非静态方法的,但为什么可以调用构造方法
  • 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);
        }
    }
    
    
    展开全文
  • 我们在创建对象的时候,为什么要调用构造方法并且要给构造方法传入实参???  :   答:因为一个类,提供了多种构造方法,传入的实参不同,构造的对象也不同,该对象的功能和用途也不同。

    我们在创建对象的时候,为什么要调用构造方法并且要给构造方法传入实参???

           :

     

    答:因为一个类,提供了多种构造方法,传入的实参不同,构造的对象也不同,该对象的功能和用途也不同。

    展开全文
  • 静态成员 基本定义: 静态成员包括静态方法(static method)和静态变量...java支持静态方法和静态变量,无需创建类的实例就可以调用静态方法。 ----《java语言程序设计 基础篇》原书第10版,梁勇著 要声明一个静态变量
  • 用this调用构造方法

    千次阅读 2013-12-12 08:09:17
    如果在程序中想用某一构造方法调用另一构造方法,可以用this来实现,具体的调用形式如下; this(); 例: public class java_ex09 { public static void main(String[] args){ new Person09("xiangwang",25);...
  • 调用构造方法时,首先要对成员变量进行赋初始值
  • 先说构造方法,在使用Class类中的,newInstance() 取得实例化对象时,会出现一些问题。看下面出错的代码:package com.jmd.bingo; class Person { private String name; private int age; // public Person() { //...
  • 我们这次在上一章中创建的包下创建Demo04....如果通过反射来创建新的实例,可以调用Class提供的newInstance()方法: Person p=Person.class.newInstance(); 调用Class.newInstance()的局限是,它只能调用该类的pu...
  • public class LianXi { ... } } ``` 输出结果: null,0 张三,18 先进入main方法调用构造方法,name和age此时都为初始值 然后返回main student.name="张三"; student.age=18; student.speak(); 这段先赋值在在调用方法
  • import java.lang.reflect.Constructor; /** * @author 万星明 * @version 创建时间:2018年10月26...public class 通过反射对象访问构造方法 { public static void main(String[] args) throws Exception { /...
  • 转载请注明出处:http://blog.csdn.net/xyang81/article/details/44002089在第6章我们学习到了在Native层如何调用Java静态方法和实例方法,其中调用实例方法的示例代码中也提到了调用构造函数来实始化一个对象,但...
  • 使用this调用构造方法

    千次阅读 2014-07-23 20:25:10
    package lkp; class Person{ private String name; private int age;...2、this调用构造方法时一定要留下一个构造方法作为出口,即程序中至少存在一个构造方法是不使用this调用其他构造方法的 */

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 52,038
精华内容 20,815
关键字:

调用构造方法