zoukankan      html  css  js  c++  java
  • 黑马程序员系列第三篇 反射

    ASP.Net+Android+IOS开发  、Net培训、期待与您交流!

    (前言:本篇文章参见了张孝祥的反射视频教程,以及网友的博客   http://www.cnblogs.com/gulvzhe/archive/2012/01/27/2330001.html)

    目录:一、概述              二、Class 类介绍             三、如何使用反射以及简单代码演示

    一、概述      

     Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

    反射主要用于框架中,框架需要大量调用使用框架者写的类,这些类是框架开发后完成的,所以框架不能直接通过new来获得它们的实例对象,而要用反射来做。

    反射的缺点是比较消耗资源

    二、Class 类介绍

          java中有九个预定义的Class类型  (八个基本类型以及一个void类型)

               可通过Class类中 isPrimitive()方法 来判断是否为预定义对象 

          获取Class 类对象的三种方式

                1、 Class.forName(“类名”)      返回类的字节码,已加载的直接获取,未加载的先加载后获取

                2、对象.getClass()

                3、 类名.class  

          构造方法 对应Construct 类   

    成员变量  对应Filed 类

    成员方法   对应Method类

    三、如何应用反射

    使用java的反射机制,一般需要遵循三步:

      1. 获得你想操作类的Class对象(见二Class类介绍)
      2. 通过第一步获得的Class对象去取得操作类的方法或是属性名
      3. 操作第二步取得的方法或是属性

     示例代码:通过反射操作类的实例属性,甚至可以强制获得类的private属性 ;以及三种方式获得类对象的代码演示。

     1 public class ReflectTest {
     2 
     3     /** 类目的:通过反射操作类的实例属性,甚至可以强制获得类的private属性
     4      * @param args
     5      * @throws ClassNotFoundException 
     6      * @throws IllegalAccessException 
     7      * @throws IllegalArgumentException 
     8      */
     9     public static void main(String[] args) throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException {
    10         
    11         Class cat=Cat.class;//类名.class 方式获得类对象
    12         Class catfor=Class.forName("edu.fjnu.reflect.Cat");// Class.forName(“类名”) 方法获得类对象,方便起见,直接抛出异常
    13 
    14         Cat cats=new Cat(); 
    15         Class catget=cats.getClass();//对象.getClass()  方式获得类对象
    16          
    17         Field[] catFields=cat.getDeclaredFields();//获得所有属性,包括private属性
    18         
    19         for(Field catField:catFields){
    20             
    21             catField.setAccessible(true);//设置属性值为可访问,包括private属性值
    22             
    23             String name=catField.getName();//获得属性名称         
    24             Object value=catField.get(cats);//方法参数为属性所属类的实例对象,异常简单抛出处理
    25 
    26             System.out.println(name+":"+value);
    27         }
    28       
    29     }
    30 
    31 }
    32 class Cat{
    33     private String name="kitty";
    34     private String color="white";
    35     private int age=2;
    36 }

           初学者难免错误,欢迎评判指教,持续更正ing...........

    ASP.Net+Android+IOS开发  、Net培训、期待与您交流!

  • 相关阅读:
    利用google kaptcha完成登陆动态验证码
    Linux和Windows环境下安装Nginx
    将图片设定为固定大小
    将xls格式的Excel转换成图片
    将pdf格式的文件转换成图片
    SSH连接工具类
    java判断ip内外网
    jenkins安装与使用
    Eclipse快捷键大全
    serialVersionUID的作用
  • 原文地址:https://www.cnblogs.com/blueFlowers/p/4954151.html
Copyright © 2011-2022 走看看