zoukankan      html  css  js  c++  java
  • 反射机制

    概述

      主要是指程序可以访问,检测和修改它本身状态和行为的一种能力

    运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法

         对于任意一个对象,都能够调用它的 任意一个方法

    这种动态获取的信息及动态调用对象的方法的功能称为java的 反射机制

    为什么要用反射机制,直接创建对象不就可以了?这就涉及到了动态与静态的概念

      静态编译:在编译时确定类型,定对象

      动态编辑:在运行时确定类型,绑定对象

    功能

      在运行时判断任意一个对象所属的类(instanceof)

      在运行时构造一个类的对象

      在运行时判断任意一个类所具有的成员变量和方法

      在运行时调用任意一个对象的方法

    Class对象

    要想操纵类中的属性和方法,都必须从获取Class对象开始

     //1.对象名.getclass()方法
    	   Employee employee=new Employee("tanlei", 20);
    	   Class<?> class1=employee.getClass();
    	   System.out.println(class1.getTypeName());
    //2.类名.class
    	   Class<?>class2=Employee.class;
    //3.使用class.forName()
    	   try {
    		Class.forName("com.iotek.classtype.Employee");
    	   } catch (ClassNotFoundException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    	   }
     //4.获取基本数据类型的Class对象
    	   Class<?>class3=int.class;
    //5.通过基本数据类型包装类来获取对应的基本数据类型所对应的class对象
    	   Class<?>class4=Integer.TYPE;
    package com.iotek.classtype;
    
    public class classDemo {
       public static void main(String[] args) {
           //1.对象名.getclass()方法
           Employee employee=new Employee("tanlei", 20);
           //class类
           Class<?> class1=employee.getClass();
           System.out.println(class1.getTypeName());
           //获得父类
           System.out.println(class1.getSuperclass());
           
           //2.类名.class
           Class<?>class2=Employee.class;
           System.out.println(class2.getTypeName());
           System.out.println(class2.getSuperclass());
           
           //3.使用class.forName()
           try {
            Class.forName("com.iotek.classtype.Employee");
           } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
           }
           System.out.println(class2.getTypeName());
           System.out.println(class2.getSuperclass());
           
           //4.获取基本数据类型的Class对象
           Class<?>class3=int.class;
           System.out.println(class3.getTypeName());
           System.out.println(class3.getSuperclass().getName());
           
           //5.通过基本数据类型包装类来获取对应的基本数据类型所对应的class对象
           Class<?>class4=Integer.TYPE;
           System.out.println(class4.getTypeName());
           System.out.println(class4.getSuperclass().getName());
    }
    }
    
    class Employee{
        private String name;
        private int age;
        public Employee(String name, int age) {
            this.name = name;
            this.age = age;
        }
        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;
        }
        
        
        
    }
  • 相关阅读:
    CSDN博客QQ加群、微信
    Angularjs 中的 controller
    hdu 1728 逃离迷宫 bfs记转向
    【BLE】CC2541之加入自己定义任务
    asp.net给文件分配自己主动编号,如【20140710-1】
    <html>
    机器学习入门阶段程序猿易犯的5个错误
    时间复杂度
    Jackcard类似度和余弦类似度(向量空间模型)的java实现
    【分层图】分层图学习笔记
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/9997939.html
Copyright © 2011-2022 走看看