机器学习入门之Java反射机制~学习实例
小标 2018-12-12 来源 : 阅读 1052 评论 0

摘要:本文主要向大家介绍了机器学习入门之Java反射机制~学习实例,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。

本文主要向大家介绍了机器学习入门之Java反射机制~学习实例,通过具体的内容向大家展现,希望对大家学习机器学习入门有所帮助。


概念


反射机制



反射是用来解刨Java的类、构造器(Constructor)、方法(Method)、属性(Field)等元素的信息。

反射是为了动态地加载一个类,动态调用一个方法,动态访问一个属性等要求而设计的,通过使用

java.lang.reflect下面的API。



Class



每一个Class类一种被加载进入JVM的类,代表该类的一种信息映射。通过下面三种方式可获取Class对象



1、Class类的forname()方法返回


2、访问所有类都会拥有的静态class属性


3、调用所有对象都会有的getClass方法


实现

ReflectClass.java




package com.pro.reflect;
/**
 * 反射实体类
 * @author GeekHou
 */
public class ReflectClass {
    protected String name;
    protected int age;
    public ReflectClass(String name,int age) {
        this.name = name;
        this.age = age;
    }
    public ReflectClass() {
        super();
    }
    public void testMethod() {
        System.out.println("testMethord is called...");
    }
}


package com.pro.reflect;

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

public class ClassTest {

    public static void main(String[] args) {
        // 1 反射操作类的成员变量
        ReflectClass obj1 = new ReflectClass("张三",24);
        ReflectClass obj2 = new ReflectClass("李四",25);
        System.out.println("操作类的成员变量:"+compare(obj1, obj2).name+"年龄大一点");

        // 2 反射实例化类 ,需要实现默认构造函数
        String methodName = "testMethod";
        Class<ReflectClass> clazz = ReflectClass.class;// 获得class实例

        try {
            Method method = clazz.getMethod(methodName);// 获得指定方法名的Method对象
            if (method != null) {
                ReflectClass obj = clazz.newInstance();// 无参方式创建对象
                method.invoke(obj);// 调用obj指定的方法
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        // 3 反射实例化一个类
        try {
            Constructor<ReflectClass> reflectClass = clazz.getConstructor(String.class,int.class);
            ReflectClass reflectObj = reflectClass.newInstance("小子",21);
            System.out.println(reflectObj);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * 操作类的成员变量
     * @param obj1
     * @param obj2
     * @return
     */
    private static ReflectClass compare(ReflectClass obj1,ReflectClass obj2) {
        // 两种方式获取一个Field对象
        try {
//          Field field = obj1.getClass().getDeclaredField("age");
            Field field = ReflectClass.class.getDeclaredField("age");
            // 访问私有成员
            // field.setAccessible(true);
            int age1 = (Integer)field.get(obj1);
            int age2 = (Integer)field.get(obj2);
            if (age1>age2) {
                return obj1;
            } else {
                return obj2;
            }
        }  catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}


延伸

Struts2 Hibernate Spring中均使用反射的机制实现,特别是Spring中的依赖注入反转控制、面向切面编程融入了反射的思想。


附上几个使用反射实例实现验证及Spring的链接

1、Java 简单校验框架

2、基于java反射的验证框架

3、非常好的Java反射例子

4、Spring反射机制

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能机器学习频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved