java 反射 框架_Java 反射,开发框架必备技能

通过反射技术我们将上面的统一资源定位付(URL) 映射到Class 相当于

class: news

method: list

parameter: 2

差不多就是下面样子

class News{

public String list(String catagory_id){

...

...

}

}

我们只需要在框架核心中分析 url 然后调用对应的方法,于此同时将参数传递过去。

Class> cls = Class.forName("cn.netkiller.reflect.News");

Object obj= cls.newInstance();

Method method = cls.getDeclaredMethod("list", int.class);

return method.invoke(obj, 2);

1.9. Reflection 反射this.getClass().getName() //当前Class名字

Thread.currentThread().getStackTrace()[1].getMethodName()); //当前方法名

1.9.1. 获得所有变量Field[] fields = objClass.getFields();

for (Field field : fields) {

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

}

注意:只能去除 public变量

1.9.2. 批量赋值

1.9.3. 方法操作下载

JAVA反射调用方法的步骤有三步得到要调用类的class

得到要调用的类中的方法(Method)

方法调用(invoke)

1.9.3.1. 获得所有方法Class> objClass = a.getClass();

Method[] methods =  objClass.getDeclaredMethods();

for (Method method : methods) {

System.out.println(method);

}

1.9.3.2. set/get 方法下载package cn.netkiller.reflect;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

public class Member {

public String name;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return "ClassA [name=" + name + ", age=" + age + "]";

}

public Member() {

// TODO Auto-generated constructor stub

}

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException {

Class> cls = Class.forName("cn.netkiller.reflect.Member");

Object member = cls.newInstance();

Method setMethod = cls.getDeclaredMethod("setAge", int.class);

setMethod.invoke(member, 15);

Method getMethod = cls.getDeclaredMethod("getAge");

System.out.println(getMethod.invoke(member));

}

}

下面做一个稍微复杂点的例子,ClassB继承ClassA,取出ClassA的成员变量赋值到ClassA。下载package cn.netkiller.reflect;

public class ClassA {

public String name;

private int age;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public ClassA() {

// TODO Auto-generated constructor stub

}

@Override

public String toString() {

return "ClassA [name=" + name + ", age=" + age + "]";

}

}

package cn.netkiller.reflect;

public class ClassB extends ClassA{

public ClassB() {

// TODO Auto-generated constructor stub

}

private String address;

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

@Override

public String toString() {

return "ClassB [address=" + address + "]";

}

}

package cn.netkiller.reflect;

import java.lang.reflect.Field;

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

