转自https://www.cnblogs.com/melburg/

java反射学习

所谓反射,可以理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下,编程人员可以动态获取这些信息,从而编写更加具有可移植性的代码。严格地说,反射并非编程语言的特性,因为在任何一种语言都可以实现反射机制,但是如果编程语言本身支持反射,那么反射的实现就会方便很多。

 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

关于反射的一个详细总结的帖子:

http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html

1,获得类的class对象

我们知道在Java中一切都是对象,我们一般所使用的对象都直接或间接继承自Object类。Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的class对象。这个对象指的是代表一个类型的对象,因为一切皆是对象,类型也不例外,在Java使用class类的对象来表示一个类型。所有的类型类都是Class类的实例。

A a = new A();

if(a.getClass()==A.class)

System.out.println("equal");

else System.out.println("unequal");

结果就是打印出 “equal”。

因此,获取类的class对象的两种方式:

① 如果你知道一个实例,那么你可以通过实例的“getClass()”方法获得该对象的class对象

② 如果你知道一个类型(String名称),那么你可以使用“类名.class”的方法获得该类型的class对象

2,获得类型的信息

在获得实例的class对象之后,你就可以调用其中的一些方法获得该类型的信息了,主要的方法有:

getName():String:获得该类型的全称名称

getSimpleName():String 获得该类型的名称(不包括包名)

getSuperClass():Class:获得该类型的直接父类,如果该类型没有直接父类,那么返回null。

getInterfaces():Class[]:获得该类型实现的所有接口。

isArray():boolean:判断该类型是否是数组。

isEnum():boolean:判断该类型是否是枚举类型。

isInterface():boolean:判断该类型是否是接口。

isPrimitive():boolean:判断该类型是否是基本类型,即是否是int,boolean,double等等。

isAssignableFrom(Class cls):boolean:判断这个类型是否是类型cls的父(祖先)类或父(祖先)接口。

getComponentType():Class:如果该类型是一个数组,那么返回该数组的组件类型。

3. 四种获取Class对象的方法 Java反射机制

getClass方法:
类型:public final Class<? extends Object> getClass()
功能:返回该对象的运行时类的java.lang.Class对象(API上的解释)
有方法类型可以知道,该方法只能由类的实例变量调用

  1. JButton b1 = new JButton("button1");
  2. System.out.println(b1.getClass());

输出:
class javax.swing.JButton

System.out.println("通过类本身获得对象");
    Class userClass = this.getClass() ;

System.out.println("通过子类的实例获得父类对象");

Class subUserClass = userClass.getSuperclass() ;

System.out.println("通过类名.class获取对象");
    Class forClass = com.hqh.reflect.UseInfo.class ;

System.out.println("通过类名的字符串获取对象");
    Class forName = Class.forName("com.hqh.reflect.UseInfo") ;

java反射机制的使用

http://201111181922.iteye.com/blog/1277882

转载于:https://www.cnblogs.com/caiguaismine/p/9773930.html

jdk基础之Object类getClass()方法相关推荐

  1. java getclass方法_JAVA-初步认识-第十一章-object类-Getclass方法

    一. 只看名字,是获取类的意思. 什么叫运行时类? 现在进行一个前期的铺垫介绍,在创建对象前先要有class文件,这是个字节码文件. 先要加载class文件,后面才能接着运算.现在举了一个例子,如下 ...

  2. 面向对象回顾(静态变量、类加载机制/双亲委派模型、Object类的方法、类和对象区别)

    1. 静态变量存在什么位置? 方法区 2. 类加载机制,双亲委派模型,好处是什么? 某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务, ...

  3. java面试题27 java中下面哪些是Object类的方法()

    java面试题27 java中下面哪些是Object类的方法() A notify() B notifyAll() C sleep() D wait() 蒙蔽树上蒙蔽果,蒙蔽树下你和我.遇到这种题,我 ...

  4. 【JAVA】Object类的方法简谈

    Object类的方法简谈 Java中所有的类都继承自Object类,那我们今天来探讨一下Object类中的方法 PS:Object源码中,作者那一栏中,出现了这个 package java.lang; ...

  5. java基础之Object类_繁星漫天_新浪博客

    在JDK中提供了一个Object类,它是所有类的父类,即每个类都直接或间接继承该类. 例如: class Cat  { public void shout(){ System.out.println( ...

  6. 下面属于java的object_在JAVA中,下列哪些是Object类的方法()

    1.clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常. 主要是JAVA里除了8种基本类型传 ...

  7. java基础.0——Object类

    从这篇文章起就正式开始java学习之旅了.java中,万物皆对象,所以第一篇先学习java的Object类,循序渐进. 一.getClass() 1 public final native Class ...

  8. java基础之Object类和异常

    Object类和异常 1. Object类是所有类的父类(超类, 基类,上帝类); 里面有两个常用的方法: 1> public String toString();// 默认输出对象的地址值的字 ...

  9. java object 详解_Java基础之Object类详解

    类Object是类层次结构的根类.每个类都直接或者间接地继承Object类.所有对象(包括数组)都实现这个类的方法.Object类中的构造方法只有一个,并且是无参构造方法,这说明每个类中默认的无参构造 ...

  10. 请列举你所知道的Object类的方法并简要说明。

    小白一个 只记得euqals()和toString()方法了-,重新再整理下好咯 Object类是所有类的父类 Object中的方法进行简要的分析 Clone():创建并返回对象的副本 equals( ...

最新文章

  1. 打开阿兹海默之门:华裔张复伦利用RNN成功解码脑电波,合成语音 | Nature
  2. Linux只列出目录的几种方式
  3. java.lang.NullPointerException错误分析
  4. 欢迎使用CSDN-markdown编辑器11111
  5. vue 字符串分割_嗯哼vue组件taginput包教不包会
  6. Bourbon: 让你的sass更简洁
  7. Multi-thread--linux下线程相关函数接口
  8. 机器人终于有触觉了!甚至可以实现膝跳反射丨Science
  9. Atitit path query 路径查询语言 数据检索语言 目录 1.1. List map spel 1 1.2. Html数据 》》Css选择符 1 1.3. Json 》map》
  10. VSD Viewer for Mac(Visio绘图文件阅读器)
  11. SpringBoot中Session超时原理说明
  12. HMI 排行中有哪些触摸屏品牌
  13. 【解决方法】Windows7 任务计划程序 “任务计划程序服务不可用。任务计划程序将尝试重新与其建立连接。”
  14. 学习Python编程看哪些书比较好?推荐这10本
  15. 强制客户端更新Silverlight XAP文件方法汇总
  16. 五、解读Sails之Waterline源代码
  17. 天道(遥远的救世主)金句,自悟自性
  18. Qt编写水波进度条控件
  19. vue-cli项目配置文件分析
  20. MATLAB 中的左除(\)和 右除(/)

热门文章

  1. mysql导入sql文件出错的一种解决方法
  2. linux安装mysql 5.7_linux安装mysql5.7.24
  3. python和其它语言混合编程_C++和Python混合编程 - python嵌入C++
  4. truffle console用法 总结
  5. Equal-size partition problem
  6. kubernetes视频教程笔记 (18)-service
  7. Kubernetes kubectl The connection to the server localhost:8080 was refused - did you specify the rig
  8. arm开发板放张图片动起来_Python与Zynq的桥梁,米尔PYNQ开发板来了
  9. 基于SSM的猫头鹰在线视频网站
  10. Linux 挂载华为存储,linux扫描挂载存储