*java.lang.reflect.Constructor规范
*/public interface ConstructorAccessor {
public Object newInstance(Object[] args)
throws InstantiationException,
IllegalArgumentException,
InvocationTargetException;
}
如果必须使用有参构造函数的话可以.
1.通过Class类中getConstructors()方法取得本类中全部的构造函数.
2.想构造方法传递一个一个对象数组进去 里面包含了构造方法中所需的各个参数
3之后通过Constructor实例化对象
Constructor表示构造函数类
一般建议类中包含一个无参构造函数.
java.lang.reflect包中的常用类
1. Constructor 表示类中的构造函数
getModifiers(); 取得修饰符
getName(); 取得方法名
getParamenterTypes() 取得参数的类型
2. Field 表示类中的属性
3. Mehtod 表示类中的方法
这三个类都是 AccessibleObject类的子类
代码: package com.test;
import java.lang.reflect.Constructor;
public class Test_Constructor {
public static void main ( String [] args ) {
try {
//实例化对象
Class> c = Class.forName("com.test.TestUserImpl");
//取得类全部实现的接口
Class [] c1 = c.getInterfaces();
//取得类所继承的父类
Class> c2 = c.getSuperclass();
//取得类中的全部构造方法
Constructor>[] con = c.getConstructors();
for ( int i = 0 ; i < c1.length ; i++ ){
System.out.println(c + " 类全部实现的接口 : " + c1[i]);
}
System.out.println( c + " 类所继承的父类 : " + c2);
System.out.println("-----------------------------------------------------------");
for( int i = 0 ; i < con.length ; i++ ){
//得到构造方法中的参数类型
Class>[] c4 = con[i].getParameterTypes();
System.out.println( c + " 构造方法 :" + con[i]);
System.out.println( c + " 构造方法修饰符 :" + con[i].getModifiers());
System.out.println( c + " 方法名 :" + con[i].getName());
for ( int j = 0 ; j < c4.length ; j++ ){
System.out.println( c + " 参数类型 :" + c4[j].getName());
}
if ( i < con.length -1 ){
System.out.println("-----------------------------------------------------------");
}
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
interface ITestUser{
public static final String uname = "rock";
public static final int upass = 123;
public void sayTest();
public String test(String s1 , String s2 );
}
class TestUserImpl implements ITestUser{
private String sex ;
private String tel ;
public TestUserImpl(){
}
public TestUserImpl( String sex ){
this.sex = sex ;
}
public TestUserImpl( String sex , String tel ){
this(sex) ;
this.tel = tel ;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
@Override
public void sayTest() {
// TODO Auto-generated method stub
System.out.println("名字 : " + this.uname + " 密码: " + this.upass);
}
@Override
public String test(String sex, String tel) {
return "性别 : " + sex + " 电话: " + tel ;
}
}
结果:
class com.test.TestUserImpl 类全部实现的接口 : interface com.test.ITestUser
class com.test.TestUserImpl 类所继承的父类 : class java.lang.Object
-----------------------------------------------------------
class com.test.TestUserImpl 构造方法 :public com.test.TestUserImpl()
class com.test.TestUserImpl 构造方法修饰符 :1
class com.test.TestUserImpl 方法名 :com.test.TestUserImpl
-----------------------------------------------------------
class com.test.TestUserImpl 构造方法 :public com.test.TestUserImpl(java.lang.String,java.lang.String)
class com.test.TestUserImpl 构造方法修饰符 :1
class com.test.TestUserImpl 方法名 :com.test.TestUserImpl
class com.test.TestUserImpl 参数类型 :java.lang.String
class com.test.TestUserImpl 参数类型 :java.lang.String
-----------------------------------------------------------
class com.test.TestUserImpl 构造方法 :public com.test.TestUserImpl(java.lang.String)
class com.test.TestUserImpl 构造方法修饰符 :1
class com.test.TestUserImpl 方法名 :com.test.TestUserImpl
class com.test.TestUserImpl 参数类型 :java.lang.String
//看 class com.test.TestUserImpl 构造方法修饰符 :1 得到的却是一个数字 因为java修饰符在底层是用数字表示的
//如果想把他换成我们看得懂的关键字 则必须使用Modifier类的toString(int mod);方法
// 修改代码: int h = c4[j].getModifiers();
System.out.println("转换后的权限 : " + Modifier.toString(h));
//结果为:
转换后的权限 : public final