當前位置:首頁 » 編程語言 » invokejava

invokejava

發布時間: 2023-02-07 21:41:33

java invoke 反射的使用方法

你這個類是一個嚴格的JavaBean格式。。所以先可以獲得屬性。。然後獲得讀寫方法。。然後寫值。。讀值。。hibernate其實也就是採用的這種差不多的方式。。

import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class ReflectTest {

/**
* @param args
*/
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("TaskProvidePropsList");//這里的類名是全名。。有包的話要加上包名
Object obj = clazz.newInstance();
Field[] fields = clazz.getDeclaredFields();
//寫數據
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method wM = pd.getWriteMethod();//獲得寫方法
wM.invoke(obj, 2);//因為知道是int類型的屬性,所以傳個int過去就是了。。實際情況中需要判斷下他的參數類型
}
//讀數據
for(Field f : fields) {
PropertyDescriptor pd = new PropertyDescriptor(f.getName(), clazz);
Method rM = pd.getReadMethod();//獲得讀方法
Integer num = (Integer) rM.invoke(obj);//因為知道是int類型的屬性,所以轉換成integer就是了。。也可以不轉換直接列印
System.out.println(num);
}
}

}

❷ java中invoke()的作用是什麼

用來執行一個方法,是反射中知識 。

就是調用類中的方法,最簡單的用法是可以把方法參數化invoke(class, method)。

比如你Test類里有一系列名字相似的方法setValue1、setValue2等等。

可以把方法名存進數組v[],然後循環里invoke(test,v[i]),就順序調用了全部setValue。

Java是一門面向對象編程語言,不僅吸收了C++語言的各種優點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特徵。

Java語言作為靜態面向對象編程語言的代表,極好地實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程

❸ java invoke 傳遞參數問題

//獲得了Workbook對象之後,就可以通過它得到Sheet(工作表)對象了
Sheet[] sheet = wb.getSheets();

