反射之获取类,方法等
2015-08-31 22:28
113 查看
1 反射之获取类 获取类有三种方法
public interface Person {
public void sayHi();
}
public class Student implements Person{
private String id;
private String name;
private int age;
public int sex=1;
//省去构造方法和get set方法
}
Class c1 = Student.class;
Class c2=Class.forName("com.study.reflect.Student");
Class c3=new Student().getClass();
System.out.println(c1==c2);
System.out.println(c1==c3);
System.out.println("类名"+c1.getName()); //获取类名
Package package1=c1.getPackage(); //获取包名
System.out.println("包名"+package1.getName());
System.out.println("接口名"+c1.getInterfaces()[0].getName()); //接口名com.study.reflect.Person
System.out.println("父类"+c1.getSuperclass()); //父类class java.lang.Object
2.反射之获取属性
Class c1 = Student.class;
//获取所有的属性(public的)
Field field=c1.getField("sex");
System.out.println("公有的(public)"+field.getName()+"---"+field.getType());
Field[] fields = c1.getFields();
for(Field field1:fields){
System.out.println("所有公有的(public)"+field1.getName()+"_"+field1.getType());
}
//获取所有的属性(private类型和public )
Field fieldprivate =c1.getDeclaredField("name"); //getDeclaredField可以获取public和private的
Field[] fieldprivate4 = c1.getDeclaredFields();
System.out.println("私有或者公有的(public or private)"+fieldprivate.getName()+"---++++++"+fieldprivate.getType());
3.获取方法 构造方法
Class c1 = Student.class;
Constructor com1 = c1.getConstructor(null);
System.out.println(com1.getParameterTypes().length); //输出 0
Constructor com=c1.getConstructor(String.class,String.class,int.class); //调用具体参数 类型的构造方法
//输出 java.lang.String java.lang.String int 输出的是参数类型
for(Class a:com.getParameterTypes()){
System.out.println(a.getName());
}
//输出 都是java.lang.class 输入原始数据类型
for(Type a:com.getGenericParameterTypes()){
System.out.println(a.getClass().getName());
}
4.获取类的相关方法
Class c1 = Student.class;
//获取方法
//1.指定某个方法
Method method = c1.getMethod("setAge", int.class);
System.out.println(method.getName()+"==========");
//2.获取所有的方法
Method[] methods=c1.getMethods();
for(Method method2:methods){
System.out.println(method2.getName());
}
public interface Person {
public void sayHi();
}
public class Student implements Person{
private String id;
private String name;
private int age;
public int sex=1;
//省去构造方法和get set方法
}
Class c1 = Student.class;
Class c2=Class.forName("com.study.reflect.Student");
Class c3=new Student().getClass();
System.out.println(c1==c2);
System.out.println(c1==c3);
System.out.println("类名"+c1.getName()); //获取类名
Package package1=c1.getPackage(); //获取包名
System.out.println("包名"+package1.getName());
System.out.println("接口名"+c1.getInterfaces()[0].getName()); //接口名com.study.reflect.Person
System.out.println("父类"+c1.getSuperclass()); //父类class java.lang.Object
2.反射之获取属性
Class c1 = Student.class;
//获取所有的属性(public的)
Field field=c1.getField("sex");
System.out.println("公有的(public)"+field.getName()+"---"+field.getType());
Field[] fields = c1.getFields();
for(Field field1:fields){
System.out.println("所有公有的(public)"+field1.getName()+"_"+field1.getType());
}
//获取所有的属性(private类型和public )
Field fieldprivate =c1.getDeclaredField("name"); //getDeclaredField可以获取public和private的
Field[] fieldprivate4 = c1.getDeclaredFields();
System.out.println("私有或者公有的(public or private)"+fieldprivate.getName()+"---++++++"+fieldprivate.getType());
3.获取方法 构造方法
Class c1 = Student.class;
Constructor com1 = c1.getConstructor(null);
System.out.println(com1.getParameterTypes().length); //输出 0
Constructor com=c1.getConstructor(String.class,String.class,int.class); //调用具体参数 类型的构造方法
//输出 java.lang.String java.lang.String int 输出的是参数类型
for(Class a:com.getParameterTypes()){
System.out.println(a.getName());
}
//输出 都是java.lang.class 输入原始数据类型
for(Type a:com.getGenericParameterTypes()){
System.out.println(a.getClass().getName());
}
4.获取类的相关方法
Class c1 = Student.class;
//获取方法
//1.指定某个方法
Method method = c1.getMethod("setAge", int.class);
System.out.println(method.getName()+"==========");
//2.获取所有的方法
Method[] methods=c1.getMethods();
for(Method method2:methods){
System.out.println(method2.getName());
}
相关文章推荐
- fastjson处理接口时的一个问题
- Ruby 之 class 中的 private、 protected、public
- Ruby定义私有方法(private)的两种办法
- C#中实现Fluent Interface的三种方法
- php类中private属性继承问题分析
- Ruby中的public、private、protected区别小结
- c#中的interface abstract与virtual介绍
- 领悟php接口中interface存在的意义
- JavaScript的public、private和privileged模式
- 构造函数定义为private或者protected的好处
- C#接口interface用法实例
- PHP abstract与interface之间的区别
- C#接口(Interface)用法分析
- android private libraries 中的包源代码添加方法
- PHP SPL标准库之接口(Interface)详解
- Java中的private修饰符失效了?
- C++中的三种继承public,protected,private详细解析
- 项目实施补充
- 修改设备密码及灌溉IOS
- 华三AC基本调试步骤