随笔分类 - 02 【Java语言程序设计】
摘要:接着上一篇讲。一个异常日志处理的例子:抛出异常的地方为:try{ ... ...//省略N行}catch( Exception e){ throw new RuntimeException ("jar文件加载异常!name="+jarFileName, e);}打印异常的地方为:logger.err...
阅读全文
摘要:考虑对JDK的底层堆栈信息进行处理,一种是重写JDK的Throwable,另一种是在原错误堆栈信息上进行“二次加工”。目前这两种方式我都实现了,效果非常好。这篇文章主要记录对错误堆栈进行“二次加工”的实现过程。从大量的实际错误日志分析出发:首先,追根溯源,找到错误是从哪个地方new出来的。例如com...
阅读全文
摘要:很多次的经验教训,让我不得不重视异常处理。经常遇到的问题如下:1)日志不准确,错误原因难以查明!!2)日志量太大,查找麻烦!!3)哪里需要记录日志,哪里不用记录日志?往往随心所欲!!分析以上问题,深入研究,其实是缺少一个处理异常的原则和一个智能的机制去“加工日志”。举个真实例子:[10/28/13 ...
阅读全文
摘要:Sun的这个java.lang.Throwable 源码 设计非常糟糕,完全没有扩展性,我在IBM 的Java JDK下,继承java.lang.Throwable重新定义了一个ExceptionWrapper,重载了java.lang.Throwable的大部分方法,目的就是,不用Java本身的那种堆栈信息,大家知道的,Java本身的堆栈信息冗余性非常大,点击一个Action报错就上百行,当时真正有价值的错误信息就几行。IBM的JDK是可以重写java.lang.Throwable的方法的,但是Sun的JDK坑爹的是private的方法,重写不了!这种设计真是坑爹。不只是我遇到这个问题,网上
阅读全文
摘要:Which of the following is better?a instanceof BorB.class.isAssignableFrom(a.getClass())The only difference that I know of is, when 'a' is null, the first returns false, while the second throws an exception. Other than that, do they always give the same result?When usinginstanceof, you need t
阅读全文
摘要:引起 java.lang.ExceptionInInitializerError 错误的原因是:在类的初始化时,出错。也就是说,在加载类时,执行static的属性、方法块时,出错了。比如public class AA { private static AA aa = new AA(); private AA(){//构造方法 init(); }public void init(){ .... }}初始化类时,会调用init方法,如果Init方法出错,这类初始化失败,就会报java.lang.ExceptionInInitializerError错误同理,在执行static{ ...}方法块时.
阅读全文
摘要:在写方法(函数)的过程中,总结了如下原则:【问题1】、有些方法,内容都差不多,只是参数的个数不一样。此时,到底是写多个方法呢,还是写一个方法涵盖所有功能(根据传入的标识去执行不同的步骤)。A、写多个方法,每个方法参数不同优点:每个方法执行一件事情,过程清晰明了,调用也简单。缺点:多个方法,有很多代码是冗余的,而且要改起来很麻烦。B、写一个方法,涵盖所有参数优点:只需要编写和维护一套代码。缺点:调用时需要明确指定所有参数。需要做很多判断,性能稍微低一点(可以忽略)。》》》举例:改变字符串编码的方法:按照A原则,可以写两个方法:changeCode(String orgStr);changeCod
阅读全文
摘要:深入Java虚拟机去理解:在java虚拟机中,每个对象和类在逻辑上都是和一个监视器相关联的。对于对象来说,相关联的监视器保护对象的实例变量。对于类来说,监视器保护类的类变量。(如果一个对象没有实例变量,或者一个类没有变量,相关联的监视器就什么也不监视。)为了实现监视器的排他性监视能力,java虚拟机为每一个对象和类都关联一个锁。代表任何时候只允许一个线程拥有的特权。线程访问实例变量或者类变量不需锁。但是如果线程获取了锁,那么在它释放这个锁之前,就没有其他线程可以获取同样数据的锁了。(锁住一个对象就是获取对象相关联的监视器)类锁实际上用对象锁来实现。当虚拟机装载一个class文件的时候,它就会创
阅读全文
摘要:第一:return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)第二:finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的最后。可行的做法有四:1.return语句只在函数最后出现一次。2.return语句仅在try和catch里面都出现。3.return语句仅在try和函数的最后都出现。4.return语句仅在catch和函数的最后都出现。注意,除此之外的其他做法都是不可行的,编译器会报错。(1)如果程序运行到try成功时可
阅读全文
摘要:数据抽象、继承和多态是面向对象程序设计语言的三大特性。多态,我觉得它的作用就是用来将接口和实现分离开,改善代码的组织结构,增强代码的可读性。在某些很简单的情况下,或许我们不使用多态也能开发出满足我们需要的程序,但大多数情况,如果没有多态,就会觉得代码极其难以维护。在Java中,谈论多态就是在讨论方法调用的绑定,绑定就是将一个方法调用同一个方法主体关联起来。在C语言中,方法(在C中称为函数)的绑定是由编译器来实现的,在英文中称为early binding(前期绑定),因此,大家自然就会想到相对应的late binding(后期绑定),这在Java中通常叫做run-time binding(运行时
阅读全文
摘要:1. JFrame对象一般可以直接向里面添加数据,但是在设置背景颜色时得用:Container f = new JFrame(“test”).getContentPane();2. pack()是设置窗体大小自适应其内组件,setSize()为设置其显示的大小。3.默认关闭窗体JFrame时,是隐藏。要想真退出。请加入setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JFrame.EXIT_ON_CLOSE是一整形常量,值为3。4. 加载GIF图片:MediaTracker tracker = new MediaTracker(this);Imag
阅读全文
摘要:这个问题一直困扰我很长时间了,虽然工作了一段时间,但感觉连这个问题都解决不好的话,实在对不起自己。今天我终于抽出时间,好好网上找了下资料,然后写了个简单的记事本程序,感觉是我想要的结果。所以在这里把程序帖出来,希望能对学子们有帮助。package com.chapter2;import java.awt.Dimension;import java.awt.Toolkit;import javax.swing.JFrame;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JScrollPane;im
阅读全文