了解ClassLoader:

  1. /*
  2. * 了解类的加载器:ClassLoader
  3. *
  4. */
  5. @Test
  6. public void testClassLoader() {
  7. // 获取到系统类加载器,加载用户自己创建类
  8. ClassLoader loader = ClassLoader.getSystemClassLoader();
  9. System.out.println(loader);
  10. // 获取到扩展类加载器,加载D:\jdk1.6.0_45\jre\lib\ext目录下的jar包
  11. ClassLoader loader2 = loader.getParent();
  12. System.out.println(loader2);
  13. // 引导类加载器,获取不到
  14. ClassLoader loader3 = loader2.getParent();
  15. System.out.println(loader3);
  16. }
  17. // 举例:对于自定义类,是使用系统类加载器加载
  18. String className = "com.atguigu.java.Person";
  19. ClassLoader classLoader = Class.forName(className).getClassLoader();
  20. System.out.println(classLoader);
  21. className = "java.lang.String";
  22. classLoader = Class.forName(className).getClassLoader();
  23. System.out.println(classLoader);

关于ClassLoader加载器的一个使用,需要掌握

包结构:

================================

jdbc.properties:

  1. jdbc.user=root
  2. jdbc.password=root
  3. jdbc.driverClass=com.mysql.jdbc.Driver
  4. jdbc.jdbcUrl=jdbc:mysql://127.0.0.1:3306/jdbc1
  5. #jdbc.user=scott
  6. #jdbc.password=tiger
  7. #jdbc.driverClass=oracle.jdbc.driver.OracleDriver
  8. #jdbc.jdbcUrl=jdbc:oracle:thin:@127.0.0.1:1521:ORCL001
  1. /*
  2. * 关于ClassLoader加载器的一个使用,需要掌握
  3. */
  4. @Test
  5. public void testClassLoader1() throws IOException {
  6. // 方式一:读取当前工程下的配置文件jdbc.properties
  7. Properties properties = new Properties();
  8. FileInputStream inStream = new FileInputStream(new File(
  9. "jdbc.properties"));
  10. properties.load(inStream);
  11. String user = properties.getProperty("jdbc.user");
  12. String password = properties.getProperty("jdbc.password");
  13. String driverClass = properties.getProperty("jdbc.driverClass");
  14. String url = properties.getProperty("jdbc.jdbcUrl");
  15. System.out.println("user=" + user + "\npassword=" + password
  16. + "\ndriverClass=" + driverClass + "\nurl" + url);
  17. System.out.println("============================");
  18. =====================================================
  19. // 方式二:读取src目录下的配置文件
  20. Properties properties2 = new Properties();
  21. // InputStream inputStream =
  22. // ReflectTest.class.getClassLoader().getResourceAsStream("jdbc1.properties");
  23. InputStream inputStream = this.getClass().getClassLoader()
  24. .getResourceAsStream("jdbc1.properties");
  25. properties2.load(inputStream);
  26. String user2 = properties2.getProperty("jdbc.user");
  27. String password2 = properties2.getProperty("jdbc.password");
  28. String driverClass2 = properties2.getProperty("jdbc.driverClass");
  29. String url2 = properties2.getProperty("jdbc.jdbcUrl");
  30. System.out.println("user=" + user2 + "\npassword=" + password2
  31. + "\ndriverClass=" + driverClass2 + "\nurl" + url2);
  32. System.out.println("============================");
  33. ===============================================
  34. // 方式三:读包目录下的配置文件
  35. Properties properties3 = new Properties();
  36. // InputStream inputStream2 = this.getClass().getClassLoader()
  37. // .getResourceAsStream("com/atguigu/java/jdbc2.properties");
  38. InputStream inputStream2 = this.getClass().getClassLoader()
  39. .getResourceAsStream("com\\atguigu\\java\\jdbc2.properties");
  40. properties3.load(inputStream2);
  41. String user3 = properties3.getProperty("jdbc.user");
  42. String password3 = properties3.getProperty("jdbc.password");
  43. String driverClass3 = properties3.getProperty("jdbc.driverClass");
  44. String url3 = properties3.getProperty("jdbc.jdbcUrl");
  45. System.out.println("user=" + user3 + "\npassword=" + password3
  46. + "\ndriverClass=" + driverClass3 + "\nurl" + url3);
  47. }

