java如何通过反射获取包中所有的类

java如何通过反射获取包中所有的类,第1张

先通过IO,定位到这个包

通过Filelist得到一个包含这个包下所有class的文件的数组。

循环这个数组,用包名拼接每一个遍历出来的文件的名字,得到每一个完整的类名(即,包名加类名)

通过classforname反射得到每一个类实例

是编译过的calss文件哦,你应该知道java类在运行的时候会被编译成calss文件,而每个java文件上面都有一个package属性,这个东西其实是这个calss文件的路径,你在使用反射的时候需要给Class你的javaclass属性,在运行的时候java虚拟机就会根据你的package属性直接去加载这个class文件

够清楚了吧?采纳!采纳!

Method类中方法的使用(含代码和注释):

getMethods()获得本类及父类中的public权限修饰符方法

getDeclaredMethods()专门获得调用该方法的对象的本类中的所有方法包括private权限修饰符的方法

getDeclaredMethod(String name,class<>parameterTypes)

第一个参数:方法的名称

第二个参数:可变长度,写你要查找的那个方法的参数类型列表class

getParameterCount()得到方法的参数个数123456

package LessonForReflection03;import javalangreflectMethod;import javalangreflectModifier;abstract class Card{

private void creatRandomNumbers(int count)//private关键字

{

}

public void getFullCardsNumbers(String[] random, String pre_numbers)

{

}

public static void getUserInfor()

{

}

public abstract void getUserInfor(String tel);

public abstract void getUserInfor(int sal1, int sal2) throws ArrayIndexOutOfBoundsException,ArithmeticException;}public class MethodInforGetter {

public static void main(String[] args) 

{

Class<> c1 = Cardclass;

Systemoutprintln("-------------------------");

Method[] m1 = c1getMethods();//getMethods()获得本类及父类中的public方法!

for (Method m:m1)

{

Systemoutprintln(m);

}

Systemoutprintln("-------------------------");

Method[] m2 = c1getDeclaredMethods();//getDeclaredMethods()专门获得本类中的所有方法包括private!

for (Method m:m2)

{

Systemoutprintln(m);

}

Systemoutprintln("-------------------------");

/

getDeclaredMethod(String name,class<>parameterTypes)

第一个参数:方法的名称

第二个参数:可变长度,写你要查找的那个方法的参数类型列表

 getParameterCount()得到方法的参数个数

/

try 

{

Method m3 = c1getDeclaredMethod("getUserInfor");

Systemoutprintln(m3);

//getParameterCount()方法,获得方法参数个数

Systemoutprintln(m3getParameterCount());

Systemoutprintln(ModifiertoString(m3getModifiers()));//获得方法修饰符

Systemoutprintln(m3getReturnType());

Systemoutprintln("-------------------------");

Method m4 = c1getDeclaredMethod("getUserInfor", intclass,intclass);

//getExceptionTypes()可以获得初始化当前Method对象的给Class对象初始化的那个类的那个指定方法抛出的异常类型

Class<>[] exception = m4getExceptionTypes();

for (Class<> e:exception)

{

Systemoutprintln(e);

}

} catch (NoSuchMethodException | SecurityException e) 

{

eprintStackTrace();

}

}}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788

Constructor类中的方法的使用>

javalangreflectConstructor:

Constructor[] getConstructor()获得本类里的public权限修饰符构造函数,不能获取父类的!

Constructor[] getDeclaredConstructor()获得本类中的所以构造函数!

Constructor<T> getConstructor(ClassparameterType)用参数决定获得本类中的某个的构造方法,只能获得public的

Constructor<T> getDeclaredConstructor(ClassparameterType)用参数决定获得本类中的某个构造方法

附:

JDK80之后新增的类:

Executable:

它是Method和Constructor的父类

常用方法:

getParameter()获得类中方法参数

getExceptionTypes()获得类中某个方法抛出异常类型

getMoidfiers()获得方法权限修饰符

Parameter:

封装并代表了参数实例123456789101112131415

