zoukankan      html  css  js  c++  java
  • 面向对象程序设计(OOP)的六大原则

    1、定义:

    寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件。

    2、种类:

    • BootstrapClassLoader:用C++编写的,装载jre中的核心类库;
    • ExtClassLoader:装载jre目录下的ext中的jar类;
    • AppClassLoader:装载ClassPath路径下的类.
    • UrlClassLoader:装载Url指定的类;

    3、测试:

    Java代码 复制代码 收藏代码
    1. public class Test {   
    2.   
    3.     public static void main(String[] args) {   
    4.   
    5.         ClassLoader loader = Test.class.getClassLoader();   
    6.         while (loader != null) {   
    7.             System.out.println(loader.getClass().getName());   
    8.             loader = loader.getParent();   
    9.         }   
    10.         System.out.println(loader);   
    11.   
    12.     }   
    13.   
    14. }  

     输入结果:

    sun.misc.Launcher$AppClassLoader
    sun.misc.Launcher$ExtClassLoader
    null

    说明:

    • null:BootstrapClassLoader是用C++编写,而JVM设置ExtClassLoader的父加载器是null罢了;

    4、一个自定义类加载器的例子:

    Java代码 复制代码 收藏代码
    1. package classloader;   
    2.   
    3. import java.io.ByteArrayOutputStream;   
    4. import java.io.File;   
    5. import java.io.FileInputStream;   
    6.   
    7. /**  
    8.  *   
    9.  * 一、ClassLoader加载类的顺序  
    10.  *  1.调用 findLoadedClass(String) 来检查是否已经加载类。  
    11.  *  2.在父类加载器上调用 loadClass 方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。   
    12.  *  3.调用 findClass(String) 方法查找类。  
    13.  * 二、实现自己的类加载器  
    14.  *  1.获取类的class文件的字节数组  
    15.  *  2.将字节数组转换为Class类的实例  
    16.  *   
    17.  */  
    18. public class ClassLoaderTest {   
    19.   
    20.     public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {   
    21.         //新建一个类加载器   
    22.         MyClassLoader cl = new MyClassLoader("myClassLoader");   
    23.         //加载类,得到Class对象   
    24.         Class<?> clazz = cl.loadClass("classloader.Animal");   
    25.         //得到类的实例   
    26.         Animal animal=(Animal) clazz.newInstance();   
    27.         animal.say();   
    28.     }   
    29.   
    30. }   
    31. class Animal{   
    32.     public void say(){   
    33.         System.out.println("hello world!");   
    34.     }   
    35. }   
    36. class MyClassLoader extends ClassLoader {   
    37.     //类加载器的名称   
    38.     private String name;   
    39.     //类存放的路径   
    40.     private String path = "E:\\workspace\\Algorithm\\src";   
    41.   
    42.     MyClassLoader(String name) {   
    43.         this.name = name;   
    44.     }   
    45.        
    46.     MyClassLoader(ClassLoader parent, String name) {   
    47.         super(parent);   
    48.         this.name = name;   
    49.     }   
    50.     /**  
    51.      * 重写findClass方法  
    52.      */  
    53.     @Override  
    54.     public Class<?> findClass(String name) {   
    55.         byte[] data = loadClassData(name);   
    56.         return this.defineClass(name, data, 0, data.length);   
    57.     }   
    58.     public byte[] loadClassData(String name) {   
    59.         try {   
    60.             name = name.replace(".""//");   
    61.             FileInputStream is = new FileInputStream(new File(path + name + ".class"));   
    62.             ByteArrayOutputStream baos = new ByteArrayOutputStream();   
    63.             int b = 0;   
    64.             while ((b = is.read()) != -1) {   
    65.                 baos.write(b);   
    66.             }   
    67.             return baos.toByteArray();   
    68.         } catch (Exception e) {   
    69.             e.printStackTrace();   
    70.         }   
    71.         return null;   
    72.     }   
    73.   
    74. }  

    本代码来自:http://www.oschina.net

  • 相关阅读:
    写一个输入两位数,实现加减乘除的程序。并和同学比较一下各种的功能、实现方法的异同等等。写出自己程序存在的缺陷,以及比别人做的好的地方。
    请下载铁路12306的手机APP,通过使用这款软件,写一篇软件的评测(300字以上),评测内容可以是这个软件的优势,或是你觉得特别好的地方,软件的缺陷、软件可以改进的地方等等
    个人简介
    (1)把一个英语句子中的单词次序颠倒后输出。例如输入“how are you”,输出“you are how”; (2)编写单元测试进行测试; (3)用ElcEmma查看代码覆盖率,要求覆盖率达到100%。
    2、学习单元测试和代码覆盖率工具的使用 (1)写一个程序,用于分析一个字符串中各个单词出现的频率,并将单词和它出现的频率输出显示。(单词之间用空格隔开,如“Hello World My First Unit Test”); (2)编写单元测试进行测试; (3)用ElcEmma查看代码覆盖率,要求覆盖率达到100%。
    实验5
    实验4
    实验3
    实验2
    个人简介
  • 原文地址:https://www.cnblogs.com/bjanzhuo/p/3576040.html
Copyright © 2011-2022 走看看