zoukankan      html  css  js  c++  java
  • Java反射

    Java反射在平常开发中虽然基本上用不着,但是在框架中,基本上都是通过反射来实现,比如说:Sping中来实现IOC。

    通过反射,我们可以在运行时获得一个类的所有属性和方法,通过任意一个对象,可以调用它的任意属性和方法。

    在Java反射中,一切都起源于Class类。此类的定义如下:

    public final class Class<T> extends Object implements Serializable,GenericDeclaration,Type,AnnotatedElement

    此类没有构造方法,要想实例化此类,可以通过

      ·类.class

      .类.getClass()

      ·静态方法forName(String className)

    实例

    package com.fuwh.reflect;
    
    public class ReflectTest01 {
        public static void main(String[] args) throws Exception{
            String s=new String("hello");
            Class<?> c1=s.getClass();
            System.out.println(c1.getName());
            
            Class<?> c2=Class.forName("java.lang.String");
            System.out.println(c2.getName());
            
            Class<?> c3=String.class;
            System.out.println(c3.getName());
        }
    }
    View Code

     通过反射,我们可以不用new一个对象,而取得该类的对象,使用该对象,实现操作。

    实例

    package com.fuwh.model;
    
    public class Info {
        private String name;
        private int age;
        private int score;
        private String address;
        public Info() {
            super();
        }
        
        public Info(String name,int age,int score,String address) {
            this.name=name;
            this.age=age;
            this.score=score;
            this.address=address;
        }
    
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public int getScore() {
            return score;
        }
        public void setScore(int score) {
            this.score = score;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        
        public String showInfo(String title){
            return "操作人:"+title+"
    	name:"+name+",age:"+age+",score:"+score+",address:"+address;
        }
    }
    View Code
    package com.fuwh.reflect;
    
    import java.lang.reflect.Method;
    import java.lang.reflect.Modifier;
    
    public class ReflectTest02 {
        public static void main(String[] args) throws Exception{
            Class<?> c=Class.forName("com.fuwh.model.Info");
            Method[] methods=c.getMethods();
            for(Method m:methods){
                System.out.println(m.getName()+"参数个数:"+m.getParameterCount()
                                    +"修饰符:"+Modifier.toString(m.getModifiers()));
            }
            Method m=c.getMethod("showInfo", String.class);
            String s=(String)m.invoke(c.newInstance(), "老傅");
            System.out.println(s);
        }
    }
    View Code

  • 相关阅读:
    C语言基础知识-程序流程结构
    C语言基础知识-运算符与表达式
    Cloudera Certified Associate Administrator案例之Configure篇
    Python入门篇-文件操作
    gif软件(ShareX)
    BareTail(日志查看工具)
    [UGUI]游戏中的Tips贴图标边缘显示(贴边)
    Lua中的#
    ugui SetParent在安卓上一个诡异bug
    .svn文件夹特别大
  • 原文地址:https://www.cnblogs.com/zerotomax/p/6501289.html
Copyright © 2011-2022 走看看