一 用class.forname反射获取对象(必须要一个无参的构造函数)

package com.learing._01;class Student{public Student(){System.out.println("Student类的构造方法");}@Overridepublic String toString(){return "Student类的toString()方法";}
}public class ReflectDemo {public static void main(String args[]) throws Exception{Class<?> cls = Class.forName("com.learing._01.Student");Object obj = cls.newInstance();}}

输出结果

二 获取构造方法

package com.learing._01;import java.lang.reflect.Constructor;public class ReflectStringDemo {public static void main(String args[]) throws Exception{Class<?> cls = Class.forName("java.lang.String");Constructor<?> cons[] = cls.getConstructors();for(int i = 0 ; i < cons.length ; i++){System.out.println(cons[i]);}}}

输出结果

三 通过构造方法实例化对象

package com.learing._01;import java.lang.reflect.Constructor;class Student {private String name;private Integer age;public Student(String name, Integer age) {this.name = name;this.age = age;}public Student() {}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}}public class ReflectDemo {public static void main(String args[]) throws Exception {Class<?> cls = Class.forName("com.learing._01.Student");Constructor<?> cons = cls.getConstructor(String.class,Integer.class);Object obj = cons.newInstance("SMITH",20);System.out.println(obj.toString());}}

输出结果

四 通过反射获取方法

此功能用于IDE开发工具,当输入一“.”时候,会出来该类有哪些方法

