精华内容
下载资源
问答
  • 如何调用构造方法

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

    展开全文
  • public class LianXi { ... } } ``` 输出结果: null,0 张三,18 先进入main方法调用构造方法,name和age此时都为初始值 然后返回main student.name="张三"; student.age=18; student.speak(); 这段先赋值在在调用方法
    public class LianXi {
    
    
        public static void main(String[]args){
            Student student=new Student();
            student.name="张三";
            student.age=18;
            student.speak();
        }
    
    }
         class Student{
         String name;
         int age;
         Student(){
             System.out.println(name+","+age);
         }
    
           public  void speak(){
               System.out.println(name+","+age);
           }
         }
         ```
    
         输出结果:
         null,0
       张三,18
      先进入main方法调用构造方法,name和age此时都为初始值
      然后返回main   student.name="张三";
            student.age=18;
            student.speak();
            这段先赋值在在调用方法
      
    
    展开全文
  • 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);

    }

    }

    依次验证上面的语法。

    展开全文
  • 文章目录一、搭建项目结构二、使用Spring框架调用各类构造方法1. 调用无参构造方法2. 调用参数类型为基本数据类型或是String类型的构造方法3. 调用参数类型为引用类型的构造方法4. 调用参数类型为数组类型的构造方法...

    一、搭建项目结构

    1. 创建一个java工程
    2. 项目中创建一个文件名为lib的folder——>拷入以下jar包——>选中全部jar包,右击选择“Build Path”——>选择“Add to Build Path”。
      在这里插入图片描述
    3. 在src资源文件夹中新建com.zxr.vo和com.zxr.test包并在对应包下新建如下类:
      在这里插入图片描述
    4. 在src资源文件夹中新建名为application.xml的Spring Bean Configuration File。

    二、使用Spring框架调用各类构造方法

    在Test类中写测试代码如下:

    public class Test {
    
    	public static void main(String[] args) {
    		ClassPathXmlApplicationContext applicationContext  = new ClassPathXmlApplicationContext("application.xml");
    		Object obj = applicationContext.getBean(Student.class);
    	}
    	
    }
    

    1. 调用无参构造方法

    在application.xml中直接创建Student对象并且不进行配置时,默认调用无参构造方法。

    • Student类中代码如下:

        public class Student {
        	public Student() {
        		System.out.println("无参构造方法");
        	}
        }
      
    • application.xml中代码如下:

        <bean class="com.zxr.vo.Student"></bean>
      
    • 运行Test类后输出结果如下:

        无参构造方法
      

      注意:当类中定义了有参构造方法且没有定义无参构造方法时,编译器会报错该类没有定义无参构造方法。

    2. 调用参数类型为基本数据类型或是String类型的构造方法

    通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,使用value属性进行赋值。

    • Student类中代码如下:

        public class Student {
        	
        	public String name;
        	public int age;
        	
        	public Student(String name, int age) {
        		this.name = name;
        		this.age = age;
        		System.out.println("参数类型为基本数据类型或是String类型的构造方法:");
        		System.out.println("name="+this.name);
        		System.out.println("age="+this.age);
        	}
        }
      
    • application.xml中代码如下:

        	<bean class="com.zxr.vo.Student">
        		<constructor-arg name="name" value="Tom"></constructor-arg>
        		<constructor-arg name="age" value="18"></constructor-arg>
        	</bean>
      
    • 运行Test类后输出结果如下:

        参数类型为基本数据类型或是String类型的构造方法:
        name=Tom
        age=18
      

    3. 调用参数类型为引用类型的构造方法

    通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,使用ref属性指定对象。

    • Student类中代码如下:

        public class Student {
        	
        	public Date birthday;
      
        	public Student(Date birthday) {
        		this.birthday = birthday;
        		System.out.println("参数类型为引用类型的构造方法:");
        		System.out.println("birthday="+this.birthday);
        	}
        }
      
    • application.xml中代码如下:

        <bean id="date" class="java.util.Date"></bean>
      
        <bean class="com.zxr.vo.Student">
        		<constructor-arg name="birthday" ref="date"></constructor-arg>
        </bean>
      
    • 运行Test类后输出结果如下:

        参数类型为引用类型的构造方法:
        birthday=Sat May 11 00:32:55 CST 2019
      

    4. 调用参数类型为数组类型的构造方法

    通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,通过array子标签的value属性设置参数值。

    • Student类中代码如下:

        public class Student {
        	
        	public int[] scores;
      
        	public Student(int[] scores) {
        		this.scores = scores;
        		System.out.println("参数类型为数组类型的构造方法:");
        		for (int score : scores) {
        			System.out.println(score);
        		}
        	}
        }
      
    • application.xml中代码如下:

        <bean class="com.zxr.vo.Student">
        	<constructor-arg name="scores" >
        		<array>
        			<value>88</value>
        			<value>90</value>
        		</array>
        	</constructor-arg>
        </bean>
      
    • 运行Test类后输出结果如下:

        参数类型为数组类型的构造方法:
        88
        90
      

    5. 调用参数类型为List集合的构造方法

    (1) List中存放数据类型为基本数据类型或是String类型

    通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,通过list子标签的value子标签设置参数值。

    • Student类中代码如下:

        public class Student {
        	
        	public List<String> lessons;
      
        	public Student(List<String> lessons) {
        		this.lessons = lessons;
        		System.out.println("List中存放数据类型为String类型的构造方法:");
        		for (String lesson : lessons) {
        			System.out.println(lesson);
        		}
        	}
        }
      
    • application.xml中代码如下:

        <bean class="com.zxr.vo.Student">
        	<constructor-arg name="lessons">
        		<list>
        			<value>语文</value>
        			<value>数学</value>
        		</list>
        	</constructor-arg>
        </bean>
      
    • 运行Test类后输出结果如下:

        List中存放数据类型为String类型的构造方法:
        语文
        数学
      

    (2) List中存放数据类型为引用类型

    通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,通过list子标签设置参数值有两种方式。

    1. 直接在list子标签中创建引用类型的对象
    2. 使用ref标签引用已创建的对象
    • Student类中代码如下:

        public class Student {
        	
        	public List<Date> birthdays;
      
        	public Student(List<Date> birthdays) {
        		this.birthdays = birthdays;
        		System.out.println("List中存放数据类型为引用类型的构造方法:");
        		for (Date birthday : birthdays) {
        			System.out.println(birthday);
        		}
        	}
        }
      
    • application.xml中代码如下:

        <bean id="date" class="java.util.Date"></bean>
        
        <bean class="com.zxr.vo.Student">
         	<constructor-arg name="birthdays">
         		<list>
         			<bean class="java.util.Date"></bean><!--利用第一种方式设置参数值-->
         			<ref bean="date"/><!--利用第二种方式设置参数值-->
         		</list>
         	</constructor-arg>
        </bean>
      
    • 运行Test类后输出结果如下:

        List中存放数据类型为引用类型的构造方法:
        Sat May 11 00:51:12 CST 2019
        Sat May 11 00:51:12 CST 2019
      

    5. 调用参数类型为Set集合的构造方法

    通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,通过set子标签设置参数值。与参数类型为List集合的设置方法相同:
    (1) Set中存放数据类型为基本数据类型或是String类型
      通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,通过list子标签的value子标签设置参数值。
    (2) Set中存放数据类型为引用类型
      通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,通过set子标签设置参数值有两种方式。

    1. 直接在list子标签中创建引用类型的对象
    2. 使用ref标签引用已创建的对象

    过程与List集合类似,只是将list子标签换为set子标签,故此处不再赘述。

    6. 调用参数类型为Map集合的构造方法

    (1) Map中存放数据类型为基本数据类型或是String类型

    通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,通过map子标签的entry子标签设置参数值:key属性设置关键字,value属性设置值。

    • Student类中代码如下:

        public class Student {
        	
        	public Map<String, String> families;
      
        	public Student(Map<String, String> families) {
        		this.families = families;
        		System.out.println("Map中存放数据类型为基本数据类型或String类型的构造方法:");
        		Set<String> keys = this.families.keySet();
        		for (String key : keys) {
        			System.out.println(key+":"+this.families.get(key));
        		}
        	}
        }
      
    • application.xml中代码如下:

        <bean class="com.zxr.vo.Student">
        	<constructor-arg>
        		<map>
        			<entry key="爸爸" value="Jack"></entry>
        			<entry key="妹妹" value="July"></entry>
        		</map>
        	</constructor-arg>
        </bean>
      
    • 运行Test类后输出结果如下:

        Map中存放数据类型为基本数据类型或String类型的构造方法:
        爸爸:Jack
        妹妹:July
      

    (2) Map中存放数据类型为引用类型

    通过constructor-arg标签设置构造方法参数的值,使用name属性确定参数名,通过map子标签的entry子标签设置参数值:key属性设置关键字,value-ref属性通过引用对象设置值。

    • Student类中代码如下:

        public class Student {
        	
        	public Map<String, Date> families;
      
        	public Student(Map<String, Date> families) {
        		this.families = families;
        		System.out.println("Map中存放数据类型为引用类型的构造方法:");
        		Set<String> keys = this.families.keySet();
        		for (String key : keys) {
        			System.out.println(key+":"+this.families.get(key));
        		}
        	}
        }
      
    • application.xml中代码如下:

        <bean class="com.zxr.vo.Student">
        	<constructor-arg>
        		<map>
        			<entry key="爸爸" value-ref="date"></entry>
        			<entry key="妹妹" value-ref="date"></entry>
        		</map>
        	</constructor-arg>
        </bean>
      
    • 运行Test类后输出结果如下:

        Map中存放数据类型为引用类型的构造方法:
        爸爸:Sat May 11 01:20:12 CST 2019
        妹妹:Sat May 11 01:20:12 CST 2019
      

    三、总结

    1. 如果参数类型是数组、List、Set,其中存放的是基本数据类型或者是String类型,则使用value标签对其赋值,否则使用ref标签引用对象或是使用bean子标签直接创建对象。
    2. 如果参数类型是Map集合,key或value是基本数据类型或者是String类型,则使用子标签entry中的key或value属性进行赋值,否则使用子标签entry中的key-ref或value-ref属性进行赋值。
    展开全文
  • php调用父类构造方法:使用parent调用父类的构造,用【::】引用一个类,代码为【parent::__construct($title,$firstName,$mainName,$price)】。php调用父类构造方法:使用parent调用父类的构造方法要引用一个类而...
  • 在子类中应该如何调用父类的构造方法在Java中,子类可以继承父类的非私有成员变量和成员方法(不是以private关键字修饰的)作为自己的成员变量和成员方法。但是,不能继承父类的构造方法,那么在子类中应该如何调用...
  • 今天就来为大家介绍java中如何用this调用构造方法,并且通过实际的代码来为大家展示。一起来了解一下吧。一、首先我们需要知道的是,在Java中,当给一个类创建了多个构造方法时,有时想在一个构造方法中调用另一个...
  • 主要介绍了C# 构造函数如何调用方法,文中讲解非常详细,示例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • 如何使用Spring Bean Configuration File调用构造方法并给参数赋值 一、Spring Bean Configuration File调用构造方法的原理 二、分类讨论如何给构造方法参数赋值 1.分类依据:根据数据类型进行分类讨论 3.分类讨论 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,874
精华内容 1,149
关键字:

如何调用构造方法