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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

【Go 语言每日package解析】 package list

Go 语言 开发包大全: http://www.goserver.club/discuz/ ... =12&from=portal 注:在开发包大全中找 li...

29580
来自专栏ppjun专栏

lateinit var 和var 区别

如果说 lateinit var 和普通的var 有什么区别的话,可以看这篇文章 定义了 aa 是 lateinit String ,而 bb 是 Strin...

16720
来自专栏coding for love

JS常用方法整理-遍历对象

JS中经常需要对对象的属性进行遍历,下面我们来总结一下JS遍历对象属性的几种方法。

16520
来自专栏企鹅号快讯

CharSequence与String

CharSequence和String是Java中两个不同的基本概念。本篇将介绍它们之间的差异与共性。CharSequenceCharSequence是一个表示...

262100
来自专栏Petrichor的专栏

python: enumerate

10830
来自专栏前端儿

ES6笔记(6)-- Set、Map结构和Iterator迭代器

JS中的iterator也有类似的功能,JS内部为一些数据结构实现了iterator迭代器的接口,让我们可以方便的使用

20910
来自专栏javathings

Java 为什么需要包装类,如何使用包装类?

Java 是号称面向对象的语言,所有的类型都是引用类型。 Object 类是所有类的父类,而且是唯一不用指定明确继承的类。但是基本类型如 int 不是引用类型...

1.1K20
来自专栏IT进修之路

原 数据接收和数据返回呈现,都用一个类代替

21960
来自专栏Java后端技术

Java反射实战

  最近的项目中需要使用到Java 反射的知识,以前不怎么了解,也基本没怎么用过,抽出一片时间,来具体学习和实战下Java的反射!拿来和大家分享以及记录方便以后...

25540
来自专栏猿人谷

String.valueOf()

1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String....

20770

扫码关注云+社区

领取腾讯云代金券