黑马程序员----------反射
来源:互联网 发布:网络教育的英文怎么说 编辑:程序博客网 时间:2024/05/12 18:31
------- android培训、java培训、期待与您交流! ----------
获取某个类的Class对象的三种方式:
方式一:调用对象的getClass()方法。它是Object类中的方法。
此方法是普通方法,不是静态的,要通过类的对象的引用去调用。
Student stu = new Studetn();
Class stuClass = stu.getClass();
方式二:任何的"数据类型"都有一个"静态的属性"--class属性,这个属性可以
获取这个类的Class对象
方式三:调用Class类中的静态方法forName()可以获取某个类的Class对象;(常用方式)
public static Class forName(String className)
通过这个Class对象,我们可以:
1.获取并调用这个类的所有的构造方法:
批量获取
1.public Constructor[] getConstructors():获取所有公共构造方法
2.public Constructor[] getDeclaredConstructors():获取所有构造方法。包括公有,受保护,默认,私有
获取单个的构造方法:
1.public Constructor getConstructor(Class... parameterTypes):获取类中的指定的"公有构造方法"。
参数:parameterTypes:构造方法形参的类型的Class
2.public Constructor getDeclaredConstructor(Class...parameterTypes):获取类中的任何的构造方法,包括私有的
调用构造方法:通过Constructor去调用。使用方法:public T newInstance(Object... initargs)
通过Class对象获取成员属性,并调用:
*
批量获取:
1.Field[] getFields() :所用"公有"的成员属性
2.Field[] getDeclaredFields() :所有的成员属性,包括私有的:
获取单个的属性
1.Field getField(String fieldName):获取单个的,公有的成员属性
2.Field getDeclaredField(String fieldName):获取单个的成员属性,可以是任何的访问级别
通过Class对象获取某个类的成员方法并调用:
批量获取:
1.Method[] getMethods() :获取所有的"公有"方法;
2.Method[] getDeclaredMethods() :获取所有方法,包括私有的。
获取单个的:
1.Method getMethod(String name, Class<?>... parameterTypes) :获取某个公有的方法。
形参:name:方法名;
parameterTypes:形参的类型列表;
2.Method getDeclaredMethod(String name, Class<?>... parameterTypes):获取某个方法。可以是私有的。
以下为案例代码:
首先创建一个被调用的类生成class文件:
public class Student {//********一些构造方法***********////公有的public Student(){System.out.println("调用了公有的,无参的构造方法");}public Student(boolean b){System.out.println("调用了公有的,带参的构造方法。b = " + b);}//受保护的protected Student(int n){System.out.println("调用了受保护的构造方法 n = " + n);} //默认的Student(String s){System.out.println("调用了默认的构造方法。s = " + s);}//私有的private Student(char c){System.out.println("调用了私有的构造方法。c = " + c);}//*****************成员属性***************//public String stuName;protected int age;char sex;private String address;//*****************成员方法*******************//public void show(){System.out.println("调用了公有,无参的show()方法");}protected void show(String s){System.out.println("调用了受保护的,带参的show()方法。参数s = " + s);}void show(int n){System.out.println("调用了默认的,带参的show()方法。参数n = " + n);}private int show(char c){System.out.println("调用了私有的,带参的带返回值的show()方法。参数c = " + c);return 10 + 20;}}然后再main方法中实现:
public static void main(String[] args) throws Exception {//三种创建class类的方法Student stu=new Student();Class c1=stu.getClass();Class c2=Student.class;Class c3=null;try {c3=Class.forName("cn.wxw.反射.Student");} catch (ClassNotFoundException e) {}//获取class文件中的所有构造方法Constructor[] g1=c3.getDeclaredConstructors();for(Constructor c:g1){System.out.println(c);}System.out.println("------------------------");//获取所有的 公有 狗仔方法 Constructor[] g2=c3.getConstructors(); for(Constructor c:g2){ System.out.println(c); }System.out.println("------------------------");//获取单个公共构造方法Constructor g3=c3.getConstructor();System.out.println(g3);g3=c3.getConstructor(boolean.class );System.out.println(g3);System.out.println("------------------------");//获取一个任类型构造方法Constructor g4=c3.getDeclaredConstructor(char.class);System.out.println(g4);System.out.println("------------------------");//以下是获取字段//获取所有字段Field[] f1=c3.getDeclaredFields();for(Field f:f1){System.out.println(f);}System.out.println("------------------------");//获取公有字段Field[] f2=c3.getFields();for(Field f:f2){System.out.println(f);}System.out.println("------------------------");//获取指定公有字段Field f3=c3.getField("stuName");System.out.println(f3);System.out.println("------------------------");//获取指定字段Field f4=c3.getDeclaredField("address");System.out.println(f4);//下面是获取成员方法 也分为4种System.out.println("*************************************获取所有\"公有\"的成员方法**********************************");Method[] methodArray = c3.getMethods();//包含了父类的方法for(Method m : methodArray){System.out.println(m);}System.out.println("*************************************获取所有的成员方法,包括私有的**********************************");Method[] methodArray2 = c3.getDeclaredMethods();//不包含父类的。for(Method m : methodArray2){System.out.println(m);}System.out.println("*************************************获取单个\"公有\"的\"无参\"的成员方法**********************************");Method m1 = c3.getMethod("show");System.out.println(m1);System.out.println("*************************************获取单个\"私有\"的\"带参\"的成员方法**********************************");Method m2 = c3.getDeclaredMethod("show", char.class);System.out.println(m2);}
- 黑马程序员--java 反射
- 黑马程序员之反射
- 黑马程序员之反射
- 黑马程序员__java_反射
- 黑马程序员_反射
- 黑马程序员 反射
- 黑马程序员--Java反射
- 黑马程序员--反射
- 黑马程序员-java-反射
- 黑马程序员:反射技术
- 黑马程序员_java反射
- 黑马程序员---反射
- 黑马程序员-反射
- 黑马程序员---反射
- 黑马程序员_反射
- 黑马程序员_反射
- 黑马程序员:反射
- 黑马程序员_反射
- sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询
- 作用域链
- 【Eclipse/MyEclipse常用设置】
- sap可配置BOM的主要流程
- jtopo
- 黑马程序员----------反射
- 闭包
- 黑马程序员_JAVA_基础_02
- sap 彻底删除物料主档
- Oracle停掉一个正在运行的job
- java版本无法改变
- jdbc方式应用入门的小程序
- 浅谈HTTP协议中Get与Post的区别
- ios个人笔记