java反射的基础

一.什么是反射?

当java程序运行时,反向通过一个类得到它的对象而不是编译时new出来,这个过程叫做反射(在运行时才知道要操作的是什么类)

二.反射的示例

通过一个例子,能更加的了解反射,下图是一个dog类,有属性,构造,方法:

package com.bdqn.Dog;

public class Dog {
    //属性
    private String dcolor;
    String dtype;
    private int dage;
    private String dname;
//构造
    public Dog(int a) {
        System.out.println("int方法被执行");
    }
    public Dog(String a) {
        System.out.println("String方法被执行");
    }
    public Dog() {
        System.out.println("构造方法被执行");
    }
//方法
    public void eat(){
        System.out.println("吃");
    }
    public void sleep(){
        System.out.println("睡");
    }
    public void speak(){
        System.out.println("叫");
    }
    public void run(){
        System.out.println("跑");
    }
}

main方法

package com.bdqn.Dog;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class Test {
    public static void main(String[] args) throws Exception {
        Class c=Dog.class;
        //获得属性
        Field[] fields=c.getDeclaredFields();
        for (Field field: fields) {
            System.out.println(field.getName()+"--"+field.getType());
        }
        //构造
        Constructor c1=c.getConstructor(int.class);
        c1.newInstance(1);
        //调用eat方法
        Method m=c.getMethod("eat");
        m.invoke(c.newInstance(),null);
        //所有方法
        Method[] methods=c.getDeclaredMethods();
        for (Method method: methods) {
            System.out.println(method.getName()+"()");
        }
        //调用睡方法
        methods[1].invoke(c.newInstance(),null);
    }
}

通过main方法,利用反射可以把需要的内容从实体类取出来,代码中只有一部分方法,更多的可以自己去探索一下。

三.三种反射的区别

  //第一种 只输出静态代码块资源
//        Class c=Class.forName("com.bdqn.reflect.Student");

//        System.out.println("__________________");
        //第二种 非常不主动的加载方式
        Class c1=Student.class;
//        Field[] fields=c1.getDeclaredFields();
//        for (Field field: fields) {
//            System.out.println("");
//        }
//        System.out.println("__________________");
        //第三种 所有的都会执行
        //构造器初始化整个类里面的所有东西
//        Class c2=new Student().getClass();
//        Method[] methods=c1.getDeclaredMethods();
//
//        for (Method method: methods) {
//            System.out.println(method.getName()+"~~"+method.getGenericReturnType());
//        }

以上这些,就是反射的一些大概内容,也是一些基础。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值