您的位置:首页 > 其它

11.1 创建动态类及其查看其方法列表信息

2011-01-29 12:08 513 查看
p { margin-bottom: 0.21cm; }a:link { }
动态代理类字节码的得到方法
:

Class
clazzProxy1 = Proxy.

getProxyClass

(Collection.

class

.getClassLoader(),
Collection.

class

);

动态代理类用Proxy
类来进行定义

Proxy
的构造方法Proxy0(java.lang.reflect.InvocationHandler)

getProxyClass

函数

getProxyClass
(ClassLoader
loader,
Class
<?>... interfaces)
ClassLoader
一般和接口的类加载器相同 即
接口.class.getClassLoader()

StringBuffer



StringBuilder


的区别
:

在应用上基本一样 就是动态的改变一些字符串的字符
在单线程的情况下 使用StringBuilder
的效率会更高
在多线程的情况下 使用StringBuffer
的线程会更高一点
StringBuffer
会考虑线程安全的问题
但如果是单线程 就不需要考虑线程安全问题
StringBuffer
不管什么时候就会考虑线程安全问题

定义一个代理对象
并打印出代理对象的构造方法和所有函数
通过此例子证明


代理类实现了被传入的接口的所有方法
包括被传入的接口所实现的接口的所有接口


public

static

void

main(String[] args) {

Class
clazzProxy1 = Proxy.

getProxyClass

(Collection.

class

.getClassLoader(),
Collection.

class

);

System.

out

.println(clazzProxy1.getName());

System.

out

.println(

"

得到
Proxy

的所有构造方法
并且打印出来
"

);

Constructor[]
constructors = clazzProxy1.getConstructors();

for

(Constructor constructor : constructors) {

String
name = constructor.getName();

StringBuilder
sBuilder =

new

StringBuilder(name);

sBuilder.append(

'('

);

Class[]
clazzParams = constructor.getParameterTypes();

for

(Class clazzParam : clazzParams) {

sBuilder.append(clazzParam.getName()).append(

','

);

}

if

(clazzParams !=

null

&& clazzParams.

length

!= 0) {

sBuilder.deleteCharAt(sBuilder.length()
- 1);

}

sBuilder.append(

')'

);

System.

out

.println(sBuilder.toString());

}

System.

out

.println(

"

得到代理类的所有方法,并打印出来
得出的结论是 代理类实现了被传入的接口的所有方法
包括被传入的接口所实现的接口的所有接口
"

);

Method[]
methods = clazzProxy1.getMethods();

for

(Method
method : methods){

String
name = method.getName();

StringBuilder
sBuilder =

new

StringBuilder(name);

sBuilder.append(

'('

);

Class[]
clazzParams = method.getParameterTypes();

for

(Class
clazzParam : clazzParams){

sBuilder.append(clazzParam.getName()).append(

','

);

}

if

(clazzParams
!=

null

&& clazzParams.

length

!= 0){

sBuilder.deleteCharAt(sBuilder.length()-1);

}

sBuilder.append(

')'

);

System.

out

.println(sBuilder.toString());

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: