反射(1)

1反射是什么

对于任意一个类,都能够知道这个类的所有属性和方法;  对于任意一个对象,都能够调用它的任意一个方法和属性;

1 通过一个对象获得完整的包名和类名

  代码如下:   

    package net.xsoftlab.baike;
     public class TestReflect {
        public static void main(String[] args) throws Exception {
            TestReflect testReflect = new TestReflect();
            System.out.println(testReflect.getClass().getName());
      }
    }
 // 结果 net.xsoftlab.baike.TestReflect
2 实例化Class类对象
package net.xsoftlab.baike;
public class TestReflect {
 public static void main(String[] args) {
  Class<?> class1 = null;
  Class<?> class2 = null;
  Class<?> class3 = null;
  try {
   class1 = Class.forName("net.xsoftlab.baike.TestReflect");
   class2 = new TestReflect().getClass();
   class3 = TestReflect.class;
   System.out.println("类名称   " + class1.getName());
      System.out.println("类名称   " + class2.getName());
      System.out.println("类名称   " + class3.getName());
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
运行结果:
类名称   net.xsoftlab.baike.TestReflect
类名称   net.xsoftlab.baike.TestReflect
类名称   net.xsoftlab.baike.TestReflect
 
3
3.1主入口
package net.xsoftlab.baike;
import com.in.tttt;
public class TestReflect extends tttt{
 public static void main(String[] args) {
  try {
   Class<?> clazz = Class.forName("com.in.tttt");
   Class<?> parentClass = clazz.getSuperclass();
   System.out.println("clazz的父类为:" + parentClass.getName());
   Class<?> intes[] = clazz.getInterfaces();
   System.out.println("clazz实现的接口有:");
         for (int i = 0; i < intes.length; i++) {
             System.out.println((i + 1) + ":" + intes[i].getName());
         }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
3.2父类

package com.in;

public class tttt implements dddd{

 public void mm(){

  System.out.println("ddd");

 }

 @Override

 public void d() {

  System.out.println("dd1");

 }

}

3.3接口类

package com.in;

public interface dddd {

 public void d();

}

运行结果:

clazz的父类为:java.lang.Object
clazz实现的接口有:
1:com.in.dddd

原文地址:https://www.cnblogs.com/luocixin/p/6843801.html