`

Java.Lang.Class对象学习

阅读更多

java.lang.Class获取类装载器的过程

 

   /**
     * 返回此类的ClassLoader
     * 如果此类(例如java.lang.String)是由bootstrap ClassLoader装载的返回null
     * 原始类型返回null
     * 如果Class对象表示的是数组,则获得的ClassLoader是元素的ClassLoader
     * 例如: 
     * 1(new Test[10]).getClass().getClassLoader()返回null,因为元素是原始类型
     * 2(new String[10]).getClass().getClassLoader()返回null,因为String
     * 是由bootstrap ClassLoader装载的
     * 3(new Test[10]).getClass().getClassLoader()
     * 返回sun.misc.Launcher$AppClassLoader@e2eec8,Test是自定义的类
     * 
     */
    public ClassLoader getClassLoader() {
        ClassLoader cl = getClassLoader0();
        if (cl == null)
            return null;
        SecurityManager sm = System.getSecurityManager();
        if (sm != null) {
            ClassLoader ccl = ClassLoader.getCallerClassLoader();//获得调用者的类装载器
            //如果调用对象的类不是是由bootstrap ClassLoader,并且当前对象的类
            //与调用对象的类不是由同一类装载器装载,且当前对象的ClassLoader不是调用
            //对象的ClassLoader的上层(ClassLoader链结构的上层),则进行安全检查
            if (ccl != null && ccl != cl && !cl.isAncestor(ccl)) {
                sm.checkPermission(SecurityConstants.GET_CLASSLOADER_PERMISSION);
            }
        }
        return cl;
    }

    // Package-private to allow ClassLoader access
    native ClassLoader getClassLoader0();
 

 

分享到:
评论

相关推荐

    随机模拟java数据插件Jmockdata.zip

    Jmockdta是一款实现模拟JAVA类型或对象的实例化并随机初始化对象的数据的工具框架。单元测试的利器。  The plug-in of Jmockdata what through random algorithm mock java data. Jmockdata插件通过随机算法模拟...

    java编程常见问题

    33.java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 34.java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该...

    Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案

    今天小编就为大家分享一篇关于Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,...

    Java-Reflection-Tutorial.pdf

    java 反射实战demo,Java的反射(reflection)机制是指在程序的运行...我理解的Java反射的原理就是获取Class对象然后使用java.lang.reflect里提供的方法操作Class对象,Class与java.lang.reflect构成了java的反射技术。

    java解析Properties配置文件为对象Bean

    if(typeName.equals("java.lang.String")) { field.set(obj, value); }else if(typeName.equals("int")) { field.setInt(obj, Integer.parseInt(value)); }else if(typeName.equals("float"))...

    commons-lang3-3.1 API

    ClassUtils – 用于对Java类的操作,不使用反射; ObjectUtils – 用于操作Java对象,提供null安全的访问和其他一些功能; RandomStringUtils – 用于生成随机的字符串; SerializationUtils – 用于处理对象序列化...

    java类加载机制

    类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个 java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的 ...

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    3.2.4 使用反射机制的步骤 导入Jjava.lang.relfect 包需 遵循以下3三个步骤: 第一步是获得你想操作的类的 java.lang.Class 对象; 第二步是调用诸如 getDeclaredMethods 的方法; 第三步使用 反射API 来...

    JavaSE选择题汇总.doc

    JAVA面试选择题 ...A.java.sql B.java.awt C.java.lang D.java.swing 答案:A 5.下列运算符合法的是() A.&& B.<> C.if D.:= 答案:A 6.执行如下程序代码 a=0;c=0; do{ --c; a=a-1; }while(a>

    借助Ehcache缓存框架实现对页面的缓存Demo

    at java.lang.Thread.run(Thread.java:619) 相关jar包下载地址: Ehcache 对象、数据缓存:...

    Java练习题(试卷)

    1. Class 类是由Java编译器自动生成的,它伴随每个类。 2.任何一个Java程序都默认引入一个包,这个包的名字是 java.lang 。 3.在Java语言中,有一个类是所有类或接口的父类,这个类的名称是 java.lang.Object 。 ...

    《Java面向对象程序设计》(第版)课后答案.docx

    〔1〕Speak.java 〔2〕生成两个字节码文件,这些字节码文件的名字Speak.class 和 Xiti8.class 〔3〕java Xiti8 〔4〕执行java Speak的错误提示 Exception in thread "main" java.lang.NoSuchMethodError: main 执行...

    手写IOC项目,学习理解Spring IOC原理

    而剖析一个类或用反射解决具体的问题就是使用相关应用程序接口(1)`java.lang.Class`(2)`java.lang.reflect`,所以,Class对象是反射的根源。 IOC和DI是Spring里面最核心的东西,,资源中会写出这两个模块。资源内容...

    java反射机制原理详解.docx

    java.lang.Class:是反射的源头 我们创建一个类,通过编译,生成对应的.calss文件,之后使用java.exe加载(jvm的类加载器)此.class文件,此.class文件加载到内存以后,就是一个运行时类,存在缓存区,那么这个运行时类...

    Java基础加强之类加载器

    类加载是指将类的class文件读入内存,并为之创建一个Java.lang.Class对象,也是说当程序中使用任何类时,系统都会为之建立一个java.lang.Class对象。  类加载器负责加载所有类,系统为所有被载入内存中的类生成一...

    《Java面向对象程序设计》(第2版)课后答案.docx

    D 8.(1)Speak.java (2)生成两个字节码文件,这些字节码文件的名字Speak.class 和 Xiti8.class (3)java Xiti8 (4)执行java Speak的错误提示 Exception in thread "main" java.lang.NoSuchMethodError: main...

    Java跳过构造方法新建对象

     (2) 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。  (3) 调用对象的clone()方法。  (4) 运用反序列化手段,调用java.io.ObjectInputStream对象的 ...

    java期末复习第讲面向对象程序设计.pptx

    2023年5月29日 4.1 包 包是由.class文件组成的一个集合 第2页/共41页 java期末复习第讲面向对象程序设计全文共41页,当前为第2页。 2023年5月29日 4.1.1 定义包 构建包语句的语法是: package pkg1[.pkg2[.pkg3…]]...

    数据库工具类DatabaseUtil.java

    java.lang.reflect.Method method = clazz.getMethod("close", null); method.invoke(resource, null); } catch (Exception e) { // e.printStackTrace(); } } /** * 执行 SELECT 等 SQL 语句并返回结果集. ...

    反射、注解类型、工厂设计模式.md

    .`java.lang.Class类​ ==Class代表类型的类== ​ 如果一个对象代表一个类型,则该对象的类型的是Class ...​ 任何类型加载到JVM内存后对应的都是一个java.lang.Class对象 ​ T 用于指定对应的实际类型名

Global site tag (gtag.js) - Google Analytics