『壹』 java中如何獲取方法名字
import java.lang.reflect.Method;
public class Users {
public void print() {
}
public void getName() {}
public static void main(String[] args) {
Class c = Users.class;
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++) {
System.out.println("方法名" + m[i].getName());
}
}
}
『貳』 java如何動態獲取方法名
public class Test {
public static void main(String[] args)throws Exception {
// TODO Auto-generated method stub
A a=new A();
String i="setB";
Method cc=a.getClass().getMethod(i, String.class);//獲取方法
//String.class如果沒有就是new Class[0]
System.out.println(cc.getName());
cc.invoke(a, "aa");
//調用方法
System.out.println(a.getB());
}
}
class A{
private int a=0;
private String b="abc";
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
}
『叄』 JAVA可以在方法裡面調出類信息,怎麼調出方法的信息,比如獲得方法的方法名
你如果可以獲得類的星系,可以根據java的反射機制找到方法的信息。
Class clazz就是你獲得的類,那麼clazz.getMethods()可以獲得所有的方法。
具體的查閱相關的 api
『肆』 如何在java方法中獲得當前方法的名稱
在java方法中獲得當前方法的名稱方法:
一、獲得當前類名:
Java代碼
this.getClass().getName();
二、獲得當前方法名臣:
JDK1.4
Java代碼
newException().getStackTrace()[i].getMethodName();//其中i=0就是當前的類的方法名字;i==1就是調用者的方法
JDK1.5之後可用
Java代碼
Thread.currentThread().getStackTrace()[1].getMethodName();//具體使用數組的那個元素和JVM的實現有關,我在SUNJDK6下面測試的是第二個元素,具體說明可以查看Thread.getStackTrace方法的javadoc
『伍』 java怎麼獲取方法參數名
在java中,可以通過反射獲取到類、欄位、方法簽名等相關的信息,像方法名、返回值類型、參數類型、泛型類型參數等,但是不能夠獲取方法的參數名。在實際開發場景中,有時需要根據方法的參數名做一些操作,比如像spring-mvc中,@RequestParam、@PathVariable註解,如果不指定相應的value屬性,默認就是使用方法的參數名做為HTTP請求的參數名,它是怎麼做到的呢?
在這樣情況下,有兩種方法獲取方法來解決這種需求,第一種方法是使用註解,在註解中指定對應應的參數名稱,在需要使用參數名稱時,獲取註解中相應的值即可。第二種方法是從位元組碼中獲取方法的參數名,但是這有一個限制,只有在編譯時使用了-g或-g:vars參數生成了調試信息,class文件中才會生成方法參數名信息(在本地變數表LocalVariableTable中),而使用-g:none方式編譯的class文件中是沒有方法參數名信息的。所以要想完全不依賴class文件的編譯模式,就不能使用這種方式。
『陸』 java怎麼獲取src目錄下所有的包名,類名,方法名 以及通過一個類名獲得該類下的所有方法名
可以使用以下代碼來獲取src目錄下所有的包名,類名,方法名 以及通過一個類名獲得該類下的所有方法名。
import java.io.File;
import java.lang.reflect.Method;
public class LoopApp {
public static void main(String[] args) throws Exception {
String packageName = "";
File root = new File(System.getProperty("user.dir") + "\\src");
loop(root, packageName);
}
public static void loop(File folder, String packageName) throws Exception {
File[] files = folder.listFiles();
for (int fileIndex = 0; fileIndex < files.length; fileIndex++) {
File file = files[fileIndex];
if (file.isDirectory()) {
loop(file, packageName + file.getName() + ".");
} else {
listMethodNames(file.getName(), packageName);
}
}
}
public static void listMethodNames(String filename, String packageName) {
try {
String name = filename.substring(0, filename.length() - 5);
Object obj = Class.forName(packageName + name);
Method[] methods = obj.getClass().getDeclaredMethods();
System.out.println(filename);
for (int i = 0; i < methods.length; i++) {
System.out.println("\t" + methods[i].getName());
}
} catch (Exception e) {
System.out.println("exception = " + e.getLocalizedMessage());
}
}
}
『柒』 java 在字元串中截取方法名
importjava.util.HashMap;
importjava.util.Map;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
publicclassParseString{
privatestaticfinalStringPARAM_KEY="!";
publicstaticvoidmain(String[]args)throwsException{
//待解析字元串
Stringmethod="methodName(methodName2(methodName4(2,3,4),2),methodName3(),strName)";
//這句很重要,先刪除字元串中所有的空格,後面的正則中不再需要考慮空字元問題
method=method.replaceAll("\s+","");
//輸出結果
for(Map.Entry<String,Integer>entry:parseMethod(method).entrySet()){
System.out.println(entry.getKey()+"---"+entry.getValue());
}
}
privatestaticMap<String,Integer>parseMethod(Stringmethod){
Map<String,Integer>ret=newHashMap<>();
Patternp=Pattern.compile("^([^\(]+)\((.*)\)$");
Matcherm=p.matcher(method);
if(!m.find())
thrownewRuntimeException("錯誤的方法字元串:"+method);
//找到方法
Map<String,Integer>paramMap=parseParams(m.group(2));
ret.put(m.group(1).trim(),paramMap.remove(PARAM_KEY));
ret.putAll(paramMap);
returnret;
}
privatestaticMap<String,Integer>parseParams(Stringparams){
Map<String,Integer>ret=newHashMap<>();
intcount=0;
while(params.length()>0){
if(params.split(",")[0].indexOf("(")>=0){
//第一個參數為方法
Stringmethod=findFirstMethod(params);
params=(method.length()==params.length())?"":params.substring(method.length()+1);
ret.putAll(parseMethod(method));
}else{
//第一個參數為非方法
params=params.replaceAll("[^,]+(,(.+))*","$2");
}
count++;
}
ret.put(PARAM_KEY,count);
returnret;
}
(Stringparams){
Stringmethod="";
booleanstart=false;
intmatchCount=0;
for(inti=0;i<params.length();i++){
charch=params.charAt(i);
if(ch=='('){
start=true;
matchCount++;
}elseif(ch==')'){
matchCount--;
}
method+=params.substring(i,i+1);
if(start&&matchCount==0)break;
}
if(start)
returnmethod;
thrownewRuntimeException("錯誤的參數字元串:"+params);
}
}
『捌』 Java如何獲取方法參數中的名稱
一、從註解中獲取
使用註解方式,我們需要自定義一個註解,在註解中指定參數名,然後通過反射機制,獲取方法參數上的註解,從而獲取到相應的註解信息。這里自定義的註解是Param,通過value參數指定參數名,定義了一個工具類ParameterNameUtils來獲取指定方法的參數名列表,這里獲取測試類ParameterNameTest中定義的方法method1的參數名列表表,下面是具體的代碼。
『玖』 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));
}
}
『拾』 Java語言如何獲取當前正在使用方法的方法名。
System.out.println(new Throwable().getStackTrace()[0]);
執行結果
com..TestMain.main(TestMain.java:71)
包名com.
類名Testmain
方法名main,
處於方法行數71行