Student类

 package com.test.wang;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList; import com.test.wang.student.Student;
public class fanshe {
public static void main(String[] args)throws Exception { //1.加载class对象
Class stuClass= Class.forName("com.test.wang.student.Student"); //2.获取class中的方法
//2.1.获取成员方法
//2.1.1.获取Student类中的 testStudent共有方法 一个参数 返回类型 无
Method m = stuClass.getMethod("testStudent", String.class);
//2.1.2.获取Student类中的 intStudent共有方法 一个参数 返回类型 String
Method intm = stuClass.getMethod("intStudent", String.class);
//2.1.3.获取Student类中的 liangStudent共有方法 二个参数 返回类型 String
Method liangm = stuClass.getDeclaredMethod("liangStudent", String.class,int.class);
//2.1.4.获取Student类中的 liangStudent私有方法 二个参数 返回类型 String
Method privatem = stuClass.getDeclaredMethod("privateStudent", String.class,int.class);
//2.2.获取构造方法
//2.2.1.获取共有的、无参数的构造方法
Constructor con = stuClass.getConstructor(null);
//2.2.2.获取构造方法并调用
Constructor dcon = stuClass.getDeclaredConstructor(String.class);
//2.3.获取字段信息
//2.3.1.获取共有字段并调用
Field publicFiled = stuClass.getField("name");
//2.3.2.获取字段并调用
Field privateFiled = stuClass.getDeclaredField("phoneNum");
//2.4.反射main方法
//2.4.1.main方法的反射
Method main = stuClass.getMethod("main", String[].class); //3.获取一个对象********等同于****Student obj = new Student();
System.out.println("\n******获取一个对象******");
Object obj = stuClass.getConstructor().newInstance(); //4.调用方法 有返回类型 在这里实际都是返回Object
System.out.println("\n******调用共有、无参数构造方法******");
m.invoke(obj,"wang"); String num =intm.invoke(obj,"wang").toString();
String stu = liangm.invoke(obj, "wang",23).toString(); privatem.setAccessible(true);//暴力访问(忽略掉访问修饰符)
String privateStu = privatem.invoke(obj, "wang",23).toString(); System.out.println("\n******无参数构造方法的调用******");
con.newInstance(); System.out.println("\n******默认的构造方法有参数******");
dcon.setAccessible(true);
dcon.newInstance("wang"); publicFiled.set(obj, "天宇"); privateFiled.setAccessible(true);
privateFiled.set(obj, "155*******5"); Student wangstu = (Student)obj; System.out.println("\n******main方法******");
main.invoke(null, (Object)new String[]{"a","b","c"}); //返回结果
System.out.println("\n******成员方法一个参数******");
System.out.println(num);
System.out.println("\n******成员方法二个参数******");
System.out.println(stu);
System.out.println("\n******私有成员方法二个参数******");
System.out.println(privateStu);
System.out.println("\n******获取共有字段信息******");
System.out.println("publicFiled:"+wangstu.name);
System.out.println("\n******获取字段信息、私有的字段信息需要用方法写出来******");
System.out.println("privateFiled:"+wangstu.toString()); /*
* 通过反射越过泛型检查
*/
ArrayList<String> strList = new ArrayList<String>();
strList.add("aaa");
strList.add("bbb");
//strList.add(100);
//获取ArrayList的class对象,反向调用add()方法,添加数据
Class ListClass = strList.getClass();
//获取add()方法
Method ListClassMethod = ListClass.getMethod("add", Object.class);
//调用add()方法
ListClassMethod.invoke(strList, 100);
//遍历集合
for(Object o : strList){
System.out.println(o);
} }
}

  测试类

 package com.test.wang.student;

 import java.text.SimpleDateFormat;
import java.util.Date; public class Student {
/*
* 构造方法
*/
Student(String stu){
System.out.println("默认的构造方法stu="+stu);
}
/*
* 无参数构造方法
*/
public Student(){
System.out.println("调用共有、无参数构造方法执行了。。。");
} public void testStudent(String name){
System.out.println("调用共有、一个参数方法执行了。。。姓名:"+name);
} public String intStudent(String name){
int num = name.length();
return "姓名:"+name+" 名字长度:"+num;
} public String liangStudent(String name,int age){
return "姓名:"+name+" 年龄:"+age;
} private String privateStudent(String name,int age){
return "姓名:"+name+" 年龄:"+age;
} public String name; private String phoneNum; /**
* @return the name
*/
public String getName() {
return name;
}
/**
* @return the phoneNum
*/
public String getPhoneNum() {
return phoneNum;
}
@Override
public String toString(){
return "Student [name:"+name+",phoneNum:"+phoneNum+"]";
}
public static void main(String[] args){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
System.out.println("main方法执行了。。。");
System.out.println("当前时间是:"+df.format(new Date()));
}
}

 控制台输出

******获取一个对象******
调用共有、无参数构造方法执行了。。。

