public interface China {
static String names="接口";
static int ages=11;
void structure();
void structure(String name,int age);
}
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class Test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, NoSuchFieldException {
Class<?> clazzOne=Users.class;
Class<?> clazzTwo=Class.forName("Users");
/**
* 获取对象名称
System.out.println(clazzOne.getName());
System.out.println(clazzTwo.getName());
*/
/**
* 通过无参构造实例化对象
Users user=(Users) clazzTwo.newInstance();
user.setName("丽水");
user.setage(18);
System.out.println(user);
*/
/**
* 取得全部的构造函数
Constructor<?> cons[]=clazzTwo.getConstructors();
Users u2= (Users) cons[0].newInstance();
System.out.println(u2);
Users u= (Users) cons[1].newInstance("威海市",1);
System.out.println(u);
*/
/**
* 获取所有的接口
Class<?> intes[]=clazzTwo.getInterfaces();
for (int i = 0; i < intes.length; i++) {
System.out.println("实现的接口 "+intes[i].getName());
}
*/
/**
* 获取父类
Class<?> temp=clazzTwo.getSuperclass();
System.out.println("继承的父类为: "+temp.getName());
*/
/**
* 取得全部的构造函数
Constructor<?> cons[]=clazzTwo.getConstructors();
for(Constructor<?> c:cons){
Class<?> parameterTypes[]=c.getParameterTypes();
int mo=c.getModifiers();
System.out.print(Modifier.toString(mo)+" "); //获取访问类型
System.out.print(c.getName()+" "); //获取名称
System.out.print("(");
for(int j=0;j<parameterTypes.length;++j){
System.out.print(parameterTypes[j].getName()); //获取参数
if(j<parameterTypes.length-1){
System.out.print(",");
}
}
System.out.print(")");
System.out.println();
}
*/
/**
* 获取方法全部成员
Method method[]=clazzTwo.getMethods();
for(Method mothod:method){
Class<?> returnType=mothod.getReturnType(); //返回类型
Class<?> para[]=mothod.getParameterTypes(); //参数类型
int temp=mothod.getModifiers();
String types=Modifier.toString(temp); //访问类型
Class<?> exce[]=mothod.getExceptionTypes(); //获取抛出异常
System.out.println(types+" "+returnType+" "+mothod.getName()+"( "+para+") throws" +exce);
}
*/
/**
* 获取类全部属性
// 取得本类的全部属性
Field[] fieldDeclared = clazzTwo.getDeclaredFields();
for(Field f:fieldDeclared){
String types=Modifier.toString(f.getModifiers());
System.out.println(types+" "+f.getType()+" "+f.getName());
}
// 取得实现的接口或者父类的属性
Field[] field = clazzTwo.getFields();
for(Field f:field){
String types=Modifier.toString(f.getModifiers());
System.out.println(types+" "+f.getType()+" "+f.getName());
}
*/
/**
* 通过反射调用其他类中的方法
//无参
Method method=clazzTwo.getMethod("structure");
method.invoke(clazzTwo.newInstance());
//有参
method=clazzTwo.getMethod("structure", String.class,int.class);
method.invoke(clazzTwo.newInstance(),"Rollen",20);
*/
/**
* 通过反射操作属性
Object obj = clazzTwo.newInstance();
Field field = clazzTwo.getDeclaredField("name");
field.setAccessible(true);
field.set(obj, "张三");
System.out.println(field.get(obj));
*/
/**
* 通过反射取得并修改数组的信息
int[] temp={1,2,3,4,5};
Class<?> demo=temp.getClass().getComponentType();
System.out.println("数组类型: "+demo.getName());
System.out.println("数组长度 "+Array.getLength(temp));
System.out.println("数组的第一个元素: "+Array.get(temp, 0));
Array.set(temp, 0, 100);
System.out.println("修改之后数组第一个元素为: "+Array.get(temp, 0));
*/
/**
* 反射修改数组大小
int[] temp={1,2,3,4,5,6,7,8,9};
Class<?> arr=temp.getClass().getComponentType(); //获取数组类型
Object newArr=Array.newInstance(arr, 20); //创建新数组长度20
int co=Array.getLength(temp); //获取数组长度
System.arraycopy(temp, 0, newArr, 0, co); //copy数组复制长度co
int[] newTemp=(int[])newArr;
for(int n:newTemp){
System.out.print(n);
}
*/
}
}
public class Users implements China{
public Users(){
System.out.println("实例化无参...Users");
}
public Users(String name, int age) {
this.name = name;
this.age = age;
System.out.println("实例化有参...Users");
}
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getage() {
return age;
}
public void setage(int age) {
this.age = age;
}
public String toString(){
return "["+this.name+" "+this.age+"]";
}
@Override
public void structure() {
// TODO Auto-generated method stub
System.out.println("structure()");
}
@Override
public void structure(String name, int age) {
// TODO Auto-generated method stub
System.out.println("tructure(String name, int age)");
}
}