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;
        }
        
        
        
    }
  • 相关阅读:
    MyBatis 框架系列之基础初识
    从零开始实现在线直播
    面试中关于Redis的问题看这篇就够了
    Spring Boot 中使用 MyBatis 整合 Druid 多数据源
    MyBatis的foreach语句详解
    小结:“服务器端跳转”和“客户端跳转”的区别
    Centos7.3安装vsftp服务
    Spring 注解@Value详解
    Spring中@Bean与@Configuration
    数据结构之LinkList
  • 原文地址:https://www.cnblogs.com/tanlei-sxs/p/9997939.html
Copyright © 2011-2022 走看看