package LessonForReflection03;import javalangreflectConstructor;import javalangreflectModifier;import javalangreflectParameter;/

 javalangreflectConstructor

 Constructor[] getConstructor();获得本类里的public权限修饰符构造函数,不能获取父类的

  Constructor[] getDeclaredConstructor();得本类里的全部构造

  Constructor<T> getConstructor(ClassparameterType);用参数决定获得哪个构造方法

  Constructor<T> getDeclaredConstructor(ClassparameterType);

/public class ConstructorInforGetter {

public static void main(String[] args) 

{

Systemoutprintln("获得Cricle本类里的public权限修饰符构造函数,不能获取父类的Constructor[] getConstructor()");

Systemoutprintln("子类继承不了父类中的构造方法和private");

//Constructor[] getConstructor()获得Cricle本类里的public权限修饰符构造函数,不能获取父类的

//子类继承不了父类中的构造方法和private

Class<Circle> c1 = Circleclass;

Constructor<>[] cons1 = c1getConstructors();

for (Constructor<> cons:cons1)

{

Systemoutprintln(cons);

//Systemoutprintln(consgetName());

}

Systemoutprintln("-----------------------");

Systemoutprintln("方法获得本类中的所有构造函数getDeclaredConstructor()");

Constructor<>[] cons2 = c1getDeclaredConstructors();

for (Constructor<> cons:cons2)

{

Systemoutprintln(cons);

}

Systemoutprintln("-----------------------");

try 

{

Systemoutprintln("方法用参数指定获得本类!构造方法,只能获取public的Constructor<T> getConstructor(ClassparameterType)");

Constructor<> cons3 = c1getConstructor(intclass);

Systemoutprintln(ModifiertoString(cons3getModifiers()));

Systemoutprintln(cons3);

Systemoutprintln("-----------------------");

Systemoutprintln("方法用参数指定获得本类!构造方法任何权限修饰符的都可以获得Constructor<T> getDeclaredConstructor(ClassparameterType)");

Constructor<> cons4 = c1getDeclaredConstructor(Stringclass);

Systemoutprintln(cons4);

Systemoutprintln("-----------------------");

/

 JDK80之后新增的类

 Executable:

 是Method和Constructor的父类

 方法:

 getParameter();

 getExceptionTypes();

 getModifiers();

          getTypeParameters();

  Parameter:

  封装并代表了参数实例

/

Systemoutprintln("获取类中方法的参数getParameters()");

Constructor<> cons5 = c1getDeclaredConstructor(intclass,Stringclass);

Parameter[] p1 = cons5getParameters();

for (Parameter p:p1)

{

Systemoutprintln(p);

}

} catch (NoSuchMethodException | SecurityException e) 

{

eprintStackTrace();

}

}}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687

代码中提到的Circle类和Shape类二者为继承关系:

package LessonForReflection03;public class Circle extends Shape{

private int r;

private String color;

public Circle(int r, String color) 

{

super();

thisr = r;

thiscolor = color;

}

public Circle(int r) 

{

super();

thisr = r;

}

protected Circle(String color) 

{

super();

thiscolor = color;

}

Circle()

{

super();

}}12345678910111213141516171819202122232425262728293031

package LessonForReflection03;public class Shape {

private int per;

public Shape(int per) 

{

super();

thisper = per;

}

public Shape() 

{

super();

}}1234567891011121314151617

部分文字来源于:

咕嘟咖啡杨海滨老师 — 《java编程语言高级特性》

轻量化研习Java相关技术倡导者

“爱码学院”联合创始人自适应教学理念提出者践行者;多年开发及项目管理经历;出版《JavaEE企业级应用与开发》一书;10余年高校项目实践毕设指导经验;企业软培经验丰富

以上就是关于java如何通过反射获取包中所有的类全部的内容,包括:java如何通过反射获取包中所有的类、请问JAVA反射中,是从什么地方读取类的信息的、java中的反射机制是什么,有什么作用啊等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9742001.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存