各位大虾,哪有java反射讲解的书啊,实在是不懂

解决方案 »

  1.   

    http://sjweb.hhit.edu.cn/ARTICLE/show.aspx?id=2454&cid=87http://bbs.tarena.com.cn/viewthread.php?tid=4567书就不知道了
      

  2.   

    XX in action 系列里面的 Reflection in action
      

  3.   

    sun公司的中文api,要学会看api
      

  4.   

    java这个没什么用,做系统软件用的,但java偏偏这方面不行
      

  5.   

    JAVA基础教程里面一般都有讲到..不过用到的时候再去查查理解下才印象深点会.
      

  6.   

    一般的java基础的书里都有介绍的,像java2核心技术,基础篇,
      

  7.   

    专门介绍反射的书市面上目前只有一本,即 3 楼提到 Manning 出版社的
    Java Reflection in Action 这本书好像没有中文版  :(
      

  8.   

    javaEcho
    检索类
    1.获取一个Class对象
    a)从对象的实例获取。
    Class c = javax.swing.JButton.getClass();
    b)从子类的实例获取
    javax.swing.JButton but = new javax.swing.JButton();
    Class c = but.getClass();//获取本类
    Class s = c.getSuperclass();//获取父类
    c)知道类名,则可以把.class加入到名字之后来获取。
    Class c = java.awt.Button.class;
    d)如果类名在编译时是未知的,则可以使用Class.forName()方法来获取.
    Class c = Class.forName(“javax.swing.JButton”);
    2.获取指定类的类名称
    javax.swing.JButton but = new javax.swing.JButton();
    Class c = t.getClass();//获取本类
    String s = c.getName(); //获取名字
    3.检索指定类的访问修饰符
    通过getModifiers()方法获取一个整型标识值。
    通过java.reflect.Modifier对象的isPublic, isFinal等方法判断此值.
    例如 :
    package com.text;import java.lang.reflect.Modifier;
    import javax.swing.JButton;public class JavaEcho {

    public void textClass(){
    String s = "qwe";
    int m = s.getClass().getModifiers();
    if(Modifier.isPublic(m)){
    System.out.println("public");
    }
    if(Modifier.isPrivate(m)){
    System.out.println("private");
    }
    if(Modifier.isFinal(m)){
    System.out.println("final");
    }
    }

    public static void main(String[] args) {
    new JavaEcho().textClass();
    }
    }
    显示结果 :public 
    final
    4. 检索指定类的父类
    package com.text;import java.lang.reflect.Modifier;
    import javax.swing.JButton;public class JavaEcho {

    public void textClass(){
    javax.swing.JButton but = new JButton();
    Class subC = but.getClass();
    Class superC = subC.getSuperclass();
    while(superC!= null){
    System.out.println("子类名----->"+subC.getName());
    System.out.println("父类名----->"+superC.getName());
    System.out.println("=============================");
    subC = superC;
    superC = subC.getSuperclass();
    }
    }

    public static void main(String[] args) {
    new JavaEcho().textClass();
    }
    }
    显示结果:
    子类名----->javax.swing.JButton
    父类名----->javax.swing.AbstractButton
    =============================
    子类名----->javax.swing.AbstractButton
    父类名----->javax.swing.JComponent
    =============================
    子类名----->javax.swing.JComponent
    父类名----->java.awt.Container
    =============================
    子类名----->java.awt.Container
    父类名----->java.awt.Component
    =============================
    子类名----->java.awt.Component
    父类名-----> java.lang.Object
    =============================5. 检索指定类实现的接口
    package com.text;import java.lang.reflect.Modifier;
    import javax.swing.JButton;public class JavaEcho {

    public void textClass(){
    javax.swing.JButton but = new JButton();
    Class subC = but.getClass();
    Class[] in = subC.getInterfaces();
    for (int i = 0; i < in.length; i++) {
    System.out.println(in[i].getName());
    if(Modifier.isInterface(in[i].getModifiers())){
    System.out.println("就是接口。");
    }else{
    System.out.println("不是接口。");
    }
    }
    }

    public static void main(String[] args) {
    new JavaEcho().textClass();
    }
    }
    显示结果:
    javax.accessibility.Accessible
    就是接口。
    6. 检索指定类所有的属性
    package com.text;import java.lang.reflect.Field;
    import java.lang.reflect.Modifier;
    import javax.swing.JButton;public class JavaEcho { public void textClass() {
    javax.swing.JButton but = new JButton();
    Class subC = but.getClass();
    Field[] f = subC.getFields();
    for (int i = 0; i < f.length; i++) {
    //属性名
    String name = f[i].getName();
    //属性类型
    String type = f[i].getType().getName();
    //属性访问修饰符
    String mod = "";
    if (Modifier.isPublic(f[i].getModifiers())) {
    mod = "public";
    }
    if (Modifier.isPrivate(f[i].getModifiers())) {
    mod = "private";
    }
    if (Modifier.isFinal(f[i].getModifiers())) {
    mod = "protected";
    }
    System.out.println(mod + " " + type + " " + name);
    }
    } public static void main(String[] args) {
    new JavaEcho().textClass();
    }
    }
    显示结果:
    protected java.lang.String TEXT_CHANGED_PROPERTY
    protected java.lang.String MNEMONIC_CHANGED_PROPERTY
    ...
    protected int CENTER
    protected int SOUTH_EAST
    protected float TOP_ALIGNMENT
    ...
    7.检索指定类的构造函数
    package com.text;import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Modifier;
    import javax.swing.JButton;public class JavaEcho { public void textClass() {
    javax.swing.JButton but = new JButton();
    Class subC = but.getClass();
    Constructor[] cons = subC.getConstructors();
    for (int i = 0; i < cons.length; i++) {
    //构造方法名
    String name = cons[i].getName();
    Class[] paras = cons[i].getParameterTypes();
    //构造方法访问修饰符
    String mod = "";
    if (Modifier.isPublic(cons[i].getModifiers())) {
    mod = "public";
    }
    if (Modifier.isPrivate(cons[i].getModifiers())) {
    mod = "private";
    }
    if (Modifier.isFinal(cons[i].getModifiers())) {
    mod = "protected";
    }
    //构造方法参数类型
    String type="";
    for (int j = 0; j < paras.length; j++) {
    type += paras[j].getName();
    }
    System.out.println(mod+" "+name+"("+type +")");
    }
    } public static void main(String[] args) {
    new JavaEcho().textClass();
    }
    }
    显示结果:
    public javax.swing.JButton(javax.swing.Icon)
    public javax.swing.JButton(java.lang.String)
    public javax.swing.JButton(javax.swing.Action)
    public javax.swing.JButton()
    public javax.swing.JButton(java.lang.Stringjavax.swing.Icon)
    8.检索指定类的方法
    package com.text;import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    import javax.swing.JButton;public class JavaEcho { public void textClass() {
    javax.swing.JButton but = new JButton();
    Class subC = but.getClass();
    Method[] mets = subC.getMethods();
    for (int i = 0; i < mets.length; i++) {
    //方法名
    String name = mets[i].getName();
    Class[] paras = mets[i].getParameterTypes();
    //方法访问修饰符
    String mod = "";
    if (Modifier.isPublic(mets[i].getModifiers())) {
    mod = "public";
    }
    if (Modifier.isPrivate(mets[i].getModifiers())) {
    mod = "private";
    }
    if (Modifier.isFinal(mets[i].getModifiers())) {
    mod = "protected";
    }
    //返回值类型
    String returnType = mets[i].getReturnType().getName();
    //方法参数类型
    String type="";
    for (int j = 0; j < paras.length; j++) {
    if(paras.length == 1){
    type = paras[j].getName();
    }else{
    type += paras[j].getName();
    if(j != paras.length-1){
    type +=",";
    }
    }
    }
    System.out.println(mod+" "+returnType+" "+name+"("+type +")");
    }
    } public static void main(String[] args) {
    new JavaEcho().textClass();
    }
    }
    显示结果:
    ...
    public void removeNotify()
    public java.lang.String getUIClassID()
    public void updateUI()
    ...
    public void show(boolean)
    public void show()操作类:
        Class c = Class.forName(className);//指定类的运行实例
        Object object = c.newInstance();//调用无参构造函数来生成指定类的实例。
    照着做一便就会了··不难~~~