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. 各种浏览器下的user-agent

    ie11Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko safariMozilla/5.0 (Macintos ...

  2. Hadoop 1.2.1 MapReduce 例子

    自学hadoop真的很困难,主要是hadoop版本太混乱了,各个版本之间兼容性并不算太好.更主要的是网上的很多MapReduce的Java例子不写import!!!只写类名!!!偏偏Hadoop中有很 ...

  3. HTML5新增的结构元素

    HTML5的结构 一:新增的主体结构元素 在HTML5中,为了使文档的结构更加清晰明确,追加了几个与页眉,页脚内容区块等文档结构相关联的结构元素. 1.1article元素 article元素代表文档 ...

  4. CodeForces 492E Vanya and Field (思维题)

    E. Vanya and Field time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. 阶段4-独挡一面\项目-基于视频压缩的实时监控系统\Sprint1-基于Epoll架构的采集端程序框架设计\第2课-基于Epoll的采集端程序框架设计

    回顾之前的整个程序架构 把epoll机制应用到这个架构上去 下面主要去分析我们的系统中有没有需要等待的事件,先看看采集子系统 在采集子系统当中,摄像头有数据,摄像头采集到图像数据可以作为一个等待事件. ...

  6. 3.Windows应急响应:蠕虫病毒

    0x00 前言 蠕虫病毒是一种十分古老的计算机病毒,它是一种自包含的程序(或是一套程序),通常通过网络途径传播, 每入侵到一台新的计算机,它就在这台计算机上复制自己,并自动执行它自身的程序.常见的蠕虫 ...

  7. 【转】Lucene不同版本中Field的Keyword、UnIndex,导致lucene 建立索引总是报错 急!!

    lucene 建立索引 总是报错 急!! http://zhidao.baidu.com/link?url=iaVs9JH4DfN6iwaWImt7VMJENWCWGGaWFGPjqhUw_jz7Fs ...

  8. 解决java.lang.IllegalArgumentException: No converter found for return value of type: class java.util.ArrayList问题

    在spring + springmvc + mybatis框架中,我们配置接口对外返回json格式,但是报如下错误: 24-Oct-2017 17:42:23.495 严重 [http-nio-808 ...

  9. NYOJ 喷水装置(二)

    题目转换成,每个水龙头在横坐标方向上覆盖的长度区间,转换后的问题就有点像会场安排问题了,然后接下来选的方案依据贪心,我们队这些个区间进行排序,依照区间的左端点按从小到大排序,然后从左往右选取,条件是当 ...

  10. 获取指定日期相关DATENAME和DATEPART数据

    DATENAME和DATEPART有何区别,Insus.NET写成一个函数,可以方便查询与对比: 一个是返回一个字符串,另一个是返回一个整数. SET ANSI_NULLS ON GO SET QUO ...