public class ReflectionTest {

public ReflectionTest() {

// TODO Auto-generated constructor stub

}

下载

public void testSetMethod() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {

// ClassA a = new ClassA();

ClassB b = new ClassB();

b.setAddress("Shenzhen");

Class classA = ClassA.class;

ClassA a = classA.newInstance();

a.setName("Neo");

a.setAge(30);

System.out.println(classA.getDeclaredMethod("getAge").invoke(a));

Method m = classA.getDeclaredMethod("setAge", int.class);

m.setAccessible(true); // 因为写成private 所以这里必须设置

m.invoke(b, 26);

System.out.println(a.toString());

System.out.println(b.toString());

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

System.out.println(b.getAge());

}

public static void main(String[] args) throws InvocationTargetException {

ReflectionTest rt = new ReflectionTest();

try {

rt.testSetMethod();

} catch (NoSuchMethodException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (SecurityException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalAccessException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IllegalArgumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (InstantiationException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

set 方法System.out.println(classA.getDeclaredMethod("getAge").invoke(a));

get 方法Method m = classA.getDeclaredMethod("setAge", int.class);

m.setAccessible(true);//因为写成private 所以这里必须设置

m.invoke(b, 26);

1.9.3.3. static 方法调用

Class cls = Class.forName("cn.netkiller.reflect.Student");

Method setMethod = cls.getDeclaredMethod("setAge",int.class);

setMethod.invoke(cls.newInstance(), 15);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409079.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

combobox的联动练习

老师的项目中,网站右上有四个联动的combobox,今天第一次尝试解决。外观如图: 首先第一次登陆系统时,需要分别载入4个框中的数据。通过easyui-combobox的url 属性请求php返回json数据即可,json中的value是名称&#xff…

[机器学习笔记]Note6--神经网络:表达

继续是机器学习课程的笔记,这节课会介绍神经网络的内容。 非线性假设 在之前的课程中,我们看到使用非线性的多项式能够帮助我们建立更好的分类模型。假设我们有非常多的特征,例如100个变量,我们希望用这100个特征来构建一个非线…

《实用技巧》——让你的网站变成响应式的3个简单步骤

如今,一个网站只在桌面屏幕上好看是远远不够的,同时也要在平板电脑和智能手机中能够良好呈现。响应式的网站是指它能够适应客户端的屏幕尺寸,自动响应客户端尺寸变化。在这篇文章中,我将向您展示如何通过3个简单的步骤轻松地使网站…

hiveserver2 mysql_HiveServer2的配置使用

HiveServer2的配置和使用 hive-site.xml配置 hiveserver2的配置 property name hive.support.concurrency / name description Enable Hives TableLock Manager Service / description value true / value / property property name hive.zookeeper.quorum /HiveServer2的配置和…

[机器学习笔记]Note7--神经网络:学习

继续是机器学习课程的笔记,这节课会继续介绍神经网络的内容,上一节主要是基本的介绍,以及模型表示,而本节会介绍代价函数,反向传播算法等。 神经网络代价函数 首先是有如下一个神经网络,这里将首先介绍一些…

spark插件剔除步骤

spark插件删除步骤当需要删除插件时,1.删除在../target/build/pulgins/**.jar,2.在运行../targer/build/bin/start.bat时,该start.bat文件默认,在C:\Documents and Settings\gty\(gty电脑用户名)下创建spar…

java json 修改字段_JSON文件-Java:编辑/更新字段值

我的工作流程中有一些JSONObject,并且通过将它们写入json文件来存储相同的JSONObject。我想要一种有效的方式来更新json文件, 仅 更新 需要的字段, 以及更新的JSONObjects实例的内容。例如:档案中我有ObjectOnFile {key1:val1, k…

[机器学习笔记]Note8--机器学习应用建议

继续是机器学习课程的笔记,本节课的内容主要是一些机器学习应用的建议,包括对假设的评估,如何处理过拟合和欠拟合等。 觉得下一步做什么 到目前为止,我们已经学习了线性回归,逻辑回归以及神经网络,梯度下…

Unity3d 手机屏幕自动适配

现在,市场上的手机分辨率多样化。带给开放人员一个很大的“跨界问题”。本人,昨晚突发奇想。手机分辨率多样化,但手机开放人员,制作UI时,最为重要的两个因素就是Position(位置)、Scale(大小); 我引入一个“…

[机器学习笔记]Note9--机器学习系统设计

继续是机器学习课程的笔记,本节课的内容主要是介绍如何设计一个机器学习系统。 首先要做什么 这节课将介绍如何设计一个机器学习系统,首先是以设计一个垃圾邮件分类器算法作为例子。 为了解决这个问题,首先要决定的是如何选择并表达特征向…

java 图片阴影_Java 为 PPT 中的图形添加阴影效果

在PowerPoint文档中,给图形添加阴影效果能增强图形的立体感,使其贴近现实效果,提升文档的美观度。 本文将展示如何使用Free Spire.Presentation for Java为PPT中的图形添加阴影效果。除了文中展示的预设阴影效果,还可以添加内部阴…

nyoj 21 三个水杯 BFS

三个水杯 时间限制:1000 ms | 内存限制:65535 KB难度:4描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只…

论文阅读(1)--Fine-grained Image Classification by Exploring Bipartite-Graph Labels

这是阅读《Fine-grained Image Classification by Exploring Bipartite-Graph Labels》这篇论文所做的笔记。 这篇论文是来自NEC实验室,是一篇有关细粒度分类/精细分类方面的论文。 0. 摘要 首先提出一个问题,给定一张食物的图片,对于一个…

java常用jar_常用jar包含义

常用jar包含义activation.jar:与javaMail有关的jar包,使用JavaMail时应与mail.jar一起加入到lib中去,具体负责mail的数据源和类型等ajaxtags-1.2-beta3.jar:ajax提供的标签库,使用户能像使用jsp普通标签一样使用ajaxant.jar和antlr.jar(可以删…

LS 24 Bracket sequence(DP)

Bracket sequence Given string s made up with (, ), ?, count the way to substitude ? with ( or ) to form regular bracket sequence. Input A string s. (1≤|s|≤1000) Ouptut An integer denotes the number of ways modulo (1097). Sample input ???? Sample ou…