zoukankan      html  css  js  c++  java
  • Java Class类及反射机制

    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包里的对象

  • 相关阅读:
    因子个数筛
    原根
    Pollard Rho (大数分解算法)
    Miller-Rabin(素数测试算法)
    离不开的微服务架构,脱不开的RPC细节(值得收藏)!!!
    微服务架构,多“微”才合适?
    互联网架构,究竟为啥要做服务化?
    markdown
    docker安装、启动(挂载外部配置和数据)
    程序员代码面试指南上(1-3)
  • 原文地址:https://www.cnblogs.com/tonyluis/p/5792852.html
Copyright © 2011-2022 走看看