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 tarfile模块基本使用

    1.压缩一个文件夹下的所有文件 #coding=utf8 import os import tarfile __author__ = 'Administrator' def main(): cwd = ...

  2. Java探索之旅(17)——多线程(1)

    1.多线程  1.1线程 线程是程序运行的基本执行单元.指的是一段相对独立的代码,执行指定的计算或操作.多操作系统执行一个程序时会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被 ...

  3. 《精通Spring4.X企业应用开发实战》读后感第六章(国际化)

  4. Lucene.net 搜索引擎的中文资料

    以下是我找到的网上一些关于Lucene.net 搜索引擎的介绍资料 https://code.i-harness.com/zh-CN/tagged/lucene?page=5 http://jingp ...

  5. idea中java项目增加module后,增加的目录(src)无法增加包(Package)

    在idea项目中,增肌model后,在项目根目录下增加src目录,右键发现无法增加包(Package). 仔细观察发现,新增加的src目录是棕色,而原先的src目录是浅蓝色的,见下图: 在src右键, ...

  6. htmlparser API

    htmlparser所有的filter htmlparser所有的Tags htmlparser API: http://htmlparser.sourceforge.net/javadoc/inde ...

  7. linux 的有用的网站

    从windows下移到linux下还有很长的路走阿,慢慢记录一些有用的网站吧 http://www.yolinux.com/ http://linux.die.net/

  8. IOS 通讯录 右侧的字母栏

    http://blog.csdn.net/nicholas6lee/article/details/7633708 Android实现通讯录排序的方式,可借鉴.

  9. 【mybatis批量插入】

    mybatis批量插入操作: MySQL:1.INSERT INTO TABLE_NAME(ID,NAME)VALUES(1,'张三'),(2,'李四')                  2.INS ...

  10. .NET 中文件嵌套,例如:cshtml文件下面嵌套css和js【机器翻译】

    越来越多的我发现自己在我的一些较大的Web项目中丢失了文件.有很多内容要处理 - HTML视图,几个派生CSS页面,页面级CSS,脚本库,应用程序范围的脚本和页面特定的脚本文件等等.幸运的是,我使用R ...