1、概述

    1.1  Java程序中许多对象在运行时会出现2种类型:编译时类型、运行时类型;

        eg:Person  person=new Student();  这行代码在编译时为Person类型,运行时为Student类型;

        eg:程序在运行时接受到外部传来的一个参数,编译时为Object类型,运行时又需要调用具体的运行时类型;

        【解决以上问题】:

           1.1.1  假设编译时类型、运行时类型都已知,可以用instanceof运算符进行判断,再利用强制类型转换为运行时类型;

           1.1.2  若编译时无法 得知该对象的类型,程序只能靠   反射   来 获取运行时的具体类型信息;

    1.2  【>>>获得Class对象<<<】

          ====每个类被加载后,在内存中都会创建一个该类的Class对象,通过Class对象就可以获得该类;

          1.1.1  调用Class对象的forName(),返回该类的Class对象  public static Class<?> forName(String className)

                className:类的全限定名

          1.1.2  调用某个类的class属性,将返回该类的Class对象; 

          1.1.3  调用某个类的getClass(),将返回该类的Class对象;

    1.3  【>>>从Class对象中获取信息<<<】   

          1.1.1  访问Class对应类包含的构造器

    

          1.1.2   访问Class对应类包含的方法

   

          1.1.3  访问Class对应类包含的属性

   

          1.1.4  访问Class对应类上的注解

          1.1.5  访问Class对应类包含的内部类

          1.1.6  访问Class对应类包含的外部类

          1.1.7  访问Class对应类所继承的父类、实现的接口

          1.1.8  判断Class对应类是接口、注解、枚举等

                   

    1.4  【使用反射生成并操作对象】

          1.1.1  创建对象

                调用Class对象的newInstance()  public T newInstance()  

                    此方法要求该Class对象对应的类有默认构造器,newInstance()实际上就是调用默认构造器创建实例;

package com.exiuge.mytest.reflect;

import java.lang.reflect.Constructor;

public class Test {

    public static void main(String[] args)throws Exception{
Class clazz=Class.forName("com.exiuge.mytest.reflect.User");
User user=(User) clazz.newInstance(); }
}

                先获取Class对象的指定构造器Constructor对象,再调用Constructor对象的newInstance()来获得实例

package com.exiuge.mytest.reflect;

import java.lang.reflect.Constructor;

public class Test {

    public static void main(String[] args)throws Exception{
Class clazz=Class.forName("com.exiuge.mytest.reflect.User");
Constructor constructor =clazz.getConstructor();
User user=(User) constructor.newInstance();
}
}

          1.1.2  调用方法

                获取Class对象后,可获取Method对象来进行方法调用,Method对象有一个方法

                  public Object invoke(Object obj, Object... args)

          1.1.3  访问属性值

          1.1.4  操作数组

                    

JavaSE---反射(未完待续)的更多相关文章

  1. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

  2. Java开发中的23+2种设计模式学习个人笔记(未完待续)

    注:个人笔记 一.设计模式分三大类: 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模 ...

  3. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  4. asp.net面试题总结1(未完待续。。。。)

    1.MVC中的TempData\ViewBag\ViewData区别? 答:页面对象传值,有这三种对象可以传. Temp:临时的 Bag:袋子 (1)  TempData  保存在Session中,C ...

  5. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  6. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  7. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

  8. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

  9. virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续)

    virtualbox搭建ubuntu server nginx+mysql+tomcat web服务器1 (未完待续) 第一次接触到 linux,不知道linux的确很强大,然后用virtualbox ...

  10. 一篇文章让Oracle程序猿学会MySql【未完待续】

    一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...

随机推荐

  1. EZOJ #78

    传送门 分析 AC自动机板子题qwq 不过似乎可以哈希(因为所有模式串的长度相同,所以哈希乱搞就可以) 代码 #include<iostream> #include<cstdio&g ...

  2. NPOI操作之一EXCEL数据导入数据库

    一.概要 前面讲到NPOI操作EXCEL导出功能,下面讲下从EXCEL里获取数据添加进数据库. 二.代码 HSSFWorkbook hssfworkbook; public void ExcelDat ...

  3. Python程序设计2——列表和元组

    数据结构:更好的说法是从数据角度来说,结构化数据,就是说数据并不是随便摆放的,而是有一定结构的,这种特别的结构会带来某些算法上的性能优势,比如排序.查找等. 在Python中,最基本的数据结构是序列( ...

  4. spark sql使用sequoiadb作为数据源

    目前没有实现,理一下思路,有3中途径: 1:spark core可以使用sequoiadb最为数据源,那么是否spark sql可以直接操作sequoiadb. 2: spark sql支持Hive, ...

  5. LeetCode第496题:下一个更大元素 I

    问题描述 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字 x ...

  6. java全栈day12----final static 匿名对象 内部类 包的声明与访问

    final关键字概念 继承的出现提高了代码的复用性,并方便开发.但随之也有问题,有些类在描述完之后,不想被继承, 或者有些类中的部分方法功能是固定的,不想让子类重写.可是当子类继承了这些特殊类之后, ...

  7. Python--详解TKinter类库

    为了学习python3.5的tkinter,于是我去官网找了找相关部件的一些文档,读起来有点绕口,觉得还是自己来实践实践,看看视频感觉用处会更大,然后就有了下面的一部分常用的总结, 查看tkinter ...

  8. ZOJ 2301 Color the Ball (离散化+线段树)

    题意:有从 1 开始递增依次编号的很多球,开始他们都是黑色的,现在依次给出 n 个操作(ai,bi,ci),每个操作都是把编号 ai 到 bi 区间内 的-所有球涂成 ci 表示的颜色(黑 or 白) ...

  9. 【Android小技巧】android 按键如何能自动触发点击

    使用button.performClick();方法 EditText 中hint的字体跟 textSize的字体大小一样大

  10. ubuntu - 安装软件问题

    problem & solution 问题1 - E: 无法定位软件包 @原因(1) - 没有添加相应软件的镜像源(软件源)    解决方案 用 gedit/vi/vim - 在 /etc/a ...