问一下
java 反射的妙处在哪?
能举个例子最好了
java 反射的妙处在哪?
能举个例子最好了
解决方案 »
- 这个程序有哪些语法错误,帮忙啊
- java socket 处理字节问题 16进制发过去 UDP 协议 二进制转换为相应的类型 如何
- 请教高手,多线程的难题
- 紧急求助:java控制台出现这样的提示错误是什么原因?
- 挥泪赠分,如何在Applet中给String显示规定字体?
- UltraEdit编译运行package的问题
- 如何获取网卡的Physical Address
- 编译ActionForm,ActionServlet时遇到的问题.
- 关于ORACLE存储过程返回可滚动游标的问题,急球相关解决思路?
- 俺学java碰到的第一个问题向各位请教
- nonblocking socketchannel是否准备好?
- 各位帮忙看一下
反射机制是Java被视为动态语言的一个关键机制。
反射机制提供了以下功能:
在运行时判断任意一个实例所属的类。
在运行时构造任意一个类的实例。
在运行时判断任意一个类所具有的属性和方法
在运行时调用任意一个实例的方法。
反射本身的特点就是对运行的程序进行处理,虽然不知道什么时候能到,但以后总是有用的嘛。
package com.feilong.reflect;public class TestMain {
public static void main(String[] args) {
// Person person = new Person();
// person.Hello();
try {
Class personClass = Class.forName("com.feilong.reflect.Person");
Person person = (Person) personClass.newInstance();
person.Hello();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}这个是反射吧
最简单的读数据库,如果没反射,将数据转成JavaBean的话要一个一个去setter,如果JavaBean多,就很头疼了,因为要为每个JavaBean写一个单独的读取方法。。
有了反射就方便了,只要注意JavaBean的规范、数据库字段的规范,一个方法就搞定。
import java.lang.reflect.Method;
public class DumpMethod {
public static void main(String[] args) throws ClassNotFoundException {
Class<?> classType=Class.forName(args[0]); //获取从命令行中的class实例
Method[] methods=classType.getDeclaredMethods(); //获取Class实例对象的所有申明方法。
for (Method method : methods) {
System.out.println(method);
}
}
}比如:输入java.io.File
输出结果:
public int java.io.File.hashCode()
public int java.io.File.compareTo(java.io.File)
public int java.io.File.compareTo(java.lang.Object)
public boolean java.io.File.equals(java.lang.Object)
public java.lang.String java.io.File.toString()
public java.lang.String java.io.File.getName()
public long java.io.File.length()
public java.lang.String java.io.File.getCanonicalPath() throws java.io.IOException
public java.lang.String java.io.File.getParent()
public boolean java.io.File.isAbsolute()
private synchronized void java.io.File.writeObject(java.io.ObjectOutputStream) throws java.io.IOException
public boolean java.io.File.setReadOnly()
public java.lang.String[] java.io.File.list()
public java.lang.String[] java.io.File.list(java.io.FilenameFilter)
private synchronized void java.io.File.readObject(java.io.ObjectInputStream) throws java.io.IOException,java.lang.ClassNotFoundException
public boolean java.io.File.delete()
public boolean java.io.File.canExecute()
public boolean java.io.File.canRead()
public boolean java.io.File.canWrite()
private static boolean java.io.File.checkAndCreate(java.lang.String,java.lang.SecurityManager) throws java.io.IOException
public boolean java.io.File.createNewFile() throws java.io.IOException
public static java.io.File java.io.File.createTempFile(java.lang.String,java.lang.String,java.io.File) throws java.io.IOException
public static java.io.File java.io.File.createTempFile(java.lang.String,java.lang.String) throws java.io.IOException
..........(还有很多,我就不贴了。自己可以试试)
而不是在编译时就报告。
它的作用是为你提供了更加灵活的代码编写,就如楼上们说的解耦。当然同时也大大增加了代码的复杂度和出错的几率。
所以一般只有你需要提供很抽象的功能时才会用到,比如框架程序,代表作spring。
一个经典的例子就是jdbc,Class XXX = Class.forName("XXX.driver");
反射机制的主要功能:
在运行时判断任意一个对象所属的类;
在运行时构造任意一个类的对象;
在运行时判断任意一个类所具有的成员变量和方法;
在运行时调用任意一个对象的方法;
生成动态代理。Java动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。struts开发网站中大量用到了反射机制。