Java反射机制 详解 基本功
一般而言,开发者社群说到动态语言,大致认同的一个定义是:“程序运行时,运行改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,perl,phthon,ruby是动态语言,C++,JAVA,C#不是动态语言。
在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法? 答案是肯定的,这种动态获取类的信息以及动态调用对象的方法的功能来自于Java语言的反射(Reflection)机制。
Java反射机制主要提供了以下功能:
在运行时判断任意一个对象所属的类。
在运行时构造任意一个类的对象.
在运行时判断任意一个类所具有的成员变量和方法。
在运行时调用任意一个对象的方法。
reflection是Java被视为动态(或准动态)语言的一个关键性质,这个机制运行程序在运行时透过reflection apis取得任意一个已知名称的class的
内部信息,包括其modifiers(诸如public,static等等),superclass(例如Object),实现之Interface(例如serializable),也包括fields和methods的所有信息,并可于运行时改变fields内容或调用methods。
在JDK中,主要由以下类来实现Java反射机制,这些类都位于Java.lang.reflect包中
Class类:代表一个类
Field类: 代表类的成员变量(成员变量也称为类的属性)。
Method类: 代表类的方法。
Constructor类: 代表类都构造方法。
Array类: 提供了动态创建数组,以及访问数组的元素的静态方法
例程DumpMethods类演示了ReflectionAPI的基本作用,它读取命令行参数指定的类名,然后打印这个类所具有的方法信息。
public static void main(String args[]){
Class<?> classType=Class.forName(args[0]);
Method methods[]=classType.getDeclaredMethods();
for(int i=0; i<method.length;i++)
{
System.out.println(methods[i].toString());
}
}
例程ReflectTester类进一步演示了ReflectionAPI的基本使用方法。 ReflectTester类有一个copy(Object object)方法,这个方法能够创建一个和参数object同样类型的对象,然后把object对象中的所有属性拷贝到新建的对象中,并将它返回
这个例子只能复制简单的JavaBean,假定JavaBea
相关文档:
好多大型的企业项目都要用到高级JDBC连接数据库配置高级JDBC实例如下:
第一:配置Tomcat下的conf文件夹下的context.xml文件
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Resource name="jdbc/名称" auth="Container" type="javax.sql.DataSource"
maxActive="10" maxIdle=" ......
inkfish翻译,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish
)。本文是我学习JUEL同时,对原网站进行的简单的翻译,原网站地址:http://juel.sourceforge.net/guide/start.html
。
快速入门
JUEL
发行版包含下面一些jar文件:(来源:http://blog.csdn.net/inkfish)
1.juel-api-2.2 ......
自定义标签,标签处理器类:
PrivilegeTag.Java有权限的类设计:
package com.qizhi.tags.bean;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.servlet.jsp.tagext.TagSupport;
import com.qizhi.entity.Roleright;
import com.qizh ......
有两种实现方法,分别是继承Thread类与实现Runnable接口
用synchronized关键字修饰同步方法
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候 ......