if(sheet!=null&&sheet.length>0){
//對每個工作表進行循環
for(int i=0;i < sheet.length;i++){
//得到當前工作表的行數
int rowNum = sheet[i].getRows();
System.out.println("rowNum ### "+rowNum);
for(int j=4;j < rowNum;j++){
//得到當前行的所有單元格
Cell[] cells = sheet[i].getRow(j);
Object objBean = objClass.newInstance();
if(cells!=null&&cells.length>0){
//對每個單元格進行循環
for(int k=0;k < cells.length;k++){
//讀取當前單元格的值
String cellValue = cells[k].getContents();
System.out.println("cellValue"+cellValue);
try {
proName = field[k].getName();
ReflectgetMethod.invokeSet(objBean, proName, cellValue);

} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
listBean.add(objBean);
}
}
}
}

我這是在導入excel數據時候用到的,希望對你有用吧!

❹ java 中 invoke()的作用是什麼

在寫代碼的時候,發現從父類class通過getDeclaredMethod獲取的Method可以調用子類的對象,而子類改寫了這個方法,從子類class通過getDeclaredMethod也能獲取到Method,這時去調用父類的對象也會報錯。雖然這是很符合多態的現象,也符合java的動態綁定規范,但還是想弄懂java是如何實現的,就學習了下Method的源代碼。

Method的invoke方法:

1、先檢查AccessibleObject的override屬性是否為true。

AccessibleObject是Method,Field,Constructor的父類,override屬性默認為false,可調用setAccessible方法改變,如果設置為true,則表示可以忽略訪問許可權的限制,直接調用。

2、如果不是ture,則要進行訪問許可權檢測。用Reflection的quickCheckMemberAccess方法先檢查是不是public的,如果不是再用Reflection.getCallerClass方法獲得到調用這個方法的Class,然後做是否有許可權訪問的校驗,校驗之後緩存一次,以便下次如果還是這個類來調用就不用去做校驗了,直接用上次的結果。

3、調用MethodAccessor的invoke方法。每個Method對象包含一個root對象,root對象里持有一個MethodAccessor對象。我們獲得的Method獨享相當於一個root對象的鏡像,所有這類Method共享root里的MethodAccessor對象,(這個對象由ReflectionFactory方法生成,ReflectionFactory對象在Method類中是staticfinal的由native方法實例化。

❺ java invoke 以及 webservice詳解,求助

1、invoke()一般是java反射里的方法。

1、給外界提供的都是介面
定義一個介面,然後給這個介面定義一個實現類。
2、在src目錄下新建一個META-INF文件夾,在這個文件夾下新建一個xfire文件夾,在這個文件夾下再新建一個service.xml文件。
文件內容配置例子:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xfire.codehaus.org/config/1.0">

<service>
<name>CalculatorService</name><!--介面的名字-->
<serviceClass>com.hhaip.service.CalculatorService</serviceClass><!--定義的那個介面-->
<implementationClass>
com.hhaip.service.impl.CalculatorServiceImpl <!--介面的實現-->
</implementationClass>
</service>
</beans>
3、在web.xml中將服務公布出去
<!-- 將服務公布出去 -->
<servlet>
<servlet-name>XFireServlet</servlet-name>
<display-name>XFire Servlet</display-name>
<servlet-class>
org.codehaus.xfire.transport.http.XFireConfigurableServlet
</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/servlet/XFireServlet/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>XFireServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>

---------------------------------------------以上就是服務端信息-------------------------------------------------

---------------------------------------------以下就是客戶端信息-------------------------------------------------

1、客戶端使用Ant自動建站工具幫我生成好訪問Web介面所需要的信息。
2、Ant自動生成好客戶端代碼後,只需要新建一個測試類測試。

Ant配置例子:
build.xml
<?xml version="1.0" encoding="UTF-8"?>
<project name="WebService" basedir="." default="webservice">

<property file="build.properties" />

<path id="project-classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>

<target name="webservice">
<taskdef name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask"
classpathref="project-classpath" />
<wsgen outputDirectory="${scr.dir}" wsdl="${wsdl.dir}" package="com.hhaip.client" overwrite="true"/>
</target>

</project>
build.properties
scr.dir=${basedir}/src
lib.dir=E:/jar/xfire-1.2.6/lib
wsdl.dir=http://localhost:8888/myxfire/services/CalculatorService?wsdl
--> wsdl.dir這個路徑配置最重要。

測試類代碼:
public class TestService {

public static void main(String[] args) {

CalculatorServiceClient client = new CalculatorServiceClient();
//CalculatorServiceClient是Ant生成的客戶端代碼

CalculatorServicePortType portType = client.getCalculatorServiceHttpPort();
//獲取介面

int addResult = portType.add(1, 3);
System.out.println(addResult);
}

❻ java invoke的用法. 獲取一個對象的所有get方法。再用invoke到另一個對象的set方法中,怎麼寫。

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Xx {

/**
* @param args
*/
public static void main(String[] args) {
//所有public方法
Method[] ms = A.class.getMethods();
for (int i = 0; i < ms.length; i++) {
if(ms[i].getName().startsWith("get"))
//get方法
;
}
try {
//set方法
Method setMethod = A.class.getMethod("setXxx", Object.class);
//set值,根據具體參數類型來,可多個
Object setValue = new Object();
setMethod.invoke(new A(), setValue);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

class A {

}

❼ java 中 invoke()的作用是什麼

invoke(調用)就是調用Method類代表的方法。可以實現動態調用,例如可以動態的傳人參數,可以把方法參數化。

可以把方法參數化invoke(class, method),比如Test類里有一系列名字相似的方法setValue1、setValue2等等,可以把方法名存進數組v[],然後循環里invoke(test,v[i]),就順序調用了全部setValue。

此外,invoke()對帶有指定參數的指定對象調用,個別參數被自動解包,與基本形參相匹配,基本參數和引用參數都隨需服從方法調用轉換。如下

public Object invoke(Object obj,Object... args)

throws IllegalAccessException,

IllegalArgumentException,

InvocationTargetException

如果底層方法是靜態的,那麼可以忽略指定的obj參數。該參數可以為 null。

如果底層方法所需的形參數為 0,則所提供的args數組長度可以為 0 或 null。

如果底層方法是實例方法,則使用動態方法查找來調用它,這一點記錄在 Java Language Specification, Second Edition 的第 15.12.4.4 節中;在發生基於目標對象的運行時類型的重寫時更應該這樣做。

如果底層方法是靜態的,並且尚未初始化聲明此方法的類,則會將其初始化。

如果方法正常完成,則將該方法返回的值返回給調用者;如果該值為基本類型,則首先適當地將其包裝在對象中。但是,如果該值的類型為一組基本類型,則數組元素不被包裝在對象中;換句話說,將返回基本類型的數組。如果底層方法返回類型為 void,則該調用返回 null。

(7)invokejava擴展閱讀:

語言特點

1.簡單性

Java看起來設計得很像C++,但是為了使語言小和容易熟悉,設計者們把C++語言中許多可用的特徵去掉了,這些特徵是一般程序員很少使用的。例如,Java不支持go to語句,代之以提供break和continue語句以及異常處理。

2.分布性

Java設計成支持在網路上應用,它是分布式語言。Java既支持各種層次的網路連接,又以Socket類支持可靠的流(stream)網路連接,所以用戶可以產生分布式的客戶機和伺服器。

網路變成軟體應用的分布運載工具。Java程序只要編寫一次,就可到處運行。

3.編譯和解釋性

Java編譯程序生成位元組碼(byte-code),而不是通常的機器碼。Java位元組碼提供對體系結構中性的目標文件格式,代碼設計成可有效地傳送程序到多個平台。Java程序可以在任何實現了Java解釋程序和運行系統(run-time system)的系統上運行。

❽ Java反射invoke怎麼用

Java反射中invoke的用法,我給你個例子,你看看吧(每一句都有注釋)

import java.lang.reflect.Method;

import java.lang.reflect.Constructor;

public class S{

public void test(){

System.out.println("test");

}

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

//獲取S類

Class clzz = Class.forName("S");

//獲取S類默認無參構造方法

Constructor con = clzz.getDeclaredConstructor();

//創建一個S類實例對象

S s =(S)con.newInstance();

//獲取S類的公有成員方法test

Method m=clzz.getDeclaredMethod("test");

//調用S類對象s中的公有成員方法test

m.invoke(s);

}

}

❾ java中 invoke()如何傳實體進去

你問的是Method類的invoke方法吧
這個方法的定義是:invoke(Object obj,Object...args)
第一個參數為類的實例,第二個參數為相應函數中的參數
你的問題里說如何傳實體進去,很簡單,你定義的方法只要寫了接收參數(數量無所謂),那麼直接(弄成數組)傳進去就是了。
以下是一個例子:
public class Test
{
public void print(String string)
{
System.out.println("print(String string)");
System.out.println(string);
}

public void print(String ... strings)
{
System.out.println("print(String ... string)");

for(String string: strings)
System.out.println(string);
}

public static void main(String[] args) throws Exception
{
Test test = new Test();

// 調用 print(String string)
Method method1 = test.getClass().getMethod("print", String.class);
method1.invoke(test, "a");

// 調用 print(String ... strings)
Method method2 = test.getClass().getMethod("print", Array.newInstance(String.class, 0).getClass());
method2.invoke(test, new String[][]{new String[]{"a", "b"}});
}

}

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:577
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:871
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:566
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:749
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:668
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:994
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:239
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:98
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:790
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:696