JAVA高级特性反射和注解
2019-05-08 07:29:05来源:博客园 阅读 ()
反射:
34.3 KB
1 getSimpleName()获取类名 2 getName()获取完整的“包,类”名称; 3 Class 类的使用 4 无参构造实例化对象 5 public static void main(String[] args) throws ClassNotFoundException, InstantiationException, 6 IllegalAccessException { 7 //通过类路径获取类Class对象 8 Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person"); 9 //调用newInstance()方法, 调用无参构造创建类对象 10 Person person = (Person) clazz.newInstance(); 11 //操作对象 12 person.setAge(12); 13 person.setName("张三"); 14 System.out.println(person); 15 } 16 有参构造实例化对象 17 public static void main(String[] args) throws ClassNotFoundException, 18 InstantiationException, IllegalAccessException, 19 IllegalArgumentException, InvocationTargetException { 20 //获取类的Class对象 21 Class<?> clazz =clazz.forName("com.project.enmutestdemo.fanshe.Person"); 22 //通过参数类型获取类的具体的某一个构造器 23 Constructor<?> c = clazz.getConstructor(String.class,int.class); 24 Person person = null; 25 // 传入实参, 通过构造器创建类对象 26 person = (Person) c.newInstance("张三", 20); 27 System.out.println(person);
1 getmodified 获取访问修饰符(public private 。。。) 2 取得类中属性 3 public static void main(String[] args) throws ClassNotFoundException { 4 Class<?> clazz = null; 5 //通过类路径获取类Class对象 6 clazz = Class.forName("com.project.enmutestdemo.fanshe.Person"); 7 //取得本类的属性 8 Field[] f = clazz.getDeclaredFields(); 9 //循环操作类的属性 10 for(int i = 0; i < f.length; i++){ 11 //取得该属性的类型 12 Class<?> t = f[i].getType(); 13 //取得该属性的修饰符数字 14 int mo = f[i].getModifiers(); 15 //通过修饰符数字取得属性的修饰符 16 String priv = Modifier.toString(mo); 17 System.out.print("本类属性: "); 18 System.out.print(“ 修饰符为: ”+priv+" "); 19 System.out.print(“类型为: ”+t.getName()+" "); 20 System.out.print(“名称为: ”+f[i].getName()+”\n”); 21 22 23 通过反射 操作属性 24 //获取类的Class对象 25 Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person"); 26 //调用无参构造器创建类对象 27 Object obj = clazz.newInstance(); 28 //通过属性名称获取属性的Field对象 29 Field nameFiled = clazz.getDeclaredField("name"); 30 //通过set方法对对象的属性进行赋值 31 nameFiled.set(obj, "张三"); 32 //通过get方法获取对象的属性值 33 System.out.println(" 姓名: "+nameFiled.get(obj)); 34 35 操作类中的属性 36 //获取类的Class对象 37 Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person"); 38 //调用无参构造器创建类对象 39 Person obj = clazz.newInstance(); 40 //通过属性名称获取属性的Field对象 41 Field nameFiled = clazz.getDeclaredField("name"); 42 //设置该属性的访问权限为可访问 43 nameFiled.setAccessible(true); 44 //通过set方法对对象的属性进行赋值 45 nameFiled.set(obj, "张三"); 46 //通过get方法获取对象的属性值 47 System.out.println(" 姓名: "+nameFiled.get(obj));
1 取得类的全部方法 2 //获取类的Class对象 3 Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person"); 4 Method[] method = clazz.getDeclaredMethods();//获取本类所有方法 5 for(int i = 0; i < method.length;i++){//循环操作方法 6 Class<?> r = method[i].getReturnType();//获取方法的返回值类型 7 Class<?> p[] =method[i].getParameterTypes();//获取方法的参数类型 8 int xx = method[i].getModifiers();//获取方法的修饰符数字 9 System.out.print(Modifier.toString(xx)+" ");//获取修饰符 10 System.out.print(r.getSimpleName()+" ");//获取方法返回值类型名称; 11 System.out.print(method[i].getName());//获取方法名称 12 System.out.print("("); 13 for(int x = 0; x < p.length;x++){//循环操作参数类型 14 System.out.print(p[x].getSimpleName() +" "+ "arg"+x);//输出参数 15 if(x < p.length -1){//判断是否输出“ , ” 16 System.out.print(",");//输出“ , ” 17 } 18 }S 19 ystem.out.println();//换行 20 } 21 调用类中的方法 22 public static void main(String[] args) throws ClassNotFoundException, 23 NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, 24 InvocationTargetException, InstantiationException { 25 //获取类的Class对象 26 Class<?> clazz = Class.forName("com.project.enmutestdemo.fanshe.Person"); 27 //通过方法名称获取无参Method对象 28 Method me = clazz.getMethod("speak"); 29 //调用无参构造器创建类对象 30 Object obj = clazz.newInstance() 31 me.invoke(obj); 32 33
注解:
原文链接:https://www.cnblogs.com/thelovelybugfly/p/10822065.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash