Java反射技术详解

本文详细介绍了Java反射机制,包括其定义、提供的功能、如何获取类、方法、属性等信息。通过示例展示了如何动态加载类和方法,以及如何解决访问权限问题。文章还讨论了反射可以越过泛型检查的特性,但提醒开发者谨慎使用,以避免程序混乱。最后,文章提出了一种利用反射编写通用set方法的方法。
摘要由CSDN通过智能技术生成

#Java反射技术笔记

一.反射定义:

反射机制是在 运行状态 中:
对于任意一个类,都能够知道这个类的所有属性和方法;
对于任意一个对象,都能够调用他的任意一个方法和属性。

二.反射提供的功能:

在运行时判断任意一个对象属性的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。

三.通过反射可以获取的内容

编写一个Person类,用反射对此类做操作:

package com.zmh.spbdemo.reflect;

public class Person implements MyInterface,MyInterface2{
    private int id;
    private String name;
    private int age;

    public Person(int id){
        this.id = id;
    }

    public Person() {
    }

    public Person(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public void interfaceMethod() {
        System.out.println("interfaceMethod...");
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    public static void staticMethod(){
        System.out.println("static method...");
    }

    private void privateMethod(){
        System.out.println("private method...");
    }

    @Override
    public void interfaceMethod2() {
        System.out.println("interface method2...");
    }

    private Person(String name){
        this.name = name;
    }
}


1.通过反射获取类:

例:通过反射获取Person类

获取反射对象(反射入口)Class 的三种方法:

  1. Class.forName(全类名),该法需要捕获异常
try {
    Class<?> personClass = Class.forName("com.zmh.spbdemo.reflect.Person");
    System.out.println(personClass);

} catch (ClassNotFoundException e) {
    e.printStackTrace();
}

  1. xx.class
Class<Person> personClass2 = Person.class;
System.out.println(personClass2);

  1. 对象.getClass()
Person per = new Person();
Class<? extends Person> p = per.getClass();
System.out.println(p);

2.通过反射获取方法

 
获取所有的公共方法:getMethods()。注意,这里的公共是指本类,父类以及接口中的方法。此外,需要符合访问修饰符规律。

 

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值