java反射学习(1):反射的基本操作
一 用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):反射的基本操作相关推荐
- java反射学习(2):反射与代理模式
一 基本代理设计模式 代理模式核心思路,一个接口有两个子类,一个子类完成业务需求,另一个完成辅助功能 假设实现一个功能,张三吃饭 代码如下: 接口 PersonDao.java package com ...
- java反射 获取属性_Java反射学习-3 - 反射获取属性,方法,构造器
1 packagecn.tx.reflect;2 3 importjava.lang.reflect.Constructor;4 importjava.lang.reflect.Field;5 imp ...
- Java学习日记----反射
------- android培训.java培训.期待与您交流! ---------- 1 Class类 1.1 反射不是Java1.5的新特性,而是从1.2就有的特性,在以后学习到框架都要用到反 ...
- java反射 pdf_java反射学习笔记整理.pdf
java反射学习笔记整理.pdf 还剩 15页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: Java 反射笔记 ...
- java 反射api_Java学习笔记--反射API
反射API 1.反射API的介绍 通过反射API可以获取Java程序在运行时刻的内部结构.比如Java类中包含的构造方法.域和方法等元素,并可以与这些元素进行交换. 按照 一般地面向对象的设计思路,一 ...
- Java基础学习总结(75)——Java反射机制及应用场景
什么是Java反射机制? JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的以及动态调用对象的方法的功能称为 ...
- java基础学习:java中的反射
一.什么是java反射 什么是 java 的反射? 说到反射,写这篇文章时,我突然想到了人的"反省",反省是什么?吾一日三省吾身,一般就是反思自身,今天做了哪些对或错的事情. ja ...
- java 反射练习_JAVA反射的基础学习
反射 :reflection 程序的一种内省机制 程序可以在运行期间动态的创建对象,获取对象类型,调用对象行为 内省机制在java和.net语言中有,在早期的C,C++,delphi,vb这些语言都没 ...
- java反射判断是否是基本类型_Java反射学习
所谓反射,可以理解为在运行时期获取对象类型信息的操作.传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码.严格地说,反射 ...
最新文章
- JZOJ 1277. 最高的奶牛
- CSS 布局与“仓库管理”的关系
- oracle ref游标用法,[置顶] Oracle 参照游标(SYS_REFCURSOR)使用
- 【python 3.6】调用另一个文件的类的方法
- 7-11 名人堂与代金券 (25 分)
- Activity基础
- chart.js 饼图显示百分比_Excel制作华夫饼图,其实很简单
- php文章上一篇,thinkphp5实现文章上一篇,下一篇
- SQL索引及表的页的逻辑顺序与物理顺序
- iview tree 获取选中子节点的整条数据链
- React项目以及降级兼容IE低版本
- 计算机键盘的区域,刘坚强办公学《新手学五笔打字》1-1 键盘区域的划分
- svnserver 重新启动
- 高精度IP地址定位接口的使用场景
- 中国石油进口数据简单统计
- 计算机开始菜的mstsc命令,Win10一周年更新版系统CLSID(GUID)汇总
- 什么是迭代(迭代法)
- PWM电流源型逆变器
- iOS13系统升级 ------ windows下如何更新iOS的beta版本?
- linux查看日志的多种方法集合
热门文章
- 【Java网络编程(三)】TCP的使用——模拟用户登录
- 【Java网络编程(二)】UDP案例——在线咨询
- 【Android开发】我的第一个安卓程序
- PAT1061 判断题 (15 分)
- PAT1042 字符统计 (20 分)
- java 8 stream中的Spliterator简介
- 容器源码分析之ArrayList(二)
- zoj 3209 Dancing links/hust 1017
- CSS过渡属性transitions详细解读——Web前端系列学习笔记
- 【图示,简单明了】HttpServlet中getAttribute和getParameter的区别——【javaweb系列学习笔记】