写了一个android版的计算器,可以计算带括号的表达式,不过前提是:正确的表达式才行
小缺陷是没有做表达式括号的控制,现在还没有想到好的控制方式1 package javaAdvanced; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 /** 7 * 类加载器学习 8 * 9 * @author cuiH10 * Date: 13-12-611 */12 public class ClassLoaderTest {13 public static void main(String[] args) {14 System.out.println(ClassLoaderTest.class.getClassLoader().getClass().getName());15 /**16 * result:sun.misc.Launcher$AppClassLoader17 * AppClassLoader 加载的18 */19 20 21 System.out.println(System.class.getClassLoader());22 /**23 * result:null24 * 加载器为null,说明是由bootstrap加载器进行加载的25 */26 27 28 ClassLoader loader = ClassLoaderTest.class.getClassLoader();29 while (loader != null) {30 System.out.println(loader.getClass().getName());31 loader = loader.getParent();32 }33 System.out.println(loader);34 /** http://www.cnblogs.com/sosoft/35 * result:36 * sun.misc.Launcher$AppClassLoader [加载classPath各种jar包下面类]37 * sun.misc.Launcher$ExtClassLoader [加载 Ext下面的各种jar包]38 * null(Bootstrap)[加载rt.jar]39 * 说明三个类加载器的父子关系40 */41 }42 43 /**44 * web项目中的一个类加载器的测试(Tomcat中servlet DoGet方法的加载器)45 * org.apache.catalina.loader.WebappClassLoader46 * org.apache.catalina.loader.StandardClassLoader47 * sun.misc.Launcher$AppClassLoader48 * sun.misc.Launcher$ExtClassLoader49 *50 * 两个apache 两个java51 * 这个放到web项目下好用。52 */53 protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {54 response.setContentType("text/html");55 PrintWriter out = response.getWriter();56 ClassLoader loader = this.getClass().getClassLoader();57 while (loader != null) {58 out.println(loader.getClass().getName() + "");59 loader = loader.getParent();60 }61 out.close();62 }63 64 }65 66 /**67 * jvm默认三个类加载器 http://www.cnblogs.com/sosoft/68 * 类加载器本质也是一个类69 * java虚拟机第一个加载器是BootStrap,加载其他类加载器,然后加载类70 *71 * 默认的三个BootStrap ;AppClassLoader;ExtClassLoader72 *73 * 类加载器的委托方式:74 * 加载方式:首先向上委托,,追寻到Bootstrap,上面有的话,直接加载,没有的话向下寻找。75 * 因此自己写的System类无法被加载,因为找到最上面,就直接加载system类了76 */77 78 79 /**80 * 编写字节的类加载器81 * 模板方法的设计模式82 *83 * 父类里有loaderClass方法84 *85 * 子类1(自己的代码)86 * 子类2(自己的代码)87 *88 * 子类1和子类2的流程一样,但是具体实现方法不一样。89 * 因此,将实现流程的代码写在父类中,具体的实现代码由子类实现90 * 例如JDK中,ClassLoader.loaderClass使用的就是模板方法91 *92 * ClassLoader.loaderClass方法包括三步流程:93 * 一:findLoaderClass()检查是否加载94 * 二:父类加载器中调用 loaderClass方法95 * 三: findClass查找类。96 *97 * 因此:要想写一个自己的类加载器,只需要覆盖findClass便可以实现98 */