10、Class类的构造器:Constrctor、Class类的属性:field、Class类的方法:Method
来源:互联网 发布:c语言switch语句应用 编辑:程序博客网 时间:2024/05/08 04:37
Constrctor
得到某个类所有的构造方法:
例子
Constructor[] constructor = Class.forName("java.lang.String").getConstructor();
得到某一个构造方法:
例子
Constructor constructor = Class.forName("java.lang.String").getConstructor(StringBuffer.class);
创建实例对象:
通常方式:String str = new String(new StringBuffer("abc"));
放射方式:String str = (String)constructor.forName("java.lang.String").newInstance(new StringBuffer("abc"));
Class.newInstance()方法:
例子
String obj =(String)Class.forName("java.lang.String").newInstance();
该方法内部先得到默认的构造方法,然后用该构造方法创建实例对象。
改方法内部的具体代码是怎么样写的呢?用到了缓存机制来保存默认构造方法的实例对象。
package ConstructorPackage;import java.lang.reflect.Constructor;public class Test01 {public static void main(String[] args)throws Exception{try {Constructor con = String.class.getConstructor(StringBuffer.class);String str = (String)con.newInstance(new StringBuffer("asdad"));System.out.println(str.charAt(2));}catch (NoSuchMethodException e){e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}}}
field
package FieldPackage;import java.lang.reflect.Field;public class Demo2 {public static void main(String[] args) throws Exception{ReflexPoint pt1 = new ReflexPoint(3,4);Field fieldY = pt1.getClass().getField("y");System.out.println(fieldY.get(pt1));//getDeclaredField 只要是类里面有声明 不管是否是私有 ,一律获取到Field fieldX = pt1.getClass().getDeclaredField("x");//暴力反射 fieldX.setAccessible(true);System.out.println(fieldX.get(pt1));}}class ReflexPoint{private int x; public int y; public String str1; public String str2; ReflexPoint(int x, int y) { this.x = x; this.y = y; } ReflexPoint(String str1, String str2) { this.str1 = str1; this.str2 = str2; } public String toString() { return str1+" "+str2; } }
Method
1、获取类的方法的数组:
Method[] methods2 = clazz.getDeclaredMethods();
2、获取类指定的方法:
Method method = clazz.getMethod("setName", String.class);
注释:
setName:方法名
String.class:方法的参数类型(使用class来描述)的列表
3、通过Method对象执行方法:
public Object invoke(Object obj,Object... args)
注释:
obj:执行哪个对象的方法
args:执行方法时需要传入的参数
Object obj =clazz.newInstance();
method.invoke(obj,"胡平燕",25);
package MethodPackage;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class ReflexTest2 {//成员方法的反射public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException{Class clazz = null;try{clazz = Class.forName("Person");} catch (ClassNotFoundException e) {e.printStackTrace();}//1、获取clazz中除private私有外的所有方法Method[] methods1 = clazz.getMethods();for(Method m : methods1){System.out.println("^^"+m.getName());}//2、获取clazz中当前类声明的所有方法 ,包括privateMethod[] methods2 = clazz.getDeclaredMethods();for(Method m : methods2){System.out.println("**"+m.getName());}//3、获取clazz类中指定的方法Method method = null;try {method = clazz.getMethod("setName", String.class);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}System.out.println("++"+method.getName());try {method = clazz.getMethod("setName", String.class,int.class);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}System.out.println("++"+method.getName());//4、执行方法Object obj = null;try {obj = clazz.newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}method.invoke(obj,"胡平燕",25);}}
- 10、Class类的构造器:Constrctor、Class类的属性:field、Class类的方法:Method
- 黑马程序员---反射,Class类,Method类,Field类,数组参数的成员方法
- Class类的isAssignableFrom(Class cls)方法
- 黑马程序员-Class类, Constructor类,Field类, Method类的小总结
- JavaSE 第六十二讲: Class类、Method类及Field类的使用方式深度剖析
- 反射(二)Class类,Method类,Field类,反射获得带参数的对象
- Java学习--(四)新的数据类型:类(class);field,method
- (10) 反射(基石class类、Constructor类、Field类、Method类、数组的反射、HashCode的分析)
- class下包含的内容,属性、方法、构造方法和块和类
- 类方法(class method)
- Class类的常用方法
- Class类的asSubClass()方法
- Class类的getClassLoader()方法
- Class类的getResource()方法
- Class类的常用方法
- Python Class的实例属性/类属性
- 我所理解的【实例.方法()/instance.method()/类.方法(实例)/class.method(instance)】
- 反射机制:Class,Field,Method,Construts,Array的总结
- jpg图片攻击测试代码
- C/S与B/S之初识
- markdown使用技巧(持续更新)
- NUOJ 284 坦克大战【BFS】
- ERTHHGFUKTUJ-RT-Y----Y-YU-RT6-87--TOK-RT---ROTURY
- 10、Class类的构造器:Constrctor、Class类的属性:field、Class类的方法:Method
- 【转自Oracle ACS--惜总】一个重设Oracle 数据文件大小的sql语句
- 力所能及之SSH环境搭建
- java 抽象类
- java内部类
- 786345789TYIERTGERYUREUYERTIU
- 黑马程序员——java-几个常用的类(Object,Scanner,String,StringBuffer/StringBuilder)
- div块圆角加阴影
- Oracle两种临时表的创建与使用详解