• 反射


     
    package javaweb.reflect;
    
    public class Reflect {
    
        /**
         * @param args
         * @throws ClassNotFoundException 
         * 反射:加载类,获得类的字节码
         */
        public static void main(String[] args) throws ClassNotFoundException {
            //加载类方法1:
            Class c1 = Class.forName("javaweb.reflect.Person");
            //2
            Class c2 = new Person().getClass();
            //3
            Class c3 = Person.class;
        }
    
    }

    常用方法:

     1 //public
     2 Constructor getConstructor()
     3 Method getMethod()
     4 Field getField()
     5 //private
     6 Constructor getDeclaredConstructor()
     7 Method getDeclaredMethod()
     8 Field getDeclaredField()
     9 
    10 c.setAccessible(true);//暴力反射

     反射类的构造函数:

    1 public void test(){
    2         Class c = Class.forName("javaweb.reflect.Person");
    3         Constructor<T> cs = c.getConstructor(String.class);
    4         Person p = cs.newInstance("xxx");
    5     }

    反射类的方法:

    1 public void test() throws ClassNotFoundException {
    2             Person p = new Person();
    3             Class c = Class.forName("javaweb.reflect.Person");
    4             Method method = c.getMethod("funName", null);
    5             method.invoke(p,null);
    6         }

    反射类的字段:

     1 package javaweb.reflect;
     2 
     3 import java.lang.reflect.Field;
     4 
     5 public class Reflect {
     6 
     7     /**
     8      * @param args
     9      * @throws ClassNotFoundException 
    10      * 反射:加载类,获得类的字节码
    11      * @throws SecurityException 
    12      * @throws NoSuchFieldException 
    13      * @throws IllegalAccessException 
    14      * @throws IllegalArgumentException 
    15      */
    16     public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException{
    17         Person p = new Person();
    18         Class<?> c = Class.forName("javaweb.reflect.Person");
    19         Field f = c.getField("name");
    20         String name =(String) f.get(p);
    21         System.out.println(name);
    22         
    23         //打印出字段name的类型
    24         Class<?> type = f.getType();
    25         System.out.println(type);
    26     }
    27 }
  • 相关阅读:
    Linux-命令-seq
    怎样打开U盘最安全
    SQL Anywhere .NET
    技巧:低版本VS打开高版本VS创建的工程
    数据库插入数据返回当前主键ID值方法
    Nvelocity模板引擎
    .ashx文件与.ashx.cs
    该站点安全证书的吊销信息不可用。是否继续?
    IE8“开发人员工具”(下)
    IE8“开发人员工具”(上)
  • 原文地址:https://www.cnblogs.com/thinksasa/p/2791733.html
Copyright © 2020-2023  润新知