-
如何调用构造方法
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
-
new对象时如何调用构造方法
2019-12-27 16:06:51public 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怎么调用构造方法_java怎么调用构造方法
2021-03-04 04:38:04Java调用构造方法,那就是子类调用基类(父类)的构造方法,如何调用,请看详细内容。子类中的构造方法的规则子类的构造过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用基类...Java调用构造方法,那就是子类调用基类(父类)的构造方法,如何调用,请看详细内容。
子类中的构造方法的规则
子类的构造过程中必须调用其基类的构造方法。
子类可以在自己的构造方法中使用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框架调用构造方法
2019-05-11 01:46:29文章目录一、搭建项目结构二、使用Spring框架调用各类构造方法1. 调用无参构造方法2. 调用参数类型为基本数据类型或是String类型的构造方法3. 调用参数类型为引用类型的构造方法4. 调用参数类型为数组类型的构造方法...文章目录
一、搭建项目结构
- 创建一个java工程
- 项目中创建一个文件名为lib的folder——>拷入以下jar包——>选中全部jar包,右击选择“Build Path”——>选择“Add to Build Path”。
- 在src资源文件夹中新建com.zxr.vo和com.zxr.test包并在对应包下新建如下类:
- 在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子标签设置参数值有两种方式。
- 直接在list子标签中创建引用类型的对象
- 使用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子标签设置参数值有两种方式。- 直接在list子标签中创建引用类型的对象
- 使用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
三、总结
- 如果参数类型是数组、List、Set,其中存放的是基本数据类型或者是String类型,则使用value标签对其赋值,否则使用ref标签引用对象或是使用bean子标签直接创建对象。
- 如果参数类型是Map集合,key或value是基本数据类型或者是String类型,则使用子标签entry中的key或value属性进行赋值,否则使用子标签entry中的key-ref或value-ref属性进行赋值。
-
php不调用父类构造_php如何调用父类构造方法?
2021-01-17 19:26:51php调用父类构造方法:使用parent调用父类的构造,用【::】引用一个类,代码为【parent::__construct($title,$firstName,$mainName,$price)】。php调用父类构造方法:使用parent调用父类的构造方法要引用一个类而... -
python调用父类的构造方法_在子类中应该如何调用父类的构造方法
2020-12-08 08:22:57在子类中应该如何调用父类的构造方法在Java中,子类可以继承父类的非私有成员变量和成员方法(不是以private关键字修饰的)作为自己的成员变量和成员方法。但是,不能继承父类的构造方法,那么在子类中应该如何调用... -
java中如何调用自身结构_java中如何用this调用构造方法?实例代码展示
2021-03-13 14:09:48今天就来为大家介绍java中如何用this调用构造方法,并且通过实际的代码来为大家展示。一起来了解一下吧。一、首先我们需要知道的是,在Java中,当给一个类创建了多个构造方法时,有时想在一个构造方法中调用另一个... -
C# 构造函数如何调用虚方法
2020-08-18 22:44:06主要介绍了C# 构造函数如何调用虚方法,文中讲解非常详细,示例代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下 -
如何使用Spring Bean Configuration File调用构造方法并给参数赋值
2019-05-10 23:25:31如何使用Spring Bean Configuration File调用构造方法并给参数赋值 一、Spring Bean Configuration File调用构造方法的原理 二、分类讨论如何给构造方法参数赋值 1.分类依据:根据数据类型进行分类讨论 3.分类讨论 ...