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. 杭电acm 1040题

    本题是一个非常简单的升序排序题目,但那时在做的时候把题目看错了,导致花费了大量的时间来检查为什么WA,最后发现题目看错了..... /********************************* ...

  2. Hadoop Reducer个数设置

    在默认情况下,一个MapReduce Job如果不设置Reducer的个数,那么Reducer的个数为1.具体,可以通过JobConf.setNumReduceTasks(int numOfReduc ...

  3. TMF大数据分析指南 Unleashing Business Value in Big Data(二)

    前言 此文节选自TMF Big Data Analytics Guidebook. TMF文档版权信息  Copyright © TeleManagement Forum 2013. All Righ ...

  4. 安全测试 + 渗透测试 Xmind 要点梳理

    从事测试工作多年,一直对安全测试充满神秘感.买了本书,闲来无事时翻看了解.发现书的开头提供的Xmind脑图挺有参考价值,所以做了次“搬运工”,提供给想接触了解安全测试/渗透测试的小伙伴. 安全测试要点 ...

  5. [CentOS7] 常用工具 之 防暴力破解工具 Fail2ban

    防止暴力破解密码: Fail2ban ==> 用于自动ban掉ip 先用yum search fail2ban看看是否yum源含有fail2ban这个package,若没有的话请yum inst ...

  6. angular1 表单验证demo

    这是一个angular1 验证表单的小栗子: 先看代码: <div ng-controller="myController"> <form name=" ...

  7. 反射实现增删改查(DAO层)——查询数据

    先贴出代码,后续补充自己的思路.配置文件.使用方式: /** * * 数据查询 * */ @Override public List<?> queryObject(List<Map& ...

  8. 浮点数与快速log2

    请先于浮点数的文章:http://blog.jobbole.com/86371/ 先贴一张关于float和double的图: float: double: 快速log2长这样: int flog2(f ...

  9. RRTI的概念以及Class对象作用

    深入理解Class对象 RRTI的概念以及Class对象作用 认识Class对象之前,先来了解一个概念,RTTI(Run-Time Type Identification)运行时类型识别,对于这个词一 ...

  10. Hadoop中解除 "Name node is in safe mode"的方法

    运行hadoop程序时,有时候会报以下错误,说明Hadoop的NameNode处在安全模式下. 原因分析: 在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文 ...