关于ClassLoader的使用的更多相关文章

  1. 使用自定义 classloader 的正确姿势

    详细的原理就不多说了,网上一大把, 但是, 看了很多很多, 即使看了jdk 源码, 说了罗里吧嗦, 还是不很明白: 到底如何正确自定义ClassLoader, 需要注意什么 ExtClassLoade ...

  2. Atitti 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new

    Atitti 载入类的几种方法    Class.forName ClassLoader.loadClass  直接new 1.1. 载入类的几种方法    Class.forName ClassLo ...

  3. java笔记--理解java类加载器以及ClassLoader类

    类加载器概述: java类的加载是由虚拟机来完成的,虚拟机把描述类的Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成能被java虚拟机直接使用的java类型,这就是虚拟机的类加载机制 ...

  4. Class.forName和ClassLoader.loadClass等

    Class类 首先,Class类里可以记载所有类的属性.方法等信息.这个也就是运行时类别标记,它记录了所有的对象(比如int,MyClass,void,数组等等)对应的类信息. Class对象 JVM ...

  5. Java ClassLoader 原理详细分析(转)

    转载自:http://www.codeceo.com/article/java-classloader.html 一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管 ...

  6. [Tomcat] Tomcat的classloader

    定义 同其他服务器应用一样,tomcat安装了各种classloader(classes that implement java.lang.ClassLoader) Bootstrap | Syste ...

  7. java中Class.forName("xxx")和ClassLoader().loadClass("xxx")的区别

    一.首先,查看Class类中的forName方法,可以发现有如下三个方法,但是我们通常用的是只有一个参数的方法. 简单介绍一下这三个方法: 第一个方法Class.forName("xxx&q ...

  8. java.lang.Class.forName(String name, boolean initialize, ClassLoader loader)方法

    描述 Java.lang.Class.forName(String name, boolean initialize, ClassLoader loader) 方法返回与给定字符串名的类或接口的Cla ...

  9. 深入分析Java ClassLoader原理

    一.什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程 ...

  10. 深入分析ClassLoader

    首先介绍下ClassLoader: ClassLoader顾名思义就是类加载器,负责将Class加载到JVM中,事实上ClassLoader除了能将Class加载到JVM中之外,还有一个重要的作用就是 ...

随机推荐

  1. (四)Lock,ReentrantLock,ReentrantReadWriteLock类的使用以及相关api---synchronized进阶

    这篇博客记录了Lock,ReentrantLock,ReentrantReadWriteLock类的使用以及其一些api: 码字不易~~另外<java多线程编程核心技术>这本书读着很爽 前 ...

  2. c++智能指针介绍

    C++11标准引入了boost库中的智能指针,给C++开发时的内存管理提供了极大的方便.接下来这篇文件介绍shared_ptr/weak_ptr内部实现原理及使用细节. C++不像java有内存回收机 ...

  3. MVC整体运行流程一(进入管道)

    1.在浏览器输入 https://www.cnblogs.com/zhangmm96/发送一个HTTP到web服务器,Web服务器WIndows内核中的HTTP.SYS组件捕捉当前请求,该组件分析出是 ...

  4. HillCrest Sensor HAL

    1. 抽象定义 Google为Sensor提供了统一的HAL接口,不同的硬件厂商需要根据该接口来实现并完成具体的硬件抽象层,Android中Sensor的HAL接口定义在:hardware/libha ...

  5. JMeter用户参数

    压测的时候,经常需要使用动态参数,即每次请求的参数不一样,这样才能更好的模拟真实的用户请求,我们首先能想到的也是最常见的就是用户ID 1.  用户参数 我们可以定义一个变量,然后指定多个值,这样每次请 ...

  6. python 04 列表

    1.列表——list [ ] 有序.可变.支持索引查看. 存储数据,支持大多数数据类型:字符串,数字,布尔值.列表.集合.元组.字典等. 1.1 定义: lst(勿用list)  lst = [&qu ...

  7. CSS3 translate导致字体模糊

    今日客户反馈,发现 使用了 translate会导致字体模糊. .media-body-box{ @media all and (min-width: 992px){ position: absolu ...

  8. C#数据结构_查找

    查找:静态查找和动态查找. 衡量查找算法的最主要的标准是平均查找长度(Average Search Length,简 称 ASL).平均查找长度是指在查找过程中进行的关键码比较次数的平均值. 顺序查找 ...

  9. 使用element-ui中table expand展开行控制显示隐藏

    问题讲解:在使用vue版本的ElementUI中的table功能的时候还是遇到了一些问题,可以说饿了么团队在这个UI框架的文档撰写已经非常不错了,不过还是有一些方法乍一看让人摸不着头脑,有些table ...

  10. codeforces E. DNA Evolution(树状数组)

    题目链接:http://codeforces.com/contest/828/problem/E 题解:就是开4个数组举一个例子. A[mod][res][i]表示到i位置膜mod余数是res的‘A’ ...