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());
}
动态代理类字节码的得到方法
:
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());
}
相关文章推荐
- Java 创建动态类和查看方法列表信息的实例
- Java 代理类(一) 创建动态类及查看其方法列表信息
- 创建动态类及查看代理方法列表信息
- 创建动态类及查看其方法列表信息
- Java 创建动态类和查看方法列表信息
- 50_创建动态类及查看其方法列表信息
- 创建动态类Proxy,及查看其方法列表信息
- 通过JDK proxy创建动态类,并查看其方法列表信息
- 【Java进阶-Java动态代理与AOP】02 创建动态类及查看其方法列表信息
- Java代理学习-创建动态类及查看其方法列表信息
- 创建代理类及查看构造方法列表
- 创建代理类及查看普通方法方法列表
- Android Studio查看函数(方法)的形参列表,返回值,以及提示信息
- MFC中动态创建列表控件及其刷新重绘的方法
- 经验:查看oracle错误信息的两种方法
- VC++实现通过API来查看程序错误信息的方法
- UITableView 使用方法(一) - 创建简单的列表
- 查看索引信息与生成创建索引脚本代码(转自perfectaction)
- 编写一个手机类(Mobile),包括手机品牌(brand)、手机型号(type),方法包括显示手机信息,并编写测试类进行对象的创建
- 如何查看oracle的版本信息(两种方法)