示例类

@SuppressWarnings("unused")
public class Person {
    public String Name;
    private int Age;
    public Gender Gender;
    private static String Species = "人类";
    public Person(){
        Name="佚名";
        Age=-1;
    }
    public Person(String name){
        Name=name;
    }
    private Person(String name,int age){
        Name=name;
        Age=age;
    }
    private Person(Gender g){
        Gender=g;
    }
    public void Run(){
        System.out.println(Name+" 跑!");
    }
    public void Attack(){
        System.out.println(Name+" 打!");
    }
    public void Attack(String name){
        System.out.println(Name+" 打 "+name+"!");
    }
    private void Eat(String food){
        System.out.println(Name+" 吃 "+food);
    }
    public void Introduce()
    {
        System.out.println("我叫"+Name+",我今年"+Age+"岁了。");
    }
    public static void PlayGame(String gameName){
        System.out.println("玩 "+gameName+" 游戏");
    }
    public static void main(String[] args){
        System.out.println("main");
        for(String s:args)
            System.out.println(s);
    }
}

enum Gender{
    Male,Female
}

反射类的无参构造函数:

@Test
//反射类的无参构造函数
public void constructor1() throws Exception{
    Class clazz = Class.forName("pro.shaowei.reflect.Person");
    Constructor c=clazz.getConstructor();
    Person p = (Person) c.newInstance();
    Person p1 = (Person) clazz.newInstance();
    p.Introduce();
    p.Run();
    p1.Introduce();
    p1.Run();
}

反射类的有参构造函数:

@Test
//反射类的有参构造函数
public void constructor2() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Constructor c=clazz.getConstructor(String.class);
    Person p=((Person) c.newInstance("张三"));
    p.Introduce();
    p.Run();
}

反射类的私有构造函数:

@Test
//反射类的私有构造函数
public void constructor3() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    //反射私有构造函数时必须从使用 getDeclaredConstructor 方法
    Constructor c=clazz.getDeclaredConstructor(String.class,int.class);
    c.setAccessible(true);//暴力反射
    Person p=((Person) c.newInstance("张三",25));
    p.Introduce();
    p.Run();
}

反射类的公有无参方法:

@Test
//反射类的公有无参方法
public void method1() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Person p=(Person) clazz.newInstance();
    Method method=clazz.getMethod("Run");
    method.invoke(p);
}

反射类的公有有参方法:

@Test
//反射类的公有有参方法
public void method2() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Person p=(Person) clazz.newInstance();
    Method method=clazz.getMethod("Attack",String.class);
    method.invoke(p,"李四");
}

反射类的私有有参方法:

@Test
//反射类的私有有参方法
public void method3() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Person p=(Person) clazz.newInstance();
    Method method=clazz.getDeclaredMethod("Eat",String.class);
    method.setAccessible(true);
    method.invoke(p,"香蕉");
}

反射类的静态有参方法:

@Test
//反射类的静态有参方法
public void method4() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Person p=(Person) clazz.newInstance();
    Method method=clazz.getDeclaredMethod("PlayGame",String.class);
    method.setAccessible(true);
    method.invoke(p,"扫雷");
}

反射类的main方法:

@Test
//反射类的main方法
public void method5() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Person p=(Person) clazz.newInstance();
    Method method=clazz.getDeclaredMethod("main",String[].class);
    method.setAccessible(true);
    method.invoke(p,(Object)new String[]{"1","2"});
}

反射类公有的字段:

@Test
//反射类公有的字段
public void field1() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Person p=(Person) clazz.newInstance();
    Field field=clazz.getField("Name");
    System.out.println(field.get(p));
    field.set(p, "王五");
    p.Introduce();
}

反射类私有的字段:

@Test
//反射类私有的字段
public void field2() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Person p=(Person) clazz.newInstance();
    Field field=clazz.getDeclaredField("Age");
    field.setAccessible(true);
    System.out.println(field.get(p));
    field.set(p, 7);
    p.Introduce();
}

反射类私有静态的字段:

@Test
//反射类私有静态的字段
public void field3() throws Exception{
    Class clazz=Class.forName("pro.shaowei.reflect.Person");
    Person p=(Person) clazz.newInstance();
    Field field=clazz.getDeclaredField("Species");
    field.setAccessible(true);
    System.out.println(field.get(p));
    field.set(p, "不死族");
    System.out.println(field.get(p));
}

[新手学Java]反射学习笔记的更多相关文章

  1. Java 反射学习笔记

    要学反射,先要了解Class这个类,Class是所有Java类的一个总称,Class的实例中存储的是一个类的字节码,获取Class的实例有三种方式: System.class new Date().g ...

  2. java反射学习笔记

    1.java反射概念 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功 ...

  3. java 反射---学习笔记

    一.java的动态性 反射机制 动态编译 动态执行JavaScript代码 动态字节码操作 二.动态语言 动态语言 程序运行时,可以改变程序结构或变量类型,典型的语言:python.ruby.java ...

  4. Java反射学习笔记01

  5. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  6. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  7. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  8. Java反射学习总结四(动态代理使用实例和内部原理解析)

    通过上一篇文章介绍的静态代理Java反射学习总结三(静态代理)中,大家可以发现在静态代理中每一个代理类只能为一个接口服务,这样一来必然会产生过多的代理,而且对于每个实例,如果需要添加不同代理就要去添加 ...

  9. Java NIO 学习笔记(七)----NIO/IO 的对比和总结

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

随机推荐

  1. VS2010运行类向导提示“未实现该方法或操作”

    因为解决方案中包含有安装项目,将这些项目排除掉,即可打开类向导.

  2. 高吞吐量的分布式发布订阅消息系统Kafka--安装及测试

    一.Kafka概述 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因 ...

  3. VC++ 学习笔记(序):神一样的语言

    总的来说,我觉得VC++是一门神一样的语言——它是公认最强大.最复杂的:它一切以效率为第一要务,却又不肯落伍,拼命兼容现在的新的语言设计特点.本来在别的语言很容与就避开的问题,在这里要用很高的技巧去设 ...

  4. 修改eclipse启动时eclipse使用的jre

    eclipse在启动的时候,和环境变量中的jdk不兼容,可以单独制定eclipse运行的jre. 方法: 在eclipse的配置文件里增加-vm参数即可. 打开eclipse目录下的eclipse.i ...

  5. 云服务器 ECS Linux 系统盘数据转移方法

    转自:https://help.aliyun.com/knowledge_detail/41400.html 问题描述 购买云服务器 ECS Linux 服务器时,未购买数据盘,使用一段时间后,随着业 ...

  6. 使用U盘代替光盘来刻录ISO镜像文件的方法

    原文链接: http://jingyan.baidu.com/article/d3b74d64aa4a6a1f77e60932.html 1.以管理员身份运行UltraISO,点击“文件”菜单下的“打 ...

  7. SOA架构改造简单记录

    前端支持PC.Mobile.H5三个平台 nginx做负载均衡,主备机,keepalived,检测脚本,master和slave切换时完成相关工作: web做集群,web仅仅是web,与后端服务模块采 ...

  8. LINUNX下PHP下载中文文件名代码

            function get_basename($filename){                 return preg_replace('/^.+[\\\\\\/]/', '',  ...

  9. Codeforces 55D Beautiful Number (数位统计)

    把数位dp写成记忆化搜索的形式,方法很赞,代码量少了很多. 下面为转载内容:  a positive integer number is beautiful if and only if it is  ...

  10. STL容器删除元素的陷阱

    今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...