Java
文章平均质量分 64
nyzhl
while(SUCCESS!=try());
展开
-
Java中的byte
很郁闷 一段很简单的代码 把ARGB转为RGBA,结果图像颜色偏红。搞了很久,才知道问题出在了byte身上。一个颜色分量8位,想当然的用了byte,组合成一个像素32位,就是(r问题就出在了byte到int的转换上byte在Java中是有符号的 (win32中是unsigned char)这样0xFF转成int就变成0xFFFFFFFF (-1)也就是说如果蓝色原创 2010-01-27 19:43:00 · 816 阅读 · 0 评论 -
Java finalize() 方法 -Java 学习笔记 (18)
Java中所有类都从Object类中 继承finalize()方法。当垃圾回收器(garbage colector)决定回收某对象时,就会运行该对象的finalize()方法。值得C++程序员注意的是,finalize()方法并不能等同与析构函数。Java中是没有析构函数的。C++的析构函数是在对象消亡时运行的。由于C++没有垃圾回收,对象空间手动回收,所以一旦对象用不到时,程序员就应当把它del原创 2007-06-03 22:01:00 · 1516 阅读 · 0 评论 -
Java版 二分法查找 -Java 学习笔记 (21)
public class SearchTest ...{ public static void main(String[] args) ...{ int[] a = ...{0,5,7,8,14,25,52,78,98,100}; int rst=BinarySearch(8,a); System.out.println(rst);原创 2007-06-06 00:05:00 · 855 阅读 · 0 评论 -
Java Upcasting 上溯造型 Downcasting -Java 学习笔记 (17)
Upcasting,上溯造型,有的书译作“向上转型”,是实现Java多态(Polymorphism) 的基石。上溯造型,乍听之下觉得挺高深的,但是道理说明白了并不复杂。Casting只的是对象之间类型的转换。将一个对象的引用(Object Reference)看作其父类对象的引用(Reference to base type)叫做Upcasting(上溯造型或向上转型)。反之,将对象的引用看作原创 2007-06-03 20:26:00 · 3972 阅读 · 4 评论 -
Java 对象的 toString() 方法 -Java 学习笔记 (16)
Java中所有对象都自Object类继承了toString()方法。toString()方法返回当前对象的字符串表示在用到对象的字符串表示时,系统会自动调用对象的toString()方法,如print()函数,字符串"+"运算等。自定义类的toString()表示public class ToStringTest ...{ public static void main (St原创 2007-05-31 23:44:00 · 5091 阅读 · 0 评论 -
Java中对象的比较 == 和 equals() -Java 学习笔记 (15)
Java在对象对比时可以用符号和"=="方法 equals();"=="符号只是单纯的比较对象引用的指针是否相等。我们知道在Java中,Object myObject 其中myObject是引用变量,是指向具体堆内存中对象的指针。也就是说Object a,b 若a == b 则说明a和b指向同一个对象,若a和b指向不同的对象,即使这两个对象完全相同,a != b所有类都会从Object类中继承e原创 2007-05-31 23:10:00 · 1400 阅读 · 3 评论 -
Java构造函数的继承-Java 学习笔记 (14)
Java的派生类在对内存中有两部分构成,一部分是继承自父类的对象,另一部分则是本身新有的成员。 所以,在构造派生类对象时,应该先构造父类对象,调用父类的构造函数(Constructor)。在派生类没有显式调用父类的构造函数时,Java编译器调用父类的默认构造函数(就是无参数的构造函数)。示例:this关键字指代当前对象 this();是当前对象的构造函数super关键字指代父类对象 super原创 2007-05-31 00:12:00 · 1130 阅读 · 2 评论 -
Java 学习笔记 (13) - 基本内存分析 和 垃圾回收机制
Java中的值变量是放在栈(Stack)中的,而引用变量则是放在堆(Heap)中的。在JVM装载Java程序时,首先创建用到类的类对象,静态(static)成员在这时首先被初始化。当遇到赋值声明时,就在栈空间内根据数据类型开辟一块区域用来存放变量。如果是声明引用变量,则在栈中存放一个指向具体对象的指针(内存地址)。遇到new关键字时,就在堆内存中申请空间存放对象,并返回对象的指针。例:int原创 2007-05-29 16:44:00 · 866 阅读 · 0 评论 -
Java 学习笔记 (11) - final 关键字
final的英文意思是最终的,在Java里可以理解为不可以改变的 final属性用final关键字声明的变量只能一次性赋值,不能改变,其实应该叫做常量了。相当于C++中const关键字应该注意的一点是,final声明的引用(如对象和数组)中,引用指针不能改变,也就是说,引用指针只能一次性指向一块内存,以后不能再指向别的内存块,但是并不关心内存块内是否有所变化如:final MyCla原创 2007-05-27 22:12:00 · 690 阅读 · 0 评论 -
Java 学习笔记 (12) - 动态绑定
这里的绑定指的是对象和方法间的关联绑定有两种形式静态绑定static-binding(早绑定early-binding)和动态绑定dynamic-binding(晚绑定late-binding,或运行时绑定runtime-binding)静态绑定是在编译时绑定,而动态绑定是在运行时根据对象的实际情况来选择绑定父类或者是某个子类的方法在执行效率上,静态绑定要优于动态绑定,但丧失了灵活性在C++中,函原创 2007-05-27 22:43:00 · 992 阅读 · 0 评论 -
Java 学习笔记 (8) - GUI编程之 Frame
awt编程中,主窗口(extends)继承自java.awt.Frame类废话就不说了 来个例子一看就明白了import java.awt.*;public class FrameTest extends Frame ...{ Button b1=new Button("Click Me");//声明一个按钮 TextField t1=new TextField("",原创 2007-05-22 20:53:00 · 833 阅读 · 0 评论 -
Java 学习笔记 (10) - Java 函数的递归调用
函数的递归调用不是什么新东东 C语言里面就有了 复习一下函数的递归调用就是函数自己调用自己,和循环的一个道理的 所以大部分递归函数也可以写成迭代的方法 /** *//** *求数num的阶乘*/public class Factorial ...{ //递归调用 static int fac(int x) ...{ if(x==1)原创 2007-05-24 18:59:00 · 1080 阅读 · 0 评论 -
区别 String 类 和 StringBuffer 类 -Java 学习笔记 (19)
简单来说,String类 是不可变的字符序列,而StringBuffer则是可变的字符序列。Buffer,缓冲区,是把数据暂时存起来,然后一次性处理。问题是,既然String类是不可变的,那么String类怎么赋值并计算呢?如String s1 = "Firstname";String s2 = "Lastname";s1 = s1 + s2 ;这样做后我们输出s1,我们发现s1.toStri原创 2007-06-05 23:33:00 · 807 阅读 · 0 评论 -
验证:Java 中 static方法 是 早绑定
关于绑定见 http://blog.csdn.net/nyzhl/archive/2007/05/27/1627601.aspx我们知道,Java中默认是晚绑定(late binding) ,这个叫法比较混乱,有人叫静态绑定(static binding),还有人叫运行时绑定(runtime binding),他们说的都是一回事。但凡事都有例外。final关键字声明的就是早绑定。因为final原创 2007-06-04 14:17:00 · 801 阅读 · 0 评论 -
关于Android应用的内存管理及性能
现在有一个有趣的现象,Android平台的手机用户并不多,而开发者数量已经呈爆炸趋势。不过这种现象应该会很快有所改观,全球各大知名厂商(除了固执的Nokia)都在紧锣密鼓地推自己的Android手机。作为一个初学者,我很难理解Google的一些策略用意,首要的就是内存及效率方面。1.力挺Java。不可否认,Java是一门语法简洁,先进而有魅力的语言,它在很多方面都要比臃肿衰老的C/C+原创 2009-09-03 00:42:00 · 2843 阅读 · 1 评论 -
Observer (Java) - Design Patterns学习笔记(3)
观察者模式,就是观察者在被观察对象里注册自己的一个引用,当被观察对象发生观察者敏感的变化时,被观察对象发给注册的所有观察者发送消息(函数调用),观察者做出相应的响应。观察者模式应用很多,比如说经常用到的事件响应。你总不能再起一个线程在那里傻傻不动地监听对象变化,最好的做法就是让对象发生敏感变化时主动给观察者发一个消息,这样就不会造成不必要的开销。今天写了一个观察者的例子:闹钟(被观察对象原创 2007-12-09 23:19:00 · 1225 阅读 · 0 评论 -
Factory - Design Patterns学习笔记(2)
工厂模式创建了一个生产对象的工厂,是很常用的一种模式。通常可以把工厂模式划分为工厂方法,抽象工厂,反射工厂三种模式。工厂方法和抽象工厂的耦合度较大,所以在C#和Java之类支持反射(Reflection)的语言中,一般选择使用反射工厂。反射工厂在程序运行时通过类装载器动态地装载所需的类,这样,在增加产品实现时,就不必再修改工厂类了,消除了产品类和工厂类之间的耦合。我们以动物工厂为例://先引原创 2007-10-25 12:53:00 · 852 阅读 · 0 评论 -
Singleton - Design Patterns学习笔记(1)
从前些天开始看设计模式的书开始就想写学习笔记。但是最近鲜有机会上网,而且要备战软考,就一直没写。关于Singleton的翻译问题好多书都不一致,有的叫单态,有的叫单身,单件(个人认为这个比较贴切)。我觉得专业名词还是不要翻译为好,免得给人造成困扰。个人觉得Singleton算是最简单,最好理解的设计模式了。它表示某个类只能有一个对象。在程序中,比如一些配置文件,应该只有一个对象的。这时,我原创 2007-10-23 18:46:00 · 1035 阅读 · 0 评论 -
Java ToyProgam LunacyDoctor implements IO and Sequence Stack
前面写了链栈 http://blog.csdn.net/nyzhl/archive/2007/06/18/1656153.aspx现在写了个程序实现顺序栈//Coding by zhaohongliangimport java.io.*;public class LunacyDoctor ...{ public static void main(String[] args) ...{原创 2007-06-18 10:57:00 · 739 阅读 · 0 评论 -
Java Generic 泛型 - Java 学习笔记 (24)
Java从JDK 1.5 以后引入了Generic泛型的概念,指定传入类型,以便于解决类型转换造成效率低下的问题。在C#中也有泛型的概念,相当于C++中的类模板。public class GenericTest ...{ public static void main(String[] args) ...{ Integer i = new Integer(100);原创 2007-06-14 00:35:00 · 1160 阅读 · 0 评论 -
Java 错误 创建泛型数组 解决方法
泛型类://Coding by zhaohongliangclass SeqStackT> ...{ private final int size; private T[] elem; private int top; public SeqStack(int size) ...{ this.top = -1; this.size = s原创 2007-06-15 13:27:00 · 6608 阅读 · 5 评论 -
Java Auto Boxing and Unboxing -Java 学习笔记 (23)
JDK 1.5以后引入了不少概念 作为一个半调子.NET Developer 我发现像Boxing Unboxing(装箱 拆箱 有人译作打包解包)还有Generic(泛型) 这些概念和 C# 有着惊人的相似。在学C#时 觉得Boxing 和 Unboxing很难理解 因为看名字装箱 拆箱 ,把我的思维拉到箱子上面去了。现在看来,以前的想法挺可笑的。这里的装箱应该理解为 封装对象 ,即把基础原创 2007-06-13 14:20:00 · 3168 阅读 · 3 评论 -
Java IO 实现文件复制 -Java 学习笔记 (25)
Java中的输入输出操作是由Stream(流)来实现的。这个C#,C++这些OO语言是一样的。Stream是一种很形象的说法。数据在进行IO操作时就像水一样 由这一端流向另一端。 我们在API Docs中可以看到java.io包里面有许多这样名称以Stream结尾的流类。文件复制源文件//Coding by zhaohongliangimport java.io.*;public clas原创 2007-06-14 19:28:00 · 3575 阅读 · 2 评论 -
Java 实现 文件目录 遍历 - Java 学习笔记 (22)
import java.io.File;public class ShowAllFiles ...{ public static void main (String[] args) ...{ String usage = "Usage:Please input a directory."; if(args.length != 1) ...{原创 2007-06-11 17:45:00 · 1001 阅读 · 0 评论 -
Java版 选择排序 -Java 学习笔记 (20)
public class NumberSort ...{ public static void main (String[] args) ...{ int len = args.length; if(len0) ...{ System.out.println("Usage:Type some numbers,They will be so原创 2007-06-05 23:53:00 · 1084 阅读 · 0 评论 -
Java 学习笔记 (9) - Java 事件机制 内部匿名类的应用
java中要实现一个事件,必须要向触发事件的对象注册如Button类的对象 b1要触发一个点击事件,就要向b1注册:b1.addActionLIstener(object);其中object是 事件响应类的对象事件响应类继承自ActionListener类,需要重写actionPerformed(ActionEvent e);函数actionPerformed函数实现了发生事件后要做什么示例:原创 2007-05-22 21:19:00 · 860 阅读 · 0 评论 -
Java 学习笔记 (6) - 关键段 critical section
关键段(critical section) 用关键字synchronized声明在多线程程序中,关键段具有原子性,关键段没有执行完即使该线程时间片完也不会切换到下个线程运行关键段时,线程需要获得对象的key,线程获得key后就锁住对象资源,知道关键段运行完毕才会释放key就像ASP.NET中的Lock();和Unlock();一样 相当于操作系统和数据库原理的加锁解锁的概念声明方法:synch原创 2007-05-19 23:40:00 · 3361 阅读 · 0 评论 -
窗口关闭 事件处理 -Java学习笔记(36)
我们写了一段Java GUI程序,当你点击窗口右上角的叉叉时,程序不会像C#一样,自动替你做这件事情。我们看不到任何反应。我们需要自己写窗口关闭的事件处理。窗口关闭处理需要实现WindowListener接口(为了简便,通常继承类WindowAdapter)的windowClosing方法。//: WindowClosing.javaimport java.awt.*;import jav原创 2007-07-31 20:41:00 · 2042 阅读 · 0 评论 -
持有对象的引用 -Java学习笔记(33)
我们很多时候会遇到一个类的成员需要用到另外的类的一些成员,这时候会有很多解决方法,例如传参或是声明内部类。但是在某些场合下他们都有弊端存在。传参不利于数据成员的管理,并且操作烦琐。内部类很好用,但是在类对象很多并且分布在很多类中时就不适用了。内部类适用于在只有一个类用到它,希望这个类把它封装起来的情况下。所以我们通常在事件响应中使用匿名内部类,因为事件响应过程的复用度不高,通常只响应一个事件而已。原创 2007-07-30 00:10:00 · 2082 阅读 · 0 评论 -
Listener & Adapter -Java学习笔记(35)
Java事件是靠实现接口Listener类来完成的。但是有一些Listener不止有一个方法。如果要实现Listener,就必须重写所有的抽线方法,而我们往往只需要响应一个事件,只重写一个方法。这样如果实现Listener接口的话就会很烦琐。例如,MouseListener就有mouseClicked(),mousePressed(),mouseEntered(),mouseExited(),m原创 2007-07-30 12:05:00 · 2614 阅读 · 0 评论 -
Java 文档&注释 -Java学习笔记(32)
一段好的程序应该是易读的,并且有明了的文档。和C语系的其他大部分语言(C++,C#)一样,Java支持两种注释:1。/* 和 */ 注释一段代码2。// 注释一行代码Java中文档和源程序写在一起,用javadoc可以命令生成文档,这里自动生成的文档样式和sun的JDK文档是一样的。非常好用。这样程序会更加易读,并且修改更方便。文档以 /** 开始,以*/结尾,习惯上在每行开头都加上一原创 2007-07-26 22:35:00 · 983 阅读 · 0 评论 -
Container.paint(Graphics g) 方法 -Java学习笔记(34)
在类Container及其子类(如:Frame,Panel)的对象需要重绘时,JVM会自动调用它的public void paint(Graphics g)方法。//: PaintTest.javaimport java.awt.*;/** *//** * Method Container.pain() Test. * Using paint() to draw some shapes.原创 2007-07-30 10:27:00 · 2363 阅读 · 0 评论 -
JDK 提示 无法访问的语句
import java.io.*;public class SystemInTest ...{ public static void main (String[] args) throws Exception ...{ BufferedReader in = new BufferedReader ( new InputStreamReader (Sys原创 2007-07-20 17:47:00 · 4545 阅读 · 0 评论 -
Java UDP 网络编程 示例 -Java学习笔记(30)
Java UDP网络编程主要通过 DatagramSocket和DatagramPacket 两个类实现的,下面是一个示例程序,Server监听UDP 2000端口并把收到的Long类型数值打印出来Client则通过输入获得Long类型的数值,并把它发给ServerServer:/**//* Coding by nyzhl */import java.net.*;import jav原创 2007-07-20 18:11:00 · 12900 阅读 · 0 评论 -
Java 线程同步问题 生产者-消费者 算法实现 -Java学习笔记(29)
我们晦涩的操作系统课本也讲过 生产者-消费者问题,不过是由Pascal写的用来解决 进程 同步的,不幸的是我并没学过Pascal。考试时大家都是用C语言写的,但是我极其怀疑这些应试程序段能不能拿到项目中应用。课本上的算法是有信号量机制实现的(不要问我什么是信号量,课本上没讲)。声明一个int变量mutex(信号量),调用wait() signal()方法 。wait(mutex); /原创 2007-07-19 15:20:00 · 2286 阅读 · 0 评论 -
Java 网络编程 TCP vs UDP -Java学习笔记(31)
TCP (Transmission Control Protocol 传输控制协议):面向连接的,不可靠的,数据流服务。UDP (User Datagram Protocl 用户数据报协议):面向无连接的,不可靠的,数据报服务。TCP传输和UDP不一样,TCP传输是流式的,必须先建立连接,然后数据流沿已连接的线路(虚电路)传输。因此TCP的数据流不会像UDP数据报一样,每个数据报都原创 2007-07-24 12:01:00 · 6676 阅读 · 1 评论 -
Java 死锁的实现 -Java学习笔记(28)
当竞争资源或进程间推进顺序不当时,可能会出现死锁。关于死锁出现的条件,我们晦涩难懂的操作系统课本是这样总结的:1,互斥条件2,请求和保持条件3,不剥夺条件4,环路等待条件看了这些东西,很多人会感到一头雾水。如果你不是计算机专业科班出身并且成绩不赖的话,也许会很难理解。虽然这些总结非常精辟,但我总觉得国内大部分教材精辟过头了。在Java中,我们并不需要了解这么多细节的东西。死锁产生的原因很简单。原创 2007-07-17 21:09:00 · 1568 阅读 · 0 评论 -
Object Serialization and ObjectInputStream/ObjectOutputStream -Java 学习笔记 (27)
和其他OO语言一样,Java可以把Object转换成数据流,存储在硬盘上,也可以把读出硬盘数据并转换成对象,这叫做Object Serialization(对象串行化)。如果一个类要实现Serialization,则必须implements接口Serializable。接口Serializable并没有定义方法。它只是一个标记接口,向编译器和JVM 说明此对象可以Serialized。关键字t原创 2007-07-08 14:00:00 · 1290 阅读 · 0 评论 -
键盘 事件处理 -Java学习笔记(37)
处理键盘时间要实现KeyListener接口(为了简便,通常继承类KeyAdapter)的方法。如击键事件重写方法keyPressed,松开键keyReleased,敲字符keyTyped。 我们可以用KeyEvent.getKeyCode()来判断按下的是哪个键。KeyCode的定义在KeyEvent中的静态域(Field)里。下面一个示例程序,按键盘上的上下左右箭头键控制实心圆的位置。原创 2007-07-31 21:37:00 · 1316 阅读 · 0 评论 -
Java 学习笔记 (2) -Java 对象 间的 传递 赋值
Java 对象 间的 传递 赋值 Java中不存在拷贝构造函数(Copy Constructor) 对象间的传递实际上是引用(Reference)传递,就是说传递的不是对象,而是指向对象地址的指针(Pointer)例如:JavaMyObject mo1=new MyObject();MyObject mo2=new MyObject();mo1=mo2;这里mo1=mo2;相当于C#中的m原创 2007-05-08 13:31:00 · 2788 阅读 · 1 评论