易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
Java反射之调用构造方法and操作数组
二者共用一个Person类,请看代码。。
首先是通过Java反射方式调用构造方法的demo
package
com.jadyer.reflection;
import
java.lang.reflect.Constructor;
/**
* 反射方式调用构造方法
*/
public
class
InvokeConstructor {
public
static
void
main(String[] args)
throws
Exception {
Class<?> clazz = Class.forName(
"com.jadyer.model.Person"
);
//创建一个Class对象,用于描述Person类
/**
* 调用有参的构造方法
*/
Class<?>[] argTypes = {String.
class
, Integer.
class
};
//指明所要调用的构造方法的形参
Constructor<?> constructor = clazz.getConstructor(argTypes);
//获取指定参数的构造方法
Object obj = constructor.newInstance(
"盗墓笔记"
,
888
);
//通过给定的实参,创建一个对象,它的返回值即新建对象的句柄
System.out.println(obj);
//打印新创建的对象。这里会自动调用toString()输出它的两个属性的值
/**
* 调用无参构造方法
* @see 也可以使用下面的两种方式,获取无参的构造方法
* @see constructor = clazz.getConstructor(new Class[0])
* @see constructor = clazz.getConstructor(null)
* @see 另外也可以使用obj = clazz.newInstance()创建无参构造方法的一个对象
*/
obj = clazz.getConstructor().newInstance();
//获取无参的构造方法,并使用其创建一个对象
System.out.println(obj);
//打印新创建的对象的属性的值,这里仍会自动调用它的toString()方法
}
}
然后是共用的Person类
package
com.jadyer.model;
public
class
Person {
public
String name;
public
Integer age;
public
Person(){}
public
Person(String name, Integer age) {
this
.name = name;
this
.age = age;
}
@Override
public
String toString() {
return
"Name:"
+ name +
" Age:"
+ age;
}
}
最后是通过Java反射方式操作数组的demo
package
com.jadyer.reflection;
import
java.lang.reflect.Array;
import
com.jadyer.model.Person;
/**
* 反射方式操作数组
*/
public
class
ProcessArray {
public
static
void
main(String[] args) {
int
[] records = {
89
,
56
,
43
,
77
,
33
};
Person[] persons = {
new
Person(
"张起灵"
,
26
),
new
Person(
"汪藏海"
,
36
),
new
Person(
"铁面生"
,
46
)};
records = (
int
[])incrementArray(records);
persons = (Person[])incrementArray(persons);
list(records);
//这里输出的五行零,是扩容后的数组的默认初始化的值
System.out.println(
"---------------------------------------"
);
list(persons);
//这里输出的三行null,是扩容后的数组的默认初始化的值
System.out.println(
"---------------------------------------"
);
int
[][] aa = (
int
[][])Array.newInstance(
int
.
class
,
2
,
3
);
//创建多维数组,指定元素类型和每维的长度
System.out.println(aa);
}
/**
* 加倍指定数组的容量,同时将原数组的元素依次保存到扩容后的新数组中
*/
public
static
Object incrementArray(Object array){
Class<?> elementType = array.getClass().getComponentType();
//获取数组元素的类型
int
size = Array.getLength(array);
//获取数组的原始容量
Object newArray = Array.newInstance(elementType, size*
2
);
//按照指定的元素类型和容量,创建新数组
// System.arraycopy(array,0,newArray,0,size); //赋值数组元素,下面是为了更好的阐述反射机制
for
(
int
i=
0
; i<size; i++) {
//复制数组元素
Object obj = Array.get(array, i);
//获取array数组中的第i个元素,返回的是Object类型
Array.set(newArray, i, obj);
//设置目标数组newArray的第i个元素的值为obj
}
return
newArray;
}
/**
* 显示指定数组中所有的元素
*/
public
static
void
list(Object array){
int
size = Array.getLength(array);
//用反射API的方式获取指定数组对象的长度
for
(
int
i=
0
; i<size; i++) {
System.out.println(Array.get(array, i));
//输出该数组中的每一个元素
}
}
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图