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

posted @ 2015-07-21 18:11  五毛程序员  阅读(184)  评论(0编辑  收藏  举报