java.lang.Class类

声明:

public final class Class<T>extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement

T - 由此 Class 对象建模的类的类型。例如, String.class 的类型是 Class<String>。如果将被建模的类未知,则使用 Class<?>

Class 类的实例表示正在运行的 Java 应用程序中的类和接口

枚举是一种类,注释是一种接口。

每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该Class 对象。

基本的 Java 类型(boolean、byte、char、short、int、long、float 和double)和关键字 void 也表示为 Class 对象。

Class类没有public构造方法。Class对象是在加载类时由Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。

在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个 Class对象,用于表示这个类的类型信息。Class类不是我们认为创建的,是由java虚拟机,在我们生成.class文件的时候创建的,我们可以通 过几种方法,获得这个Class类实例。

Class 对象的三种获取方法

package com.tonyluis;

public class Test2 {
    public static void main(String args[]) throws ClassNotFoundException {
        Class<Test2> t1 = Test2.class;
        Class<?> t2 = Class.forName("com.tonyluis.Test2");
        Class<? extends Test2> t3 = new Test2().getClass();
        System.out.println((t1 == t2) + " " + (t2 == t3));
        //输出true true
    }
}

重要的几个方法:

1, public static Class<?> forName(String className)

返回一个Class<?>对象,注意通过这个方法是不能确定Class<?>里面通配符?的类型的。

2,public T newInstance() :根据对象的class新建一个对象,常用于反射中构建对象,调用对象方法,注意该类需实现默认无参构造方法。

Class<?> doubleClass= Class.forName("java.lang.Double");
try {
Double objDouble = (Double) doubleClass.newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

3,public ClassLoader getClassLoader():

4,public String getName():

5,public native Class getSuperclass():获取类的父类,Object的父类为null
6,public java.net.URL getResource(String name)

解决 File File =new File("C:\\test.txt")绝对路径问题,可以获得相对路径。

参考:http://blog.csdn.net/lcj8/article/details/3502849

7,其他类

public boolean isEnum()
public native boolean isArray()
public native boolean isPrimitive()
public boolean isAnnotation()

public Package getPackage() :反射中获得package,如java.lang.Object 的package为java.lang。

public native int getModifiers() : 反射中获得修饰符,如public static void等 。

public Field getField(String name):反射中获得域成员。

public Field[] getFields() :获得域数组成员。    
public Method[] getMethods() :获得方法。

public Method getDeclaredMethod(String name, Class<?>... parameterTypes):加个Declared代表本类,继承,父类均不包括。

public Constructor<?>[] getConstructors() :获得所有的构造函数。

其中Package、Field、Method方法均为java.lang.reflect包里的对象

Java Class类及反射机制的更多相关文章

  1. java工厂类与反射机制

    java 简单工厂类 2012-04-22 15:44:07|  分类: java |  标签:java工厂类  简单工厂类  |举报|字号 订阅     简单工厂模式需要由以下角色组成: 接口    ...

  2. 在JAVA中,关于反射机制的讨论

    一.什么是反射机制         简单的来说,反射机制指的是程序在运行时能够获取自身的信息.在java中,只要给定类的名字,     那么就可以通过反射机制来获得类的所有信息. 二.哪里用到反射机制 ...

  3. Java 核心类库之反射机制

    1:什么是反射机制? 2:反射机制它可以做什么呢? 3:反射机制对应的API又是什么? 1):通过反射机制来获取一个对象的全限定名称(完整包名),和类名: 2):实例化Class对象 3):获取对象的 ...

  4. java.lang.Class<T> -- 反射机制

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

  5. Java进阶之reflection(反射机制)——反射概念与基础

    反射机制是Java动态性之一,而说到动态性首先得了解动态语言.那么何为动态语言? 一.动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以引进,已有的函数可以被删除等结构上的变化.比如常见 ...

  6. Java SE之初探反射机制

    [Keywords]:Java,Hibernate,虚拟机,框架,SQL [Abstract]:   反射的概念:所谓的反射就是java语言在运行时拥有一项自观的能力,反射使您的程序代码能够得到装载到 ...

  7. JAVA(五)反射机制/Annotation

    成鹏致远 | lcw.cnblog.com |2014-02-04 反射机制 1.认识Class类 在正常情况下,必须知道一个类的完整路径之后才可以实例化对象,但是在 java中也允许通过一个对象来找 ...

  8. java的泛型与反射机制

    什么是泛型? 泛型,即“参数化类型”.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参) ...

  9. java.lang.Class<T> -- 反射机制及动态代理

    Interface : Person package java_.lang_.component.bean; public interface Person { String area = " ...

随机推荐

  1. swift上传头像

    很久没有写博客了,今天特地写了这个,也是一边仿照别人写的demo,注释部分都是需要的.需要的同学可以参考一下. @IBAction func headImageBtnPage(){  //上传头像 / ...

  2. AzCopy Upload Files

    We can use many ways upload our Files to Azure, Than I  Introduction to you a good way, AzCopy ! 1. ...

  3. jQuery 选择同时包含两个class的元素的实现方法

    Jquery选择器 多个 class属性参照以下案例 <element class="a b good list card"> 1. 交集选择: $(".a. ...

  4. Webpack--自学笔记

    原文--http://webpack.github.io/docs/tutorials/getting-started/ 什么是webpack? webpack是一个模块打包器.webpack把模块( ...

  5. sql 知识点系统汇总

    提供性能: .服务器往往具有强大的计算能力和速度..避免把大量的数据下载到客户端,减少网络上的传输量. 第一章 T-SQL 语句 1.1数据类型 文本型 -- CHAR 定长型 <=8000字节 ...

  6. linux下centos的网络连接

  7. 工作中的一些JS--为网页动态添加元素,类似于邮箱添加联系人的功能

    项目中要解决一个为下拉框动态添加选项的问题,之前从网上搜到结果,写个JS函数 //先新建元素,并添加属性 var option = document.createElement("optio ...

  8. 每日学习笔记:js中可以直接用id名调用的问题?

    在JavaScript中,标准的id选择器调用语法是: document.getElementById('myid').style.width = pc + "%"; 但是,今天发 ...

  9. QT中检索设定目录下所有指定文件的方法

    void MainWindow::on_pushButton_clicked() { QDir dir=QFileDialog::getExistingDirectory(this, tr(" ...

  10. GNURadio 使用问题