
读书笔记
文章平均质量分 83
xyhety
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
内部类总结
一、方法及作用域内的内部类:1.在一个方法内定义的类2.在一个方法内部的作用域内定义的类3.实现了一个接口的一个匿名类4.扩展了一个没有默认构造器的类的匿名类5.一个实现域初始化的匿名类6.一个使用实例初始化完成构造的匿名类(匿名内部类不能拥有构造器) 二、匿名内部类如果要用到外部类定义的对象,接受此参数的方法中对应的参数列表应该被声明为final型的。但是,如果不是直接在匿名内部类中使用...2009-11-27 14:28:13 · 174 阅读 · 0 评论 -
Java中的反射(二)
1. 当在命令行模式下执行java XXX.class 指令后,java运行程序会尝试找到JRE安装的所在目录,然后寻找jvm.dll(默认是在JRE目录下bin\client目录中),接着启动JVM并进行初始化动作,产生Bootstrap Loader,Bootstrap Loader会加载Extended Loader,并设定Extended Loader的parent为Bootstrap L...原创 2009-04-06 10:42:21 · 112 阅读 · 0 评论 -
Java中的反射(一)
1. Java提供的反射机制允许您在运行时动态加载类、查看类信息、生成对象或操作生成的对象。反射机制的一个应用实例,就是在整合式开发环境中所提供的方法提示或是类查看工具。另外像JSP中的JavaBean自动收集请求信息也使用到反射,而一些软件开发框架也常见到反射机制的使用,以达到动态加载使用者自定义类的目的。2. 简介Class与类加载: Java在真正需要使用一个类时才会加以加载。一个...原创 2009-04-06 09:43:07 · 92 阅读 · 0 评论 -
容器类的线程安全及ThreadLocal类
1. 容器类默认没有考虑线程安全问题,您必须自行实现同步以确保共享数据在多线程存取下不会出错。例如使用Arraylist时,可以这样实现://arraylist参考至一个ArrayList的一个实例 synchronized(arrayList){ arrayList.add(new SomeClass());} 2. 事实上,也可以使用java.util.Collections的s...原创 2009-04-05 21:28:33 · 112 阅读 · 0 评论 -
wait()和notify()
1. wait()、notify()、notifyAll()方法是由Object类提供的方法,且都被声明为final,所以无法重新定义它们。通过这3个方法您可以要求线程进入等待,或者是通知线程回到Runnable状态。2. 必须在被同步化的方法或区块中调用wait()方法,当对象的wait()方法被调用时,当前的线程会被放入对象的等待集合(Wait Set)中,线程会解除对对象的锁定,其他的...原创 2009-04-05 19:06:16 · 95 阅读 · 0 评论 -
Java线程之同步化(Synchronized)主题
1. 如果一个对象所持有的数据可以被多线程同时共享存取,必须考虑到数据同步的问题。所谓数据同步指的是两份数据的整体性和一致性。数据在多线程下共享时容易由于同时多个线程可能更新同一个对象的信息,而造成对象数据的不同步,因为数据的不同步可能引发的错误通常不易察觉,而且可能是在程序执行了几千几万次之后,才会发生错误。这通常会发生在产品已经上线之后,甚至是程序已经执行了几年之后。2. 举个简单的例子,...原创 2009-04-05 16:44:10 · 177 阅读 · 0 评论 -
Java线程(三)
1. Java中的每个线程都属于某个线程组(Thread Group)管理的一员。可以使用下面的语句来取得当前线程所属的线程组名称: Thread.currentThread().getThreadGroup().getName(); 每个线程产生时,都会被归入某个线程组,这视您的线程是在那个组中产生而定。如果没有指定,则归入产生该子线程的线程组中。也可以自行指定线程组,...原创 2009-04-05 15:37:02 · 90 阅读 · 0 评论 -
Java线程(二)
1. 线程生命周期: 线程的4个主要周期状态为创建线程、可执行(Runnable)、非可执行和终止(Dead)。当实例化一个Thread并执行start()之后,线程进入Runnable状态并开始执行run()方法。 线程有优先权,由1(Thread.MIN_PRIORITY)到10(Thread.MAX_PRIORITY),默认是5(Thread.NORM_PRIORITY)...原创 2009-04-05 11:33:53 · 74 阅读 · 0 评论 -
Java线程(一)
1. 一个进程是一个包括有自身执行地址的程序。一个线程则是进程中的一个执行流程。一个进程中可以同时包括多个线程。也就是说,一个程序中同时可能进行多个不同的子流程,每个子流程可以得到一小段程序的执行时间,每执行完一个线程就跳到下一个线程。由于转换的速度很快,这使得一个程序可以像是同时处理多个事务。2. 在Java中要实现线程功能,可以继承者java.lang.Thread类,并重新定义run(...原创 2009-04-05 11:07:35 · 88 阅读 · 0 评论 -
PushbackReader类
1. java.io.PushbackReader与前面提到的PushbackInputStream类似,都拥有一个PushBack缓冲区,只不过PushbackReader所处理的是字符。从这个对象读出数据后,如果愿意的话,只要PushBack缓冲区没有满,就可以使用unread()将数据推回流的前端。2. 下面的示例示范了可以将文本文件中的一些数学符号:<,>,<=,&g...原创 2009-04-04 21:44:07 · 232 阅读 · 0 评论 -
CharArrayReader和CharArrayWriter类
1. 前面我们介绍过ByteArrayInputStream、ByteArrayOutputStream,它们是将位数组当作流输入来源、输出目的地的工具类。与其类似的是java.io.CharArrayReader与java.io.CharArrayWriter,使用它们可以将字符数组当作字符数据输入输出的来源和目的。2. 由于Java中的字符是Unicode字符,通过这个特性,可以将文本文件的...原创 2009-04-04 17:19:47 · 206 阅读 · 0 评论 -
PrintWriter类
1. 前面介绍过PrintStream,它可以将Java的基本数据类型等数据,直接转换为系统默认编码下对应的字符,再输出。而这里要介绍的java.io.PrintWriter在功能上与PrintStream类似,除了接受OutputStream实例作为变量之外,PrintWriter还可以接受Writer对象作为输出的对象。当原先是使用Writer对象在作字符处理,而现在想要套用println()...原创 2009-04-04 16:23:04 · 251 阅读 · 0 评论 -
使用反射生成与操作对象(一)
1. 使用反射机制,可以在运行时期动态加载类并生成对象,操作对象上的方法、改变类成员的值,甚至连私有成员的值也可以改变。2. 生成对象:可以使用Class的newInstance()方法来实例化一个对象,实例化的对象以Object类型返回。例如: Class c = Class.forName(className);Object obj = c.newInstance(); 下面是一...原创 2009-04-06 15:16:51 · 162 阅读 · 0 评论 -
使用反射生成与操作对象(二)
1. 修改成员值: 尽管直接存取类的域成员是不被鼓励的,但仍可以直接存取公开的域成员,甚至也可以通过反射机制来存取私有域成员。下面以一个实例来说明,首先编写一个TestField类。 package ysu.hxy;public class TestField{ public int testInt; public String testString; ...原创 2009-04-06 17:04:22 · 119 阅读 · 0 评论 -
Proxy(代理)模式二
2. 重新思考图像代理: 现在需要思考设计模式是否真的能够帮助我们。之前我们费尽心血实现了一个设计模式,而现在又要考虑将它拆掉。现实的开发中会遇到更多这样的情况,实际上这是很自然的。经过他人的评审之后,设计人员可以在发布之前重新构思自己的设计,并修改其中有问题的部分。在实际过程中,设计模式可以帮助我们设计和调试应用程序,另外也方便了他人对我们的设计进行讨论。就Oozinoz公司的Ima...原创 2009-05-15 21:16:07 · 264 阅读 · 0 评论 -
Junit简介
1. 单元测试(Unit Test) 一个单元(Unit)是指一个可独立进行的工作,独立进行指的是这个工作不与程序运行时的上下文发生关系。如果是在Java程序中,具体来说一个单元可以是指一个方法(Method)。这个方法不依赖于前一次运行的结果,也不牵涉到后一次的运行结果。举例来说,下面这个程序的gcd()方法可视为一个单元:package y...原创 2009-04-08 17:46:32 · 204 阅读 · 0 评论 -
Ant简介
1. Ant可以自动完成的任务: (1)编译Java源代码; (2)建立jar、war、zip文件; (3)自动测试与生成报告; (4)从CVS等管理系统取得源代码。2. Ant相关网站: Ant官方网站:http://ant.apachye.org/ Ant使用者手册:http://ant.apache.org/manual/index.html.3....原创 2009-04-08 13:10:16 · 236 阅读 · 0 评论 -
专题制作--文字编辑器(文字编辑与保存)
1. 文字编辑与保存: (1). 打开文件的处理流程: 首先定义出当使用者选取菜单上的“打开”命令时,所需的处理流程:检查目前编辑中的文件是否已保存,若是,则希望出现对话框供使用者选取所需的文件、打开它然后显示在文字编辑敬;否则出现对话框显示“文件已修改是否保存?”的消息,若单击“是”按钮则保存文件,单击“否”按钮放弃当前文件直接打开。 上面的这几个流程可以分为几个...原创 2009-04-08 10:43:11 · 434 阅读 · 0 评论 -
专题制作--文字编辑器(逻辑实现部分)
1. 事件处理: 在Java中事件以具体的对象来表示,使用者的相关动作会由JVM建立相对应的事件,用以描述事件来源、发生了什么事情以及相关的消息,需要通过捕捉对应的事件,以进行对应的操作来完成应用程序的功能。2. Java事件模型: Java对事件的处理采用委托事件模型(Delegation Event Model),在这个模型下,事件被送到对应的组件,而组件会将事件传播至每...原创 2009-04-07 22:35:22 · 242 阅读 · 0 评论 -
专题制作--文字编辑器(接口部分)
1. Swing入门: 若要使用J2SE来开发窗口应用程序,可以有两种选择:一个是使用AWT(Abstract Window Toolkit),另一个是使用JFC(Java Foundation Classes)/Swing。2. Swing简介: 每一个窗口上所出现的组件在J2SE中,都是java.awt.Component或是java.awt.MenuCompoment的子类...原创 2009-04-07 20:28:37 · 221 阅读 · 0 评论 -
信息绑定(国际化处理)
1. 程序中的一些文字信息可以将之定义在一个属性文件中,而不定要写在程序代码中,这样在日后想更改文字信息时,只要更改文本文件的内容而不用重新编译程序,就可以在程序运行时显示不同的信息。2.使用ResourceBundle: 对于程序中日后可能变动的文字信息,可以考虑将信息移到程序之外。方法是用java.util.ResourceBundle来作信息绑定,首先要准备一个.properties...原创 2009-04-07 20:02:16 · 244 阅读 · 0 评论 -
日志(Logging)
1. 日志(Logging) 程序不免会出现错误,当出现错误时,可能会想将错误信息以某种方式存储下来,以供使用者或是程序开发人员调试(Debug)时使用。java.lang.logging包提供了一系列的logging工具类,如果只是要简单地记录一些信息,就可以使用这些工具类。 要使用J2SE的日志功能,首先要取得java.util.logging.Logger实例,这可以通过...原创 2009-04-07 16:14:03 · 221 阅读 · 0 评论 -
Java中的日期和时间
1. 使用Date: 使用System.currentTimeMillis()方法可以取得系统的时间,是从1970年1月1日0时0分0秒到当前系统时间的毫秒数。当使用Date对象时,会使用System.currentTimeMillis()来取得系统时间,使用Date实例的toString()方法时,会将取得的1970年1月1日0时0分0秒至今的毫秒数转为“星期 月 日 时...原创 2009-04-07 11:26:52 · 101 阅读 · 0 评论 -
meta-annotation
1. 所谓meta-annotation就是Annotation类型的数据,也就是Annotation类型的Annotation,在定义Annotation类型时,为Annotation类型加上Annotation可以为处理Annotation类型的分析工具提供更多的信息。2. java.lang.annotation.Retention类型可以在您定义Annotation类型时,指示编译器该...原创 2009-04-07 09:23:00 · 211 阅读 · 0 评论 -
Annotion
1. Annotation对程序运行没有影响,它的目的在于对编译器或分析工具说明程序的某些信息,您可以在包、类、方法、域成员等加上Annotation。每个Annotation对应于一个实际的Annotation类型。2. 限定Override父类方法@Override java.lang.Override是J2SE 5.0中标准的Annotation类型之一,它对编译器说明某个方法必须...原创 2009-04-06 23:05:32 · 231 阅读 · 0 评论 -
BufferedReader和BufferedWriter
1. java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。...原创 2009-04-04 15:36:41 · 232 阅读 · 0 评论 -
FileReader和FileWriter
1. 如果想要存取的是一个文本文件,可以直接使用FileReader和FileWriter类,它们分别继承自InputStreamReader和OutputStreamReader。可以直接指定文件名称或File对象来打开指定的文本文件,并读入流转换后的字符,字符的转换会根据系统默认的编码(如果需要指定编码,则还是使用InputStreamReader和OutputStreamReader).2...原创 2009-04-04 14:58:39 · 177 阅读 · 0 评论 -
Java枚举类型的使用
1. 在J2SE5.0中要定义枚举类型是使用enum关键词,枚举类型主要提供一些常数。如下列代码定义了Action枚举类型: public enum Action{ TURN_LEFT, TURN_RIGHT, SHOOT} 在Action.java中编写此段代码并编译,虽然语法上不像是在定义类,但枚举类型本质上就是一个类。所以编译完成后,会产生一个A...原创 2009-04-02 11:03:22 · 185 阅读 · 0 评论 -
Java内嵌类
1. 类中还可以再定义类,称之为“内嵌类(Inner Class)或嵌套类(Nested)”。非静态的内嵌类可以分为3种:成员内嵌类(Member Inner Class)、区域内嵌类(Local Inner Class)与匿名内嵌类(Anonymous Inner Class)。内嵌类的主要目的不是对外部隐藏类的存在性。2. 使用内嵌类的几个好处:其一是内嵌类可以直接存取其所在类中的私用成员...原创 2009-04-02 08:56:02 · 659 阅读 · 0 评论 -
接口示例
1. 定义一个接口: public interface IRequest{ public void execute();} 2. 两个具体的类: public class HelloRequest implements IRequest{ private String name; public HelloRequest(St...原创 2009-04-01 21:46:41 · 114 阅读 · 0 评论 -
抽象类应用
1. 首先定义一个抽象类,在类中定义了start()方法,其中实现了比大小的规则,但并没有实现如何取得使用者输入和信息的显示方式,只先定义了抽象方法showMessage()与getUserInput()。public abstract class AbstractGuessGame{ private int number; public void setNumber(int numbe...原创 2009-04-01 21:16:58 · 248 阅读 · 0 评论 -
一个重写equals()和hashCode()方法的例子
下面是一个根据业务键实现equals()与hashCode()的例子。实际中需要根据实际的需求,决定如何利用相关的业务键来组合以重写这两个方法。 public class Cat { private String name; private String birthday; public Cat() { } public void setName(String name)...原创 2009-04-01 17:04:36 · 225 阅读 · 0 评论 -
Object类基础
以下代码是一个简单的集合(Collection)类,可以将一些自定义的类加入其中。public class SimpleCollection{ private Object[] objArr; private int index = 0; public SimpleCollection() { //预设10个对象空间 objArr ...原创 2009-04-01 16:43:00 · 145 阅读 · 0 评论 -
Java对不定长度参数的支持
1. J2SE 5.0开始支持不定长度参数(Variable-length Argument),如下代码: public class MathTool{ public static int sum(int... nums) //使用...声明参数 { int sum = 0; ...原创 2009-04-01 14:41:32 · 136 阅读 · 0 评论 -
Java重载和static块相关问题
一. Java在使用到类时才加载类到程序中。如果在加载类时,希望先进行一些类的初始化动作,可以使用static定义一个静态区块,并在当中编写类载入时的初始化动作。例如: public class SomeClass{ static { System.out.println("The class is loaded!"); ...原创 2009-04-01 14:32:58 · 170 阅读 · 0 评论 -
Java的StringBuilder类
如果程序对附加字符串的需求很频繁,不建议使用+来进行字符串的串联。可以考虑使用java.lang.StringBuilder类,使用这个类所产生的对象默认会有16个字符的长度,您也可以自行指定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder对象会自动增加长度以容纳被附加的字符。如果有频繁作字符串附加的需求,使用StringBuilder类能使效率大大提高。如下代码:...原创 2009-04-01 09:41:11 · 128 阅读 · 0 评论 -
慎用Java的自动装箱与拆箱功能
J2SE5.0后提供了自动装箱与拆箱的功能,此功能事实上是编译器来帮您的忙,编译器在编译时期依您所编写的方法,决定是否进行装箱或拆箱动作。例如: Integer i = 100;相当于编译器为您作以下的语法编译: Integer i = new Intege...原创 2009-03-31 15:59:26 · 221 阅读 · 0 评论 -
Java输入输出
在命令行下要输入数据到程序中时,可以使用标准输入串对象System.in。但是实际中却很少直接使用它,因为System.in对象所提供的read()方法,是从输入串中取得一个字节的数据,并返回该字节的整数值,但如果您要取得的输入是一个字符串,或是一组数字时,System.in对象的read()方法一次只读入一个字节数据的方式并不适用。此时,可以通过java.util.Scanner类来取得使用者...原创 2009-03-31 10:36:09 · 111 阅读 · 0 评论 -
Java泛型
由于Java中所有定义的类,都以Object为最上层的父类,所以在J2SE 5.0之前,Java程序人员可以使用Object定义类来实现与泛型类似的功能。为了让定义出来的类可以更加通用,传入的值或返回的实例都以Object类型为主。当要取出这些实例来使用时,必须记得将之转换为原来的类型或者适当的接口,这样才可以实现对象上的方法。然而,使用Object类来实现泛型类留下了一些问题,因为必须要转换类...原创 2009-04-02 15:14:34 · 89 阅读 · 0 评论 -
finalize()方法终结条件验证 示例代码
package Initialization;class Tank{ int howFull = 0; Tank() { this(0);} Tank(int fullness){ howFull = fullness; } void sayHowFull(){ if(howFull == 0) System.out.println("Tank i...原创 2009-09-20 09:23:07 · 287 阅读 · 0 评论