第1章 Class类的使用

1-1 Class类的使用 (15:18)

第2章 动态加载类

2-1 Java 动态加载类 (13:19)

第3章 获取方法信息

3-1 Java 获取方法信息 (17:06)

第4章 获取成员变量构造函数信息

4-1 Java 获取成员变量构造函数信息 (14:44)

第5章 方法反射的基本操作

5-1 Java 方法反射的基本操作 (13:55)

import java.lang.reflect.Method;

public class Hello {
public static void main(String[] args) {
/*
* 要获取print(int a,int b)方法 1.要获取一个方法就是获取类的信息,获取类的信息首先要类的类类型
*
* 2.获取方法 名称和参数列表来决定 getMethod获取的是public的方法 getDeclaredMethod自己声明的方法
*/ A a1 = new A();
Class c = a1.getClass(); try {
Method m1 = c.getDeclaredMethod("print", int.class, int.class);
Method m2 = c.getDeclaredMethod("print", String.class, String.class); // 方法的反射操作
// 方法如果没有返回值返回null,有返回值返回具体的返回值
Object o1 = m1.invoke(a1, 10, 20);
Object o2 = m2.invoke(a1, "hello", "world"); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} class A {
public void print(int a, int b) {
System.out.println(a + b);
} public void print(String a, String b) {
System.out.println(a.toUpperCase() + "," + b.toLowerCase());
}
}

第6章 通过反射了解集合泛型的本质

6-1 Java 通过反射了解集合泛型的本质 (07:53)

import java.lang.reflect.Method;
import java.util.ArrayList; public class Hello {
public static void main(String[] args) {
ArrayList list1 = new ArrayList();
ArrayList<String> list2 = new ArrayList<String>();
list2.add("hello");
// list1.add(20);错误的 Class c1 = list1.getClass();
Class c2 = list2.getClass();
System.out.println(c1 == c2);
// 反射的操作都是编译之后的操作 /*
* c1==c2结果返回true说明编译之后集合的泛型是去泛型化的 Java中集合的泛型,是防止错误输入的,只在编译阶段有效, 绕过编译就无效了
* 验证:我们可以通过方法的反射来操作,绕过编译
*/
try {
Method m = c2.getMethod("add", Object.class);
m.invoke(list2, 20);// 绕过编译操作就绕过了泛型 System.out.println(list2.size());
System.out.println(list2);
} catch (Exception e) {
e.printStackTrace();
}
}
}

慕课网_反射——Java高级开发必须懂的的更多相关文章

  1. 反射---Java高级开发必须懂的

        理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助.  一.Class类的使用         1.万事万物皆 ...

  2. java基础(十一 )-----反射——Java高级开发必须懂的

    本文我们通过一个实际的例子来演示反射在编程中的应用,可能之前大家对反射的学习,仅仅是停留在概念层面,不知道反射究竟应用在哪,所以是一头雾水.相信通过这篇教程,会让你对反射有一个更深层次的认知. 概念 ...

  3. java reflect反射---Java高级开发必须懂的

    理解反射对学习Java框架有很大的帮助,如Spring框架的核心就是使用Java反射实现的,而且对做一些Java底层的操作会很有帮助.  一.Class类的使用         1.万事万物皆对象,( ...

  4. 《深入理解Java虚拟机》-----第8章 虚拟机字节码执行引擎——Java高级开发必须懂的

    概述 执行引擎是Java虚拟机最核心的组成部分之一.“虚拟机”是一个相对于“物理机”的概念 ,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器.硬件.指令集和操作系统层面上的,而 ...

  5. 《深入理解Java虚拟机》-----第7章 虚拟机类加载机制——Java高级开发必须懂的

    代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 7.1 概述 上一章我们了解了Class文件存储格式的具体细节,在Class文件中描述的各种信息,最终都需要 ...

  6. 《深入理解Java虚拟机》-----第6章 类文件结构——Java高级开发必须懂的

    代码编译的结果从本地机器码转变为字节码,是存储格式发展的一小步,却是编程语言发展的一大步. 6.1 概述 记得在第一节计算机程序课上我的老师就讲过:“计算机只认识0和1,所以我们写的程序需要经编译器翻 ...

  7. java基础(十五)----- Java 最全异常详解 ——Java高级开发必须懂的

    本文将详解java中的异常和异常处理机制 异常简介 什么是异常? 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常. Java异常的分类和类结构图 1.Java中的所 ...

  8. java基础(十四)-----详解匿名内部类——Java高级开发必须懂的

    在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意的事项.匿名内部类使用的形参为何要为final. 使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有点儿奇怪.创建格式如下: n ...

  9. java基础(十三)-----详解内部类——Java高级开发必须懂的

    可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能 ...

随机推荐

  1. 架构师成长之路5.1-Saltstack安装及入门

    点击架构师成长之路 架构师成长之路5.1-Saltstack安装及入门 (安装.配置.启动) 配置管理工具: Pupper:1. 采用ruby编程语言:2. 安装环境相对较复杂:3.不支持远程执行,需 ...

  2. 树形DP Choosing Capital for Treeland

    给你一棵有向树,需要选定一个点为capital,满足翻转边数最小 思路:先求出1为capital 的答案,然后向下更新孩子节点 dp[i]=dp[i-1]+judge(i); #include< ...

  3. CentOS 6的系统启动流程

    一.POST加电自检 按下电源后ROM芯片中的CMOS程序执行并检测CPU.内存等设备是否存在并正常运行,CMOS中的程序叫BIOS,可以设置硬盘接口,网卡声卡开关之类的简单设置.一般PC机主板上有一 ...

  4. 高可用,多路冗余GFS2集群文件系统搭建详解

    高可用,多路冗余GFS2集群文件系统搭建详解 2014.06 标签:GFS2 multipath 集群文件系统 cmirror 实验拓扑图: 实验原理: 实验目的:通过RHCS集群套件搭建GFS2集群 ...

  5. 2017 趋势科技 研发4.26(offer)

    南京趋势科技外企(offer) 笔试 在华科线下笔试的,推荐多参加线下笔试,因为相对难度会低一些,好进一些. 当时笔试的估计只有60几个,然后选择题感觉有的不会,编程简单. 第二天去面试的时候,hr小 ...

  6. 关于 vue中 export default 和 new Vue({})

    对于刚开始学习vue的人(像我),一般都不会清楚的知道两者之间该怎么区分,甚至觉得两者是一样的. 那么,经过我的查证,发现两者之间是没有任何联系的. export default ES6 Module ...

  7. ubuntu安装wireshark

    $sudo apt-add-repository ppa:wireshark-dev/stable$sudo apt update$sudo apt install wireshark 出于安全方面的 ...

  8. Linux Expect自动交互脚本

    https://likegeeks.com/expect-command/ In the previous post, we talked about writing practical shell ...

  9. Java多线程和并发(九),ReentrantLock(公平锁)

    目录 1.ReentrantLock 2.ReentrantLock的实现 3.synchronized和ReentrantLock的区别 九.ReentrantLock(公平锁) 1.Reentra ...

  10. 51 Nod N的阶乘的长度 (斯特林近似)

    1058 N的阶乘的长度  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3. Inp ...