IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【练习】这个练习里面包含了之前所学的知识;Properties,类加载器,反射;最主要的是这个里面使用了工具类,知道如何创建工具类 -> 正文阅读

[大数据]【练习】这个练习里面包含了之前所学的知识;Properties,类加载器,反射;最主要的是这个里面使用了工具类,知道如何创建工具类

测试类

package test;

import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Properties;

public class test01 {
    public static void main(String[] args) throws Exception {
//        调用工具类,返回的值是一个map集合
        Properties properties = ProUtils.getProperties();
//         使用properties.getProperty("className");方法
//        通过键获取value
//        这个value对应的就是某个类的全类名
        String className = properties.getProperty("className");
//          通过类的全类名获取Class对象
        Class<?> aClass = Class.forName(className);
//        通过Class对象,调用方法,获取里面的空参构造方法
        Constructor<?> constructor = aClass.getDeclaredConstructor();
//        去除权限
        constructor.setAccessible(true);
//        创造这个类的对象
        Object object = constructor.newInstance();
//          使用properties.getProperty("methodName");方法
//        通过键获取值
//        这个值只是个String类型的值,这个值和类里面的方法名一直
//        主要是为了接下来通过放射去找到类里面的这个方法
        String methodName = properties.getProperty("methodName");
//          通过反射获取获取到这个方法对应的Method
        Method method = aClass.getDeclaredMethod(methodName);//
//        去除权限                                           //这三步加起来就相当于new了一个类的对象
        method.setAccessible(true);                         //Student stu = new Student();
//        执行方法                                          //
        method.invoke(object);                              //

//        使用properties.getProperty("name");方法
//        通过键获取value
//        这个值也是一个String类型的值,这个值和类中成员变量的name一直
//        主要是通过反射在类中找到这个值对应的成员变量
        String fieldname = properties.getProperty("fieldName");
//        通过反射获取对应的成员变量
//        只有获取了我们才能对其进行操作
        Field FieldName = aClass.getDeclaredField(fieldname);
//        去除权限
        FieldName.setAccessible(true);
//        这个是获取配置文件中fieldValue的值
//        通过键获取值
//        这个值主要是赋给类中成员变量的
        String fieldValue = properties.getProperty("fieldValue");
/*
            通过反射获取成员变量对应的数据类型,并且转成字符串类型
        String fieldType = FieldName.getType().toString();
          判断类型
          因为配置文件中的数据都是字符串类型的
           所以如果是获取的成员变量是Integer类型
           那么就需用将字符串类型转成Integer类型
        if(fieldType.contains("Integer")){
            int fValue = Integer.parseInt(fieldValue);
            FieldName.set(object,fValue);
        }else{
            FieldName.set(object,fieldValue);
        }
*/
//         给成员变量赋值
//        两个参数:第一个参数是这个类的对象,第二个值是给这个成员变量赋的值
        FieldName.set(object,fieldValue);

//        通过反射获取成员变量的值
        Object fValue = FieldName.get(object);
        System.out.println(fieldname+"该成员变量的值是"+fValue);
    }
}

工具类

package test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/*
这是工具类,主要是用来操作配置文件中的数据的是
 */
public class ProUtils {
/*
静态代码块只能调用被静态修饰的成员变量
 */
    //        创建一个Properties
    private static Properties prop = new Properties();

/*
在一个工具类中,静态(static)代码块只会被执行一次
当程序启动一次以后,如果类中某些方法只要执行一次的话,就放到静态代码块中
如果不放到静态代码块中,那么只要有一个主方法调用这个工具类,那么这个方法就会执行一次
 */
    static {
        try {
//        获取一个类加载器
        ClassLoader classLoader = ClassLoader.getSystemClassLoader();
//      通过getResourceAsStream直接获取配置文件中的数据,返回值是一个字节流
        InputStream is = classLoader.getResourceAsStream("bean.properties");

//        使用load的方法将字节流中的数据一次性加载到集合中
        prop.load(is);
        is.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    }
/*
只要被静态修饰的方法,在主方法中才能用(类名.方法名)的方式调用
 */
//      返回值是Properties类型的
    public static Properties getProperties(){
//      需要将操作出来的集合作为参数返回给调用者
        return prop;
    }
}

配置文件

className=test.Student
methodName=study
fieldName=name
fieldValue=laoluo

老师类和学生类

package test;

public class Student {
    private String name;
    private Integer age;

    public Student() {
    }

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public void study(){
        System.out.println("学生学习");
    }
}
package test;

public class Teacher {
    private String name;
    private Integer age;

    public Teacher() {

    }

    public Teacher(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public void study(){
        System.out.println("老师学习");
    }
}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 14:05:51  更:2022-01-08 14:06:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/19 22:28:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码