• java反射机制入门01


    java反射机制入门是我从极客学院的视频中学习的。

    1、反射机制背景概述

      反射(Reflection)是java被视为动态(或准动态)语言的一个关键性质。反射机制指的是程序在运行时能够获取任何类的内部所有信息(属性、方法)。

    2、反射机制实现功能概述

      只要给定类的全名,就可通过反射获取类的所有信息。

      反射可以再程序运行时获取任意一个对象所属的类对象。

      在运行时可以获取到类中所有属性对象,并对其操作(包括私有属性)。

      在运行时可以获取到类中、父类中所有方法,并对其调用。

      目前主流的应用框架如Struts2、Hibernate、Spring、SpringMVC等框架的核心全部是利用Java的反射机制来实现的。

    1、Class对象概述

      1)Class其实就是类的类型

      2)字符串类型就是String,整形类型就是Integer,String和Integer类型就是Class

    2、Class对象的常用方法介绍

    方法名 释义
    getName() 获得类中完整名称
    getDeclaredFields() 获得类中所有属性
    getDeclaredMethods() 获得类中所有方法
    getConstructors() 获得类构造方法
    newInstance() 实例化类对象

    3、获取class对象的3种方式

    package com.rainmer.bean;
    
    public class Book {
        private int id;
        protected String name;
        public String type;
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            System.out.println("调用了getName方法");
            return name;
        }
        public void setName(String name) {
            System.out.println("调用了setName方法");
            this.name = name;
        }
        public String getType() {
            return type;
        }
        public void setType(String type) {
            this.type = type;
        }
        
        public void test(String name, int a){
            System.out.println("调用了多参数的方法");
        }
    }
    package com.rainmer.main;
    
    import com.rainmer.bean.Book;
    
    public class Test1 {
        public static void main(String[] args) {
            Class demo1 = null;
            Class demo2 = null;
            Class demo3 = null;
            
            //创建类对象的3种方式
            //第一种方式
            try {
                demo1 = Class.forName("com.rainmer.bean.Book");
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(demo1);
            
            //第二种方式
            Book bo = new Book();
            Object ob = bo;
            System.out.println(ob.getClass());
            System.out.println(bo.getClass());
            
            //第三种方式
            demo3 = Book.class;
            System.out.println(demo3);
            
            //实例化类对象
            try {
                Book bo1 = (Book) demo1.newInstance();//newInstance方法默认返回Object对象
                System.out.println(bo1);//@后面的是分配的内存地址
            } catch (InstantiationException | IllegalAccessException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

     程序输出:

    class com.rainmer.bean.Book
    class com.rainmer.bean.Book
    class com.rainmer.bean.Book
    class com.rainmer.bean.Book
    com.rainmer.bean.Book@14681070

  • 相关阅读:
    maven核心概念--生命周期
    maven核心概念--插件和目标
    TDD入门demo
    第一个简单的maven项目
    java -cp用法
    TDD最佳实践
    自定义测试规则
    自定义测试执行器
    junit3对比junit4
    Junit4X系列--hamcrest的使用
  • 原文地址:https://www.cnblogs.com/rainmer/p/4665240.html
Copyright © 2020-2023  润新知