java反射 interface_Java反射(1)

*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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值