Class<?> 方法和构造
来源:互联网 发布:python ftp 传输模式 编辑:程序博客网 时间:2024/06/04 14:44
代码:
public class App {
private String id;
private String username;
private App() {
}
private App(String id, String username) {
this.id = id;
this.username = username;
}
public String getHi() {
return "Hi";
}
@SuppressWarnings("unused")
private String getAppHi(String app) {
return "AppHi";
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
测试类:
public static void main(String[] args) throws Exception {
Class<?> clazz = App.class;
/* Class newInstance 方法获取对象,
* 调用的只能是无参构造器,并且构造方法必须是public类型
*/
App app1 = (App) clazz.newInstance();
System.out.println("app1"+app1);
/* Class getDeclaredConstructors() 获取的是所有的构造器(包括private等所有的),
* Class getConstructors() 获取的是所以构造器(public类型)
* 调用的只能是无参构造器,并且构造方法必须是public类型
*/
Constructor[] cons = clazz.getConstructors();
for(Constructor C:cons){
System.out.println(" C :"+C);
}
/* Class getDeclaredConstructors() 获取的是所有的构造器(包括private等所有的),
* Constructor setAccessible(true) 可以关闭权限安全检查,
* 跳过private 权限,来创建对象,
*/
Constructor<?>[] cons2 = clazz.getDeclaredConstructors();
cons2[1].setAccessible(true);
App app0 = (App) cons2[1].newInstance();
System.out.println("app0: " + cons2[1]);
/* Class getDeclaredConstructor(Class[]{...}) 获取的是所有的构造器(包括private等所有的),
* Constructor setAccessible(true) 可以关闭权限安全检查,
* 跳过private 安全检查,来创建对象,
*/
Constructor<?> con4 = clazz.getDeclaredConstructor(new Class[] {String.class,String.class});
con4.setAccessible(true);
App app4 = (App)con4.newInstance(new Object[]{"23456","Zxx"});
System.out.println("app4 :" + app4 );
System.out.println("Superclass():" + clazz.getSuperclass() );
System.out.println(" SimpleName :" + clazz.getSimpleName() );
/*
* Method获取的是所有的构造器(包括private等所有的),
* 反射获取指定的方法
* clazz.getMethod(name, parameterTypes) name :方法的名字 ,parameterTypes 参数的类型
*/
Constructor<?>[] cons5 = clazz.getDeclaredConstructors();
cons5[0].setAccessible(true);
App app5 = (App) cons[0].newInstance();
//System.out.println("app5: " + cons5[0]);
Method method = clazz.getDeclaredMethod("getAppHi", String.class);
method.setAccessible(true);
String result = (String) method.invoke(app0, "app");
System.out.println(" result : " + result);
/*
* 总结: Class<?> 的 方法和构造器和属性,带Declared 就是包含private
* 获取所有的方法和构造器和属性(包括private的 )
* getDeclaredConstructors()
* getDeclaredMethods()
* getDeclaredFields()
*
* 获取声明中指定的方法和构造器和属性(包含private)
* getDeclaredConstructors(parameterTypes)
* getDeclaredMethods(name, parameterTypes)
* getDeclaredFields(name)
*
* 获取所有的方法和构造器和属性(只含有public的 )
* getConstructors()
* getMethods()
* getFields()
*
* 获取声明中指定的方法和构造器和属性(只含有public的)
* getConstructors(parameterTypes)
* getMethods(name, parameterTypes)
* getFields(name)
*
*/
}
- Class<?> 方法和构造
- 代理:JVM自动生成.class文件 等到.class的构造函数和成员方法
- class下包含的内容,属性、方法、构造方法和块和类
- 构造方法和方法
- 构造方法和方法
- Class.forName java.lang.reflect.Constructor反射调用有参构造函数和无参构造函数的方法
- Java反射---Class对象,获得类的方法、成员变量和构造函数信息
- java反射(3)获取Class对象属性方法和构造器
- 构造方法和方法重载
- 构造方法和方法重载
- OC中的Class类型和class方法
- JAVA的构造器和构造方法
- JAVA的构造器和构造方法
- java反射之Class类、构造器、方法、字段、数组
- 黑马程序员-- ID init(构造方法) Class NSLog description SEL
- Class.forName加载自定义类(无参数构造方法)
- Class.forName加载自定义类(带参数构造方法)
- scala学习-Scala class的构造方法与继承
- android精选源码,知乎阅读瀑布流loading弹窗扫描二维码简洁的MVP
- Linux 环境下的抓包工具
- 紫书第六章-----数据结构基础(数组模拟链表)
- 聚类
- OpenGL glm库的投影矩阵公式 glm::perspective
- Class<?> 方法和构造
- Fragment切换(show() and hide())
- qrcode(二)
- thread_info
- Floyd算法(任意两点间的最短路径)
- uboot移植(一)
- 类的初始化顺序
- 单例模式
- okhttp-utils使用