A. java 怎麼在當前方法內部得到當前方法的參數類型列表
java在當前方法內部想得到當前方法參數類型列表,可以通過對該方法所在的類進行反射來得到當前方法的參數列表。對當前對象進行反射可以得到類中所有成員變數和方法的對象數組,對當前方法的名字與方法數組進行比較,得到相同名字的方法(即當前方法),然後通過使用該方法對象的方法來獲得參數列表。
B. java反射獲取方法不定參數的名稱和類型
(Object...objects){
for(Objectobj:objects){
Classclz=obj.getClass();
System.out.println(clz);
}
returnfalse;
}
C. java 獲取方法調用者 的參數
區分是調用哪個test是由你調用的時候的參數決定的。
例如:調用時test(1),那麼你調用的是
test(int i){
new A().getMethod();
}
這個方法
如果調用的時候是test("str")調用的就是
test(String i){
new A().getMethod();
}
了。
D. java開發的項目中模塊、包、類、介面的關系是什麼
讓我談談流程為導向,面向對象,這是兩個思想流派,他們是能夠實現的能力,使用該程序來完成一件事。
唯一的思維方式是不一樣的。
面向過程的一件事,一個項目分解成一個函數的小功能。
面向對象的事情,作為一個小對象或這些對象之間的相互關系組成的一個小部分組成,構成了整個項目。
一切是一個面向對象的思想的對象,我,你,他也是。
「類」是一個抽象的對象,或進行了總結。例如,你可以為人類總結。
整體而言,類是抽象的虛擬對象是有生命的東西。
是一個類,我你他是對象。
一般的面向對象編程方法,設計一個類,然後創建一個這個類的對象。
經過這個對象的相關業務。
點:操作的對象,對象不要緊經營。
這里談談如何設計一個類,
類有一些封裝的性質和功能。
面向過程的思想,程序通常是一個函數,這些函數的相互調用。
形成一個完整的方案來解決問題。其基本結構是:
函數()
{
......;
}
函數的兩()
{
......;
}
......
主要功能()
{
......;
}
?
?
然而,在面向對象的思想是包在一起,形成一個類。
類
{
?函數A()
?{
?......;
?}
功能二()
?{
?......;
?}
?......
}
?
?
產生一個對象,那麼這個類:從類的類名學生
方法是生成對象:學生S1;
在這里,s1是一個對象,它生產的對象可以是相關的操作。
操作方法,如:S1是函數();
等等。在這篇文章中的具體細節就不說了只說想。
這是普通的一點是,在具體實施過程中的類,然後生成一個對象,該對象來調用相關的操作。
如果在面向過程的功能封裝成類,然後對象的操作。
A類包,它通常作為一個模塊,其他類型的呼叫需要的時候。
類是一個抽象的,抽象的東西一些共同的特點,總結提出的公共部分的包一起。
包,已經上面說的,裝在一個容器內的一些性質和功能。
在這里,我用一個游戲來解釋:
假設我們想成為游戲內打怪的游戲類似,簡單,怪不要打,只有玩的人。
他的血液不斷減少,直至死亡。
所有的怪物在抽象的共同特點,所以我們得到了一個類:怪物
級怪物
{
??炭怪物名稱;
?血液;
?怪物(怪物N,血列印)/ *構造函數* /
?{
怪物的名字嗎?=怪物名稱n;
?血=血N;
?}
毒打功能(?)
?{
?血液減少;
?}
?判斷功能()
?{
?(血== 0)
?輸出(「你贏了!」);
?}
?玩游戲()
?{
?(血> 0)
?{
?毒打函數();
??判斷函數();
?}
?}
}
?
在這樣一個怪物類屬性的定義:怪物名稱,血液和功能:結構毆打,確定
根據這種情況,可以產生一個對象。
一個類可以有任意數量的對象,區分這些對象,取決於構造函數。
讓我們繼續寫我們的計劃
主要的主要功能
無效的主要()
{
/ ******對象產生****** /?
?怪物怪物(「狼來了」,5000);
?怪物怪物(「老虎」,8000);
怪物怪物(「蛇」,3000);
開始我們的游戲?/ **為了幾個對象** /
?怪物玩游戲();
?怪物玩游戲();
?怪物玩游戲();
}
?
然後主要的功能,我們已經建立了三個對象,它們共享一個類。
可以看到,類相當於一個組件,模塊,我們需要建立它的對象,將是能夠實現他的功率封裝
可以。
這是面向對象的優點,可重復使用,不必每一個用於重寫。
盡管如此,感覺,還是沒有說明白,真的有點只能意味著說不出的感覺。
事實上,如果這本書,真正認真寫了一些東西,他們可以理解,感到無形的。
E. Java如何獲取方法參數的參數名稱
packagecom.mikan;
importjava.lang.annotation.*;
/**
*@authorMikan
*@date2015-08-0423:39
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public@interfaceParam{
Stringvalue();
}
獲取註解中的參數名的工具類:
packagecom.mikan;
importjava.lang.annotation.Annotation;
importjava.lang.reflect.Method;
/**
*@authorMikan
*@date2015-08-0500:26
*/
publicclassParameterNameUtils{
/**
*獲取指定方法的參數名
*
*@parammethod要獲取參數名的方法
*@return按參數順序排列的參數名列表
*/
publicstaticString[](Methodmethod){
Annotation[][]parameterAnnotations=method.getParameterAnnotations();
if(parameterAnnotations==null||parameterAnnotations.length==0){
returnnull;
}
String[]parameterNames=newString[parameterAnnotations.length];
inti=0;
for(Annotation[]parameterAnnotation:parameterAnnotations){
for(Annotationannotation:parameterAnnotation){
if(annotationinstanceofParam){
Paramparam=(Param)annotation;
parameterNames[i++]=param.value();
}
}
}
returnparameterNames;
}
}
測試類:
packagecom.mikan;
importjava.lang.reflect.Method;
importjava.util.Arrays;
/**
*@authorMikan
*@date2015-08-0423:40
*/
publicclassParameterNameTest{
publicvoidmethod1(@Param("parameter1")Stringparam1,@Param("parameter2")Stringparam2){
System.out.println(param1+param2);
}
publicstaticvoidmain(String[]args)throwsException{
Class<ParameterNameTest>clazz=ParameterNameTest.class;
Methodmethod=clazz.getDeclaredMethod("method1",String.class,String.class);
String[]parameterNames=ParameterNameUtils.(method);
System.out.println(Arrays.toString(parameterNames));
}
}