2024年Java最全Java 学也学不明白之反射机制。(1),Java重点知识点

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

    }

}

}




运行结果:



无参数构造方法

ben.User@10f87f48

无参数构造方法

ben.User@b4c966a




反射机制灵活性:可以做到不同对象的实例化,



#### []( )资源绑定器:



**java.util包下提供了一个资源绑定器,便于获取属性配置文件的内容,使用此方法时,属性文件必须在类路径下并且属性配置文件必须以.properties结尾。**



示例代码:(2):



import java.util.ResourceBundle;

public class ResourceBundleText {

public static void main(String[] args) {

    ResourceBundle bundle=ResourceBundle.getBundle("classinfo2");

    String className=bundle.getString("className");

    System.out.println(className);

}

}




属性配置文件内容:  

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200727211155308.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1pwX2luc2lzdA==,size_16,color_FFFFFF,t_70)  

运行结果:



ben.User




[]( )三、Field类详解

=======================================================================



### []( )Field类常用方法:



(1)`类<?> getDeclaringClass() 返回表示的类或接口声明的 Field对象表示的领域 类对象。`  

(2)`int getModifiers() 返回的 Field对象表示的场java语言修饰符为整数。`  

(3)`String getName() 返回的 Field对象表示的字段的名称。`  

(4)`类<?> getType() 返回一个 类对象标识声明类型的 Field对象表示的场。`  

(5)`String toString() 返回一个描述这个 Field字符串。`



反射Student类中的Field属性  

示例代码(3):  

Student类:



public class Student {

//Field:字段

public int id ;

private String name;

protected int age;

boolean sex;

public static final double MATH_PI=301415926;

}




测试类:



import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

public class ReflectText05 {

public static void main(String[] args) {

    try {

        Class studenClass=Class.forName("ben.Student");



        String className=studenClass.getName();

        System.out.println("完整类型:"+className);

        String simpleName=studenClass.getSimpleName();

        System.out.println("简单类名:"+simpleName);

        System.out.println("==============================");

       

        //获取类中的Filed

        Field[] fileds=studenClass.getFields();

        System.out.println(fileds.length);//1

       

        //取出这个Field

        Field f=fileds[0];

        String fieldName=f.getName();

        System.out.println(fieldName);

        

        //取出所有的Field

        Field[] fs=studenClass.getDeclaredFields();

        System.out.println(fs.length);//4

        System.out.println("=========================");

       

        for (Field field: fs){

            //获取属性的修饰符列表

            int i=field.getModifiers();

            System.out.println(i);



            String modfiersString= Modifier.toString(i);

            System.out.println(modfiersString);

          

            //获取属性的类型

            Class fieldType=field.getType();

            //String fNum=fieldType.getName();

            String fNum=fieldType.getSimpleName();

            System.out.println(fNum);

          

            //获取属性名字

            System.out.println(field.getName());

           // System.out.println(field);

        }

    } catch (ClassNotFoundException e) {

        e.printStackTrace();

    }

}



运行结果:



完整类型:ben.Student

简单类名:Student

==============================

2

id

5

=========================

1

public

int

id

2

private

String

name

4

protected

int

age

0

boolean

sex

25

public static final

double

MATH_PI




反射机制进行反编译Student类 !!  

示例代码(4):



import ben.Student;

import java.io.File;

import java.lang.reflect.Field;

import java.lang.reflect.Modifier;

/*

反射机制进行反编译!!

*/

public class ReflectText06 {

public static void main(String[] args) {

    try {

        StringBuilder s=new StringBuilder();



        Class studentClass=Class.forName("ben.Student");

       // Class studentClass=Class.forName("java.util.Date");

        s.append(Modifier.toString(studentClass.getModifiers())+"\t"+"class"+"\t"+studentClass.getSimpleName()+"{\n");

        Field[] fields=studentClass.getDeclaredFields();

        for (Field field:fields){

            s.append("\t");

            s.append(Modifier.toString(field.getModifiers()));

            s.append(" ");

            s.append(field.getType().getSimpleName());

            s.append(" ");

            s.append(field.getName());

            s.append(":\n");

        }

            s.append("}");

        System.out.println(s);



    } catch (ClassNotFoundException e) {

        e.printStackTrace();

    }

}

}




运行结果:



public class Student{

public int id:

private String name:

protected int age:

 boolean sex:

public static final double MATH_PI:

}




[]( )四、通过反射机制访问java对象的属性

================================================================================



**给属性复制:set获取属性的值:get**  

示例代码(5):  

Student类:



public class Student {

//Field:字段

public int id ;

private String name;

protected int age;

boolean sex;

public static final double MATH_PI=301415926;

}




测试类:



import java.lang.reflect.Field;

public class ReflectText07 {

public static void main(String[] args) {

    try {

        Class studentClass=Class.forName("ben.Student");

        Object obj=studentClass.newInstance();//obj就是Student对象。(无参构造)

        //获取no属性(根据属性的名称获取Field)

        Field noField=studentClass.getDeclaredField("id");

        //给obj对象的no属性赋值

        noField.set(obj,2222 );//给no属性赋值2222

        //读取值

        System.out.println( noField.get(obj));



        Field nameFiled=studentClass.getDeclaredField("name");

        //打破封装,反射机制缺点

        nameFiled.setAccessible(true);

        //赋值

        nameFiled.set(obj,"jack");

        //获取

        System.out.println(nameFiled.get(obj));

        

    } catch (ClassNotFoundException e) {

        e.printStackTrace();

    } catch (IllegalAccessException e) {

        e.printStackTrace();

    } catch (InstantiationException e) {

        e.printStackTrace();

    } catch (NoSuchFieldException e) {

        e.printStackTrace();

    }

}

}




运行结果:



2222

jack




[]( )五、通过反射机制调对象的方法

===========================================================================



Object invoke(Object obj, Object… args)

调用底层的方法,这 方法对象表示,对指定对象的指定参数。




**示例代码(6):**  

UserService类



public class UserService {

public boolean login(String name, String password) {

    if ("admin".equals(name) && "123".equals(password)) {

        return true;

    }

    return false;

}

public void logout(){

    System.out.println("退出系统成功!1");

}

}






### 最后

Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/557bcf314a2819ac8f46be8bc0c8a496.webp?x-oss-process=image/format,png)

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**

**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**

     if ("admin".equals(name) && "123".equals(password)) {

            return true;

        }

        return false;

    }

    public void logout(){

        System.out.println("退出系统成功!1");

    }

}



最后

Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-NRCvHgeh-1714853834592)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值