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