`

java中反射:认识Class类(一)

 
阅读更多

认识Class类:
在正常情况下,需要先有一个类的完整路径引入之后才可以按照固定的格式产生实例化对象,但是在java中也允许通过一实例化对象找到一个类的完整信息,那么这就是Class
范例:
package com.testFS.test;
/**
* 通过一个对象得到完整的“包.类”名称:getClass().getname()
* @author Administrator
*
*/
class Hello{
}
public class GetClassDemo1 {
public static void main(String[] args) {
   Hello hello=new Hello();  System.out.println(hello.getClass().getName());
}
}
类包路径:

结果:com.testFS.test.Hello

从程序的运行结果中可以发现,通过一个对象得到了完整的“包.类”名称,那么有些读者会觉得奇怪,getClass()方法是哪里定义的呢?从之前学习到的知识读者知道,任何一个类如果没有明确地声明继承哪个父类时候,则默认继承Object类,则可知道getClass()方法是Object类中的,定义如下:
public final Class getClass() 返回一个Class类,此类是Java 反射的源头。
图片理解反射过程:


提示:java中Object类是一切类的父类,那么所有类的对象实际也都是Java.lang.Class类的实例,所以所有的对象都可以转变为Java.lang.Class类型表示。
在定义Class类时也使用了泛型声明,所以为了让程序不很出现警告信息,可以指定好其操作的泛型类型。

Class类的作用:
Class 本身表示一个类的本身,通过Class可以完整地得到一个类中的完整结构,包括类中的定义、属性定义等。

Class类的常用方法:


在Class类中本身没有定义任何的构造方法,所以如果要使用则首先必须通过forNmae()方法实例化对象。除此外,也可以用“类.class”或者“对象.getClass()”方法实例化。

范例:
package com.testFS.test;

/**
* 通过一个对象得到完整的“包.类”名称:getClass().getname()
* @author Administrator
*
*/
class Hello{

}
public class GetClassDemo1 {
@SuppressWarnings("unused")
public static void main(String[] args) {
  //Hello hello=new Hello();
  //System.out.println(hello.getClass().getName());
  Class<?> c1=null;
  Class<?> c2=null;
  Class<?> c3=null;
  try {
   c1=Class.forName("com.testFS.test.Hello");
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
  c2=new Hello().getClass();
  c3=Hello.class;
  System.out.println("类名称c1:"+ c1.getName());
  System.out.println("类名称c2:"+ c2.getName());
  System.out.println("类名称c3:"+ c3.getName());

}
}
运行结果:
类名称c1:com.testFS.test.Hello
类名称c2:com.testFS.test.Hello
类名称c3:com.testFS.test.Hello

从程序的运行结果可以发现,三种实例化Class对象的方式是一样的,但是使用forName的静态方法实例化Class对象的方式是较为常用的一种方式,应重点掌握。

提示:使用forName()方法更加具有灵活性。
从以前程序的三种方法可以发现,出 forName()方法外,其他的两种:“对象.getClass()”,"类.class"都需要导入一个明确的类,如果一类操作不明确时,使用起来可能会受到一些限制。但是forName()传入时只需以字符串的方式传入即可,这样就让程序具备了更大的灵活性,所以此方法是最为常见的一种方式。

 

  • 大小: 167.5 KB
分享到:
评论

相关推荐

    深入理解Java类型信息(Class对象)与反射机制

    本篇主要是深入对Java中的Class对象进行分析,这对后续深入理解反射技术非常重要,主要内容如下:认识Class对象之前,先来了解一个概念,RTTI(Run-TimeTypeIdentification)运行时类型识别,对于这个词一直是C++中...

    Java开发详解.zip

    031501_【第15章:Java反射机制】_认识Class类笔记.pdf 031502_【第15章:Java反射机制】_Class类的使用笔记.pdf 031503_【第15章:Java反射机制】_反射应用——取得类的结构笔记.pdf 031504_【第15章:Java反射机制...

    JAVA面试题最全集

    一个“.java”原文件中是否可以包括多个类(不是内部类)? 53.掌握内部类和接口的概念 54.StringTokenizer类的使用 55.数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? ...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    必须要时从Java SE API的源代码分析,了解各种语法在Java SE API中如何应用。  《Java JDK 7学习笔记》将IDE操作纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握操作步骤。 内容简介 ...

    java基础案例与开发详解案例源码全

    15.2 使用Java反射机制414 15.2.1 获取类型信息414 15.2.2 创建对象417 15.2.3 调用方法419 15.2.4 访问成员变量的值421 15.2.5 操作数组422 15.3 反射与动态代理424 15.3.1 静态代理424 15.3.2 动态代理426 15.4 本...

    面向对象技术与UML课件及源代码-by 南邮-陈杨

    6.4使用类中类 6.5小结 第7章继承和多态 7.1使用继承 7.1.1为什么需要继承 7.1.2如何实现继承 7.1.3继承的底层本质 7.2成员的覆盖 7.2.1什么是成员覆盖 7.2.2成员覆盖有何作用 7.3使用多态性 7.3.1什么是...

    J2SE技术总结-Java学习精华教程-电子书

    ..........Java中的IO .....I/O_BIO ..........I/O流对象与使用 ..........文件相关类的使用 .....集合 ..........概述 ..........集合API .....线程 ..........概念 ..........操作线程 ..........线程安全-使用...

    Java核心技术精讲

    从重新认识反射的定义开始,了解JAVA的核心技术; 理解Java中9大内置Class实例; 详细介绍包名、类名、接口、继承、修饰符等内容; 深入理解List、Map、Set的实现机制以及原理 深入理解泛型的原理以及在日常工作...

    asp.net知识库

    NET委托:一个C#睡前故事 [推荐] - [原创] Microsoft .NET策略及框架概述 卸载Class? Web Form 窗体 如何实现web页面的提示保存功能 在ASP.Net中两种利用CSS实现多界面的方法 如何在客户端调用服务端代码 页面一...

    Spring.3.x企业应用开发实战(完整版).part2

    3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...

    Spring3.x企业应用开发实战(完整版) part1

    3.2.3 Java反射机制 3.3 资源访问利器 3.3.1 资源抽象接口 3.3.2 资源加载 3.4 BeanFactory和ApplicationContext 3.4.1 BeanFactory介绍 3.4.2 ApplicationContext介绍 3.4.3 父子容器 3.5 Bean的生命周期 3.5.1 ...

Global site tag (gtag.js) - Google Analytics