小标
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
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号