
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
昆明达内培训的小编这一期给大家讲Java中的反射。
Java反射API
Java反射指的是在运行状态时,能够获取类的属性和方法或者修改类运行时行为的过程。
java.lang.Class类提供了很多方法用于获取元数据、检查和改变类运行时的行为。
Java的反射主要涉及java.lang和java.lang.reflect包下的类。
反射应用场景举例
IDE,如Eclipse、MyEclipse、NetBeans等;
调试器;
测试工具等;
各大框架、spring、hibernate等;
java.lang.Class类
java.lang.Class主要提供了以下两个功能:
提供方法用于访问运行期间类的元数据;
提供方法用于检查和修改类的运行时行为;
java.lang.Class类常用方法
Method Description
1) public String getName() 返回类名
2) public static Class forName(String className)throws ClassNotFoundException 加载类并返回Class对象
3) public Object ewInstance()throws InstantiationException,IllegalAccessException创建实例对象
4) public boolean isInterface() 判断是否是接口
5) public boolean isArray() 判断是否是数组
6) public boolean isPrimitive()判断是否是原始数据类型
7) public Class getSuperclass() 返回父类Class引用
8) public Field[] getDeclaredFields()throws SecurityException 返回类的成员属性字段数组
9) public Method[] getDeclaredMethods()throws SecurityException 返回类的方法数组
10) public Constructor[] getDeclaredConstructors()throws SecurityException 返回类的构造方法数组
11) public Method getDeclaredMethod(String name,Class[] parameterTypes)throws NoSuchMethodException,SecurityException 返回类中指定参数类型的方法
怎样获取Class对象
有三种方式,如下:
Class类的forName()方法,动态加载,运行时,开始装入类,并做类的静态初始化
对象的getClass()方法,静态加载(编译时已加载)
.class语法,静态加载(编译时已加载)
forName()方法示例
可用于动态加载,当你知道类的全限定名时,可以使用该方式。注意原始数据类型不适用该方法;
package tmp;
class Simple
{
}
public class Test
{
public static void main(String args[]) throws ClassNotFoundException
{
Class<?> c = Class.forName("tmp.Simple");
System.out.println(c.getName());
System.out.println(c.getSimpleName());
}
}
tmp.Simple
Simple
getClass()方法示例:
从实例对象中获取Class对象
package tmp;
class Simple
{
}
public class Test
{
void printName(Object obj)
{
}
public static void main(String args[])
{
Simple s = new Simple();
Class<? extends Object> c = s.getClass();
System.out.println(c.getName());
System.out.println(c.getSimpleName());
}
}
tmp.Simple
Simple
.class语法示例
作用于类名上,也可应用于原始数据类型,如下所示:
package tmp;
public class Test
{
public static void main(String args[])
{
Class<Boolean> c = boolean.class;
System.out.println(c.getName());
Class<Test> c2 = Test.class;
System.out.println(c2.getName());
}
}
boolean
tmp.Test
判断Class对象对应的类型
以下方法可用于判断Class对象对应的类型:
1) public boolean isInterface():是否对应接口
2) public boolean isArray():是否对应数组
3) public boolean isPrimitive():是否对应原始数据类型
代码示例:
package tmp;
class Simple
{
}
interface My
{
}
public class Test
{
public static void main(String args[])
{
try
{
Class<?> c = Class.forName("tmp.Simple");
System.out.println(c.isInterface());
Class<?> c2 = Class.forName("tmp.My");
System.out.println(c2.isInterface());
}
catch (Exception e)
{
System.out.println(e);
}
}
}
false
true
了解详情请登陆昆明达内IT培训官网(km.tedu.cn)!