前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java反射机制入门01

java反射机制入门01

作者头像
用户1737026
发布2018-05-17 17:25:49
6020
发布2018-05-17 17:25:49
举报
文章被收录于专栏:五毛程序员

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种方式

代码语言:javascript
复制
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("调用了多参数的方法");
    }
}
代码语言:javascript
复制
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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015-07-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档