package com.learing._01;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;interface Message{public void get();
}class Student implements Message{@Overridepublic void get() {}public void print(String name,int age){}public void fun() throws Exception{}}public class ReflectDemo {public static void main(String args[]) throws Exception {Class<?> cls = Class.forName("com.learing._01.Student");Method met[] = cls.getMethods();for(int i = 0 ; i < met.length ; i++){//以下 partA的输出和partB一样// partA
//          System.out.println(met[i]);// partB startSystem.out.print(Modifier.toString(met[i].getModifiers())+" ");//得到修饰符 public final nativeSystem.out.print(met[i].getReturnType().getSimpleName()+" ");//得到返回类型  voidSystem.out.print(met[i].getName()+"("); // 得到方法名 get,printClass<?> params[] = met[i].getParameterTypes(); //得到方法的参数类型if(params!=null&¶ms.length > 0 ){for(int j = 0 ; j < params.length ; j++){System.out.print(params[j].getSimpleName()+""); //取参数if(j<params.length-1){System.out.print(" , ");}}}System.out.print(") ");Class<?> exceps[] =  met[i].getExceptionTypes(); //获取异常if( exceps!=null && exceps.length>0 ){System.out.print(" throws ");for(int j = 0 ; j < exceps.length ; j++){System.out.print(exceps[j].getSimpleName());if(j < exceps.length -1){System.out.print(", ");}}}System.out.println();// partB end}}}

输出结果

五 反射调用方法

package com.learing._01;import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;class Student{private String name;public void setName(String name){this.name = name;}public String getName(){return name;}
}public class ReflectDemo {public static void main(String args[]) throws Exception{Class<?> cls = Class.forName("com.learing._01.Student");Object obj = cls.newInstance(); //实例化对象Method setNameMethod = cls.getMethod("setName", String.class);Method getNameMethod = cls.getMethod("getName");setNameMethod.invoke(obj, "SMITH"); // 对象.setName("SMITH");System.out.println(getNameMethod.invoke(obj));}}

输出结果

六 属性操作

package com.learing._01;import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;interface Message{public static final String INFO = "hello world";
}class Person{private String name;private Integer age;
}class Student extends Person implements Message{private String school;private Double price;}public class ReflectDemo {public static void main(String args[]) throws Exception{Class<?> cls = Class.forName("com.learing._01.Student");{ //取得继承而来的全部属性System.out.println();Field fields[] = cls.getFields();System.out.println("继承而来的属性");for(int i = 0 ; i <  fields.length ; i++){System.out.println(fields[i]);}}{//取得本类定义的全部属性System.out.println();Field fields[] = cls.getDeclaredFields();System.out.println("本类定义的全部属性");for(int i = 0 ; i <  fields.length ; i++){System.out.println(fields[i]);}}{//取得父类属性System.out.println();Field fields[] = cls.getSuperclass().getDeclaredFields(); System.out.println("父类属性定义的全部属性");for(int i = 0 ; i <  fields.length ; i++){System.out.println(fields[i]);}}{  //操作属性System.out.println();System.out.println("属性的操作");Object obj = cls.newInstance();Field schoolField = cls.getDeclaredField("school");schoolField.setAccessible(true);//以为school属性为private ,setAccessible可以操作该属性schoolField.set(obj,"清华大学");System.out.println(schoolField.get(obj));}}}

输出结果

java反射学习(1):反射的基本操作相关推荐

  1. java反射学习(2):反射与代理模式

    一 基本代理设计模式 代理模式核心思路,一个接口有两个子类,一个子类完成业务需求,另一个完成辅助功能 假设实现一个功能,张三吃饭 代码如下: 接口 PersonDao.java package com ...

  2. java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器

    1 packagecn.tx.reflect;2 3 importjava.lang.reflect.Constructor;4 importjava.lang.reflect.Field;5 imp ...

  3. Java学习日记----反射

    ------- android培训.java培训.期待与您交流! ---------- 1 Class类   1.1 反射不是Java1.5的新特性,而是从1.2就有的特性,在以后学习到框架都要用到反 ...

  4. java反射 pdf_java反射学习笔记整理.pdf

    java反射学习笔记整理.pdf 还剩 15页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 反射笔记 ...

  5. java 反射api_Java学习笔记--反射API

    反射API 1.反射API的介绍 通过反射API可以获取Java程序在运行时刻的内部结构.比如Java类中包含的构造方法.域和方法等元素,并可以与这些元素进行交换. 按照 一般地面向对象的设计思路,一 ...

  6. Java基础学习总结(75)——Java反射机制及应用场景

    什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...

  7. java基础学习:java中的反射

    一.什么是java反射 什么是 java 的反射? 说到反射,写这篇文章时,我突然想到了人的"反省",反省是什么?吾一日三省吾身,一般就是反思自身,今天做了哪些对或错的事情. ja ...

  8. java 反射练习_JAVA反射的基础学习

    反射 :reflection 程序的一种内省机制 程序可以在运行期间动态的创建对象,获取对象类型,调用对象行为 内省机制在java和.net语言中有,在早期的C,C++,delphi,vb这些语言都没 ...

  9. java反射判断是否是基本类型_Java反射学习

    所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码.严格地说,反射 ...

最新文章

  1. JZOJ 1277. 最高的奶牛
  2. CSS 布局与“仓库管理”的关系
  3. oracle ref游标用法,[置顶] Oracle 参照游标(SYS_REFCURSOR)使用
  4. 【python 3.6】调用另一个文件的类的方法
  5. 7-11 名人堂与代金券 (25 分)
  6. Activity基础
  7. chart.js 饼图显示百分比_Excel制作华夫饼图,其实很简单
  8. php文章上一篇,thinkphp5实现文章上一篇,下一篇
  9. SQL索引及表的页的逻辑顺序与物理顺序
  10. iview tree 获取选中子节点的整条数据链
  11. React项目以及降级兼容IE低版本
  12. 计算机键盘的区域,刘坚强办公学《新手学五笔打字》1-1 键盘区域的划分
  13. svnserver 重新启动
  14. 高精度IP地址定位接口的使用场景
  15. 中国石油进口数据简单统计
  16. 计算机开始菜的mstsc命令,Win10一周年更新版系统CLSID(GUID)汇总
  17. 什么是迭代(迭代法)
  18. PWM电流源型逆变器
  19. iOS13系统升级 ------ windows下如何更新iOS的beta版本?
  20. linux查看日志的多种方法集合

热门文章

  1. 【Java网络编程(三)】TCP的使用——模拟用户登录
  2. 【Java网络编程(二)】UDP案例——在线咨询
  3. 【Android开发】我的第一个安卓程序
  4. PAT1061 判断题 (15 分)
  5. PAT1042 字符统计 (20 分)
  6. java 8 stream中的Spliterator简介
  7. 容器源码分析之ArrayList(二)
  8. zoj 3209 Dancing links/hust 1017
  9. CSS过渡属性transitions详细解读——Web前端系列学习笔记
  10. 【图示,简单明了】HttpServlet中getAttribute和getParameter的区别——【javaweb系列学习笔记】