您的位置:

java调用反法,java中取反

本文目录一览:

关于用java反射调用一个类里面的方法并执行

Java中要用到反射,首先就必须要获取到对应的class对象,在Java中有三种方法获取类对应的class对象。

1、通过类的.class属性

2、通过类实例的getClass()方法获取

3、通过Class.forName(String className)方法获取

现在比如在package下有个类Calculator

public class Calculator{

public double add(double score1,double score2){

return score1 + score2;

}

public void print(){

System.out.println("OK");

}

public static double mul(double score1,double score2){

return score1 * score2;

}

}

public class CalculatorTest {

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

//通过类的.class属性获取

ClassCalculator clz = Calculator.class;

//或者通过类的完整路径获取,这个方法由于不能确定传入的路径是否正确,这个方法会抛ClassNotFoundException

// ClassCalculator clz = Class.forName("test.Calculator");

//或者new一个实例,然后通过实例的getClass()方法获取

// Calculator s = new Calculator();

// ClassCalculator clz = s.getClass();

//1. 获取类中带有方法签名的mul方法,getMethod第一个参数为方法名,第二个参数为mul的参数类型数组

Method method = clz.getMethod("mul", new Class[]{double.class,double.class});

//invoke 方法的第一个参数是被调用的对象,这里是静态方法故为null,第二个参数为给将被调用的方法传入的参数

Object result = method.invoke(null, new Object[]{2.0,2.5});

//如果方法mul是私有的private方法,按照上面的方法去调用则会产生异常NoSuchMethodException,这时必须改变其访问属性

//method.setAccessible(true);//私有的方法通过发射可以修改其访问权限

System.out.println(result);//结果为5.0

//2. 获取类中的非静态方法

Method method_2 = clz.getMethod("add", new Class[]{double.class,double.class});

//这是实例方法必须在一个对象上执行

Object result_2 = method_2.invoke(new Calculator(), new Object[]{2.0,2.5});

System.out.println(result_2);//4.5

//3. 获取没有方法签名的方法print

Method method_3 = clz.getMethod("print", new Class[]{});

Object result_3 = method_3.invoke(new Calculator(), null);//result_3为null,该方法不返回结果

}

}

java 反射调用方法有什么用

首先你要明白反射机制可以用来做什么

Java反射的功能

1)可以判断运行时对象所属的类

2)可以判断运行时对象所具有的成员变量和方法

3)通过反射甚至可以调用到private的方法

4)生成动态代理

java 反射 方法调用

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

说白了就是调用这个累的.Class方法然后调用其属性和方法。

java反射方法调用问题

int是基本类型没错,因此,在用反射调用时,应明确使用Integer才行。

由于参数是从数据库里来的(ResultSet),因此,要看数据库的定义,以及数据库的类型。

比如,对于Oracle 定义的任何数值类型字段,都会返回Decimal对象,由于float类型能运行,推断应该不使用的ORACLE,还是看你的数据库定义吧,实在不行,就要做下面的工作,增加一个TypeConvertor定义,其中实现将数据库返回的对象转换成方法参数所需的类型,针对几种基本数据类型进行简单的转换,就不需要依赖数据库了。

1楼的是想自己做持久类框架??

java 反射机制的几个调用方法

import java.lang.reflect.Method;

import java.lang.reflect.InvocationTargetException;

/**

* Created by IntelliJ IDEA.

* File: TestRef.java

* User: leizhimin

* Date: 2008-1-28 14:48:44

*/

public class TestRef {

public staticvoid main(String args[]) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {

Foo foo = new Foo("这个一个Foo对象!");

Class clazz = foo.getClass();

Method m1 = clazz.getDeclaredMethod("outInfo");

Method m2 = clazz.getDeclaredMethod("setMsg", String.class);

Method m3 = clazz.getDeclaredMethod("getMsg");

m1.invoke(foo);

m2.invoke(foo, "重新设置msg信息!");

String msg = (String) m3.invoke(foo);

System.out.println(msg);

}

}

class Foo {

private String msg;

public Foo(String msg) {

this.msg = msg;

}

public void setMsg(String msg) {

this.msg = msg;

}

public String getMsg() {

return msg;

}

public void outInfo() {

System.out.println("这是测试Java反射的测试类");

}

}