java反射系列三之类加载器

一.概念认知



二.代码示例

package reflect;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class ClassLoaders {
    public static void main(String[] args) throws ClassNotFoundException, IOException {
        ClassLoaders c = new ClassLoaders();
        c.test();
    }
    public void test() throws ClassNotFoundException, IOException{
        //getSystemClassLoader()返回用于委派的系统类加载器。
        ClassLoader loader1 = ClassLoader.getSystemClassLoader();
        System.out.println(loader1);
        //getParent()返回父类加载器进行委派
        ClassLoader loader2 = loader1.getParent();
        System.out.println(loader2);
        //引导类加载器无法获得
        ClassLoader loader3 = loader2.getParent();
        System.out.println(loader3);
        //getClassLoader()返回类的类加载器。
        Class clazz1 = Person.class;
        ClassLoader loader4 = clazz1.getClassLoader();
        System.out.println(loader4);

        //由于Object和String是核心类,由最顶层的引导类加载器加载,故无法获得
        String className = "java.lang.Object";
        Class clazz2 = Class.forName(className);
        ClassLoader loader5 = clazz2.getClassLoader();
        System.out.println(loader5);

        //掌握
        //this代表这个方法,getclass就能得到所属的类,接着得到加载此类的类加载器
        ClassLoader loader = this.getClass().getClassLoader();
        //getResourceAsStream(String name)返回用于读取指定资源的输入流。
        InputStream is = loader.getResourceAsStream("reflect\\可坏.txt");
        Properties pros = new Properties();
        //load(InputStream inStream)从输入字节流读取属性列表(键和元素对)。
        pros.load(is);
        //getProperty(String key)使用此属性列表中指定的键搜索属性。
        String name = pros.getProperty("user");
        System.out.println(name);

        String password = pros.getProperty("password");
        System.out.println(password);
    }
}

写给自己看的,方法不懂查api文档啦

原文地址:https://www.cnblogs.com/zjm1999/p/10333114.html

时间: 2024-10-10 23:07:46

java反射系列三之类加载器的相关文章

Java基础加强-(注解,类加载器,servlet3.0新特性)

1.   Annotation注解 1.1.  Annotation概述 Annotation是JDK 5.0以后提供对元数据的支持,可以在编译.加载和运行时被读取,并执行相应的处理.所谓Annotation就是提供了一种为程序元素设置元数据的方法,可用于修饰包.类.构造器.方法.成员变量.参数和局部变量的声明,这些信息被存储在Annotation的“name=value”对中. Annotation能被用来为程序元素(类.方法.成员变量等)设置元数据,比如一段代码的作者或者告诉编译器禁止一些特

Java高新技术第一篇:类加载器详解

首先来了解一下字节码和class文件的区别: 我们知道,新建一个Java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的bin目录下)指定的目录下的.class文件,类加载需要将.class文件导入到硬盘中,经过一些处理之后变成字节码在加载到内存中. 下面来看一下简单的例子: [java] view plain copy package com.loadclass.demo; import java.util.Dat

黑马程序员系列第九篇 类加载器

ASP.Net+Android+IOS开发  .Net培训.期待与您交流! 推荐阅读相关书籍<深入java虚拟机> 目录:1.java.lang.ClassLoader类介绍      2.类加载器的结构     3.加载类的过程     4.自定义类加载器 类加载器负责加载 Java 类的字节代码到 Java 虚拟机中. 类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一.它使得 Java 类可以被动态加载到 Java 虚拟机中并执行. Java 虚拟机使用 Jav

[转载] Java高新技术第一篇:类加载器详解

本文转载自: http://blog.csdn.net/jiangwei0910410003/article/details/17733153 首先来了解一下字节码和class文件的区别: 我们知道,新建一个Java对象的时候,JVM要将这个对象对应的字节码加载到内存中,这个字节码的原始信息存放在classpath(就是我们新建Java工程的bin目录下)指定的目录下的.class文件,类加载需要将.class文件导入到硬盘中,经过一些处理之后变成字节码在加载到内存中. 下面来看一下简单的例子:

Java内存管理-掌握虚拟机类加载器(五)

勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇介绍虚拟机类加载机制,讲解了类加载机制中的三个阶段,分别是:加载.连接(验证.准备.解析).初始化 ,知道了类加载的机制.下面我们就要知道类到底是通过什么方式加载到内存中的,也就是本文要介绍的类加载器,类加载器就是加载类的信息到内存中. 本文地图 : 一.什么是类加载器(ClassLoader) 虚拟机设计团队把类加载阶段中的”通过一个类的全限定名来获取描述此类的二进制字节流“

Java内存管理-掌握自定义类加载器的实现(七)

勿在流沙筑高台,出来混迟早要还的. 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 上一篇分析了ClassLoader的类加载相关的核心源码,也简单介绍了ClassLoader的设计思想,读源码相对来说是比较枯燥的,还是这个是必须要走的过程,学习源码中的一些思想,一些精髓,看一下大神级人物是怎么写出那么牛逼的代码.我们能够从中学到一点点东西,那也是一种进步和成长了.本文基于上一篇文章内容,手把手写一个自定义类加载器,并且通过一些简单的案例(场景)让我们更加细致和静距

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法

JAVA反射系列之Field,java.lang.reflect.Field使用获取方法.   转载https://my.oschina.net/u/1407116/blog/209383 摘要 java.lang.reflect.Field使用 Field. 首先必须明一点 Field类主要是用来辅助获取和操作类的属性的! 1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String name);      返回一个 Fiel

Java虚拟机JVM学习05 类加载器的父委托机制

Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap) 扩展类加载器(Extension) 系统类加载器(System) 2.用户自定义的类加载器: java.lang.ClassLoader的子类,用户可以定制类的加载方式. JVM自带的加载器 Java虚拟机自带了以下几种加载器. 1.根(Bootstrap)类加载器: 该加载器没有父加载器. 它

jvm三的三种类加载器

JVM有三种类加载器:bootstrap负责加载系统类,extclassloader负责加载扩展类,appclassloader负责加载应用类.他们主要是分工不一样,各自负责不同的区域,另外也是为了实现委托模型.什么是委托模型呢,其实就是当类加载器有加载需求的时候,先请示他的父类使用父类的搜索路径来加入,如果没有找到的话,才使用自己的搜索路径来来搜索类. 当执行 java ***.class 的时候, java.exe 会帮助我们找到 JRE ,接着找到位于 JRE 内部的 jvm.dll ,这