******调用共有、无参数构造方法******
调用共有、一个参数方法执行了。。。姓名:wang

******无参数构造方法的调用******
调用共有、无参数构造方法执行了。。。

******默认的构造方法有参数******
默认的构造方法stu=wang

******main方法******
main方法执行了。。。
当前时间是:2018-07-31 15:12:18

******成员方法一个参数******
姓名:wang 名字长度:4

******成员方法二个参数******
姓名:wang 年龄:23

******私有成员方法二个参数******
姓名:wang 年龄:23

******获取共有字段信息******
publicFiled:天宇

******获取字段信息、私有的字段信息需要用方法写出来******
privateFiled:Student [name:天宇,phoneNum:155*******5]
aaa
bbb
100

Java基础反射-调用类的更多相关文章

  1. java利用反射调用类的某个方法

    java利用反射机制 可以动态调用某个类的某个方法,在 扩展系统功能或提供对外接口时经常用的到. 代码如下: 打印类Print.java package com.test.reflct; /** * ...

  2. 利用java反射调用类的的私有方法--转

    原文:http://blog.csdn.net/woshinia/article/details/11766567 1,今天和一位朋友谈到父类私有方法的调用问题,本来以为利用反射很轻松就可以实现,因为 ...

  3. Java基础-反射(reflect)技术详解

    Java基础-反射(reflect)技术详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.类加载器 1>.JVM 类加载机制  如下图所示,JVM类加载机制分为五个部分 ...

  4. java利用反射获取类的属性及类型

    java利用反射获取类的属性及类型. import java.lang.reflect.Field; import java.math.BigDecimal; import java.util.Map ...

  5. Java基础-DButils工具类(QueryRunner)详解

    Java基础-DButils工具类(QueryRunner)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC ...

  6. C#如何通过反射调用类下的方法

    首先模拟一个mvc的项目,创建一个业务类(HomeService),在类下创建3个方法 public class HomeService { /// <summary> /// 无参方法 ...

  7. C# 利用反射调用类下的方法

    namespace TestReflection { public partial class Form1 : Form { public Form1() { InitializeComponent( ...

  8. Java基础之File类的使用

    Java基础之File类的使用 1.File类的构造方法和常用方法 2.对File中listFile(FileNameFilter name)学习 3.与File文件类相关的实现 File类的构造方法 ...

  9. C#通过反射调用类及方法

    反射有个典型的应用,就是菜单的动态加载,原理就是通过反射调用某个窗体(类).下面演示一下通过反射调用类及方法: 1.新建一个类,命名为:ReflectionHelper,代码如下: #region 创 ...

随机推荐

  1. (Python编程)Pickle对象

    Programming Python, 3rd Edition 翻译 最新版本见:http://wiki.woodpecker.org.cn/moin/PP3eD 19.4. Pickled Obje ...

  2. UI线程中非安全操作与安全操作

    ------------------siwuxie095                             工程名:SwingUIThreadSafeTest 包名:com.siwuxie095 ...

  3. c#入门学习-Action和Func的使用

    我的理解就是:Action和Func就是官方声明好的代理using System; namespace funcActionDemo{    class MainClass    {        p ...

  4. 为什么Java的hash表的长度一直是2的指数次幂?为什么这个(hash&(h-1)=hash%h)位运算公式等价于取余运算?

    1.什么是hash表? 答:简单回答散列表,在hash结构散列(分散)存放的一种数据集结构. 2.如何散列排布,如何均匀排布? 答:取余运算 3.Java中如何实现? 答:hash&(h-1) ...

  5. python之02数据类型学习-作业练习2

    引用博客地址:http://www.cnblogs.com/yuanchenqi/articles/5782764.html 作业描述: 省 市 县的三层数据通过字典 元祖 列表 保存起来执行程序后 ...

  6. 大融合——LCT维护子树信息

    题目 [题目描述] 小强要在 $N$ 个孤立的星球上建立起一套通信系统.这套通信系统就是连接 $N$ 个点的一个树.这个树的边是一条一条添加上去的.在某个时刻,一条边的负载就是它所在的当前能够联通的树 ...

  7. [Swift]Scanner字符串扫描类

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. 洛谷P4116 Qtree3

    题目描述 给出\(N\)个点的一棵树(\(N-1\)条边),节点有白有黑,初始全为白 有两种操作: \(0\) \(i\) : 改变某点的颜色(原来是黑的变白,原来是白的变黑) \(1\) \(v\) ...

  9. 谈谈python修饰器

    前言 对python的修饰器的理解一直停留在"使用修饰器把函数注册为事件的处理程序"的层次,也是一知半解:这样拖着不是办法,索性今天好好整理一下关于python修饰器的概念及用法. ...

  10. 7、kvm迁移操作

    虚拟机迁移要确保虚拟机是关机状态. virsh shutdown privi-server virsh dumpxml privi-server > /etc/libvirt/qemu/priv ...