
Effective Java
文章平均质量分 78
wjy320
这个作者很懒,什么都没留下…
展开
-
赋值操作符的思考
我要说的是一个小问题,感觉写在博客里面比较好。以后看到了可以回忆警示一下。 问题是这样的:在Java中数组之间能不能通过数组名直接赋值,为什么? 在C中数组之间能不能通过数组名直接赋值,为什么?我们先来分析C语言中的情况: char arr[3]={'a','b','c'}; ch...原创 2014-04-18 11:03:07 · 109 阅读 · 0 评论 -
Java对象序列化/反序列化的注意事项
Java对象序列化 对于一个存在Java虚拟机中的对象来说,其内部的状态只是保存在内存中。JVM退出之后,内存资源也就被释放,Java对象的内部状态也就丢失了。而在很多情况下,对象内部状态是需要被持久化的,将运行中的对象状态保存下来(最直接的方式就是保存到文件系统中),在需要的时候可以还原,即使是在Java虚拟机退出的情况下。 对象序列化机制是Java内建的一种对象持久化方式,可以很容易实现在J...2014-01-06 16:41:00 · 191 阅读 · 0 评论 -
Java使用Socket传输文件遇到的问题
1.写了一个socket传输文件的程序,发现传输过去文件有问题。找了一下午终于似乎找到了原因,记录下来警示一下:接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决了问题。个人认为可能是传输过程中,接收端向磁盘写速度有点慢,被后面的覆盖导致错误。//---------------------------------------------------...2014-01-06 16:41:00 · 550 阅读 · 0 评论 -
服务端的线程池方案1
服务端处理客户端的请求,对于Socket采用TCP连接的手段来说,由于一个SocketServer只对应和一个Socket通信。所以,为了有效的控制服务端的服务质量,采取线程池的策略。集体说来就是开启若干个SocketServer来对预想连接到服务器的客户端们进行处理,若是同一时间有很多客户端涌入,线程池中的ServerSocket都不够用了都被占用了,则多余的那些客户端就先等待,等有的Se...2014-01-06 16:41:00 · 110 阅读 · 0 评论 -
服务端的线程池方案2
Java提供了一个很好地类来实现1中的线程池功能就是Executors类。将服务端代码改变一下就OK了。当然了,ReceiveFile类还需要改变一下(实现一个Runnable接口,并将receiveFile方法的内容写到run方法中,删除receiveFile方法即可)。package com.wjy.threadpool;import java.io.BufferedIn...2014-01-06 16:41:00 · 90 阅读 · 0 评论 -
Java线程同步
一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。package com.wjy.synchronize;public class MyThread implements Runnable{ @Override ...2014-01-06 16:41:00 · 138 阅读 · 0 评论 -
线程同步的故事描述
最近看了一个描述同步的很好比喻,分享一下:打个比方:一个object就像一个大房子,大门永远打开。房子里有 很多房间(也就是方法)。这些房间有上锁的(synchronized方法), 和不上锁之分(普通方法)。房门口放着一把钥匙(key),这把钥匙可以打开所有上锁的房间。另外我把所有想调用该对象方法的线程比喻成想进入这房子某个 房间的人。所有的东西就这么多了,下面我们看看...2014-01-06 16:41:00 · 200 阅读 · 0 评论 -
线程较为深的度剖析1
为了探索同步的特性做了些实验:package com.wjy.synchronize;public class MyThread implements Runnable{ @Override public void run() { // TODO Auto-generated method stub synchronized...2014-01-06 16:41:00 · 80 阅读 · 0 评论 -
ByteBuffer和String的互相转换
import java.nio.ByteBuffer; import java.nio.CharBuffer; import java.nio.charset.Charset; import java.nio.charset.CharsetDecoder; public class TopNTool { /** * Strin...2014-01-06 16:41:00 · 1251 阅读 · 0 评论 -
慎用重载_1
对象的运行时类型并不影响“哪个重载版本将被执行”;选择工作是在编译时候进行的,完全基于参数的编译时类型。看个例子先:package com.wjy.multithread;public class MainTest { public static void show(int a){ System.out.println("Int...2014-01-06 16:41:00 · 98 阅读 · 0 评论 -
慎用重载_2
看一个重载造成的恶果:List<Integer> list=new ArrayList<Integer>(); for(int i=-3;i<3;i++){ list.add(i); } for(int i=0;i<3;i++){ ...2014-01-06 16:41:00 · 117 阅读 · 0 评论 -
Java提供的enum详解
今天第一天看<<Effective Java>>,看了第六章的第一条就是全书的第30条--用enum代替int常量。1.第一次知道原来enum也可以像class那样拥有成员函数。举个四则运算的例子:package com.wjy.test;public enum Operation { PLUS,MINUS,TIMES,DIVIDE; ...2014-01-06 16:40:00 · 170 阅读 · 0 评论 -
初尝Java序列化/反序列化对象
看个类:package com.wjy.bytes;import java.io.Serializable;public class ObjTest implements Serializable{ private int age; private String name; public ObjTest(int age, String nam...2014-01-06 16:41:00 · 85 阅读 · 0 评论 -
Java的byte数组
今天我们讨论一下Java的byte数组。byte数组就是字节数组,每一位存一个字节。看下面程序,猜猜输出多少?package com.wjy.bytes;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOE...2014-01-06 16:41:00 · 317 阅读 · 0 评论 -
Arrays的注意事项
在java.util类库中可以找到Arrays类,这个类有着强大的对数组进行操作的能力。Arrays.sort可以对数据进行排序,而Arrays.binarySearch()可以执行快速的查找返回指定元素在数组中的位置,从0开始。但是要注意了: 1.如果要对未排序的数组使用binarySearch()那么将产生不可预料的结果。 System.arraycop...原创 2014-01-07 09:05:05 · 131 阅读 · 0 评论 -
将一个字符串反转的方式
首先要先介绍一下如何将两个字母,不借助额外的空间做到交换。 如下所示,提供两种方式:private static void swap1(char a,char b){ System.out.println("a is: "+a); System.out.println("b is: "+b); a=(char) (a+b);...原创 2014-02-20 11:05:02 · 173 阅读 · 0 评论 -
Java中的enum
众所周知enum是一个很好地东东,类型安全,甚至在序列化/反序列化的时候也是安全的,那么总结一下enum的用法:用法一:常量在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。public enum Color { RED, ...原创 2014-06-23 21:44:48 · 121 阅读 · 0 评论 -
Java中的Properties类介绍
最近在看ZK(ZooKeeper)的源码,发现源码中用到了Properties类加载配置信息,所以小研究一下: .properties文件是一行一行以等号分割的键值对,允许有多余的空格(所以经常取出来要用String的trim方法去除首尾多余的空格)。 下面看个例子就行了,Properties类的使用很简单: InputStream inStre...原创 2014-06-13 11:14:33 · 316 阅读 · 0 评论 -
一种Handle结构
最近看到了这样一篇博客,感觉写的很好。尤其是它其中叙述的这种基于事件的模型。 博客地址: http://www.ibm.com/developerworks/cn/java/l-niosvr/#icomments 我也是照猫画虎的写了个示例程序,不知道对不对我斗胆描述一下这个结构: 1.定义一个接口,定义需要提供的服务。 2.定义一个抽象...原创 2014-01-10 11:47:21 · 232 阅读 · 0 评论 -
File类并非File
File类这个名字有一定的误导性,可能会认为他代表的是文件。其实不然,他既可以代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。若他指的是一个文件集,我们就可以对此集合调用list()方法,这个方法会返回一个字符串数组。 File类有很多NB的函数,在IDE中看一看就知道。还可以计算出所在磁盘的剩余空间和总空间。诸如这些强大的功能是很多的。...原创 2014-01-08 15:30:03 · 179 阅读 · 0 评论 -
正则表达式剖析
1.看个小例子先:package com.wjy.pattern;import java.io.PrintWriter;public class Pattern1 { public static void main(String args[]) { PrintWriter out=new PrintWriter(System.out,true); o...原创 2014-01-08 14:42:32 · 109 阅读 · 0 评论 -
Java的标准I/O剖析
System.out是一个PrintStream,而PrintStream是一个OutputStream。PrintWriter有一个可以接受OutputStream做为参数的构造器,所以可以将System.out转换成PrintWriter: PrintWriter writer=new PrintWriter(System.out,true);...原创 2014-01-08 11:15:38 · 133 阅读 · 0 评论 -
初始化问题
1.class Test{ private int num; void ope(){ num++; } }以上是合法的。2.class Test{ //private int num; void ope(){ ...原创 2014-01-07 18:27:46 · 128 阅读 · 0 评论 -
Java逻辑操作符
Java的逻辑操作符有:与(&&),或(||),非(!)。总共三个。 与C++和C不同的是,不可将一个非布尔值当做布尔值在逻辑表达式中使用。Java的逻辑操作符只可应用于布尔值。例如如下的代码就是不合法的: int it,em; boolean ...原创 2014-01-07 16:00:23 · 162 阅读 · 0 评论 -
条件操作符的问题
看看一下代码先:char x='a';double ii=2.0; System.out.println(true?x:0); System.out.println(false?ii:x); 运行结果: a 97.0呀呀呀,不应该是两个a吗?原来,条件操作符的第一个操作数和第二个操作数的类...原创 2014-01-07 10:42:49 · 126 阅读 · 0 评论 -
十六进制计算问题
System.out.println(Long.toHexString(0x100000000L+0xcafebabe)); 先看看以上代码,感觉答案应该是:1cafebabe。但是答案却是:cafebabe。为什么呢,怎么感觉像是int型变量的相加,第32位的1被舍弃了。看看以下代码就明白了:int hex=0xcafebabe; System.out.printf("h...原创 2014-01-07 10:20:01 · 457 阅读 · 0 评论 -
Java字节流和字符流
file.txt文本中存储的内容:好abc1.字符流处理:package com.wjy.java;import java.io.FileInputStream;import java.io.FileReader;import java.io.IOException; class Test { public static void main(St...2014-01-06 16:40:00 · 95 阅读 · 0 评论 -
Java反射机制小例子
package com.wjy.main;import java.io.Console;import java.lang.reflect.Constructor;import java.lang.reflect.Method;import com.wjy.reflect.Student;public class TestMain { public s...2014-01-06 16:40:00 · 112 阅读 · 0 评论 -
接口的理解
例如一个EntityModel类拥有很多属性信息:name,age,height,weight。现在如果想使用其中的height和weight,可以定义一个接口Ibodyinfopackage com.wjy.understandinterface;public interface Ibodyinfo {public abstract double getHeight()...2014-01-06 16:35:00 · 132 阅读 · 0 评论 -
多态的思考
abstract class Father{ abstract void show();}class Son extends Father{ public void show(){ System.out.println("I am son."); }}public class start {public static...2014-01-06 16:35:00 · 109 阅读 · 0 评论 -
Java实现生产者消费者问题
生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,其解决方法是让生产者此时进行休眠,等待消费者从缓冲区中取走了一个或者多个数据后再去唤醒它...2014-01-06 16:35:00 · 142 阅读 · 0 评论 -
JAVA小知识——super()函数
super()方法是在子类继承超类这种关系中用到,不过只会出现在子类中。super()这种直接带括号的方法形式,是子类直接调用超类的构造函数。大部分情况是 super.超类方法()的形式,就是super后有个点,然后接上超类的方法,这样就是子类调用超类的方法。父亲和儿子吃饭的例子,如果儿子想学父亲用勺子吃饭了,那么就应该这样写://在没勺子的时候使用筷子:class...2014-01-06 16:34:00 · 183 阅读 · 0 评论 -
JAVA小知识——super和this的异同
super和this的异同: 1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句) 2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句) 3)super: 它引用当前对象的直接父类中的成员(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名 super.成员 函数据...2014-01-06 16:34:00 · 182 阅读 · 0 评论 -
java List的使用
先看List的继承关系图:Collection ├List │├LinkedList │├ArrayList Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java JDK不能提供直接继承自Collection的类,Java JDK...2014-01-06 16:34:00 · 109 阅读 · 0 评论 -
java map的使用
Map的继承关系如下图:Map ├Hashtable ├HashMap └WeakHashMap注意:Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当做一组key集合,一组value集合,或者一组key-value映射。Map特点...2014-01-06 16:34:00 · 94 阅读 · 0 评论 -
java set的使用
Set的继承关系:Collection └SetSet特点:元素无放入顺序,元素不可重复(注意:元素虽然无放入顺序,但是元素在set中的位置是有该元素的HashCode决定的,其位置其实是固定的)Set接口有两个实现类:HashSet(底层由HashMap实现),LinkedHashSet SortedSet接口有一个实现类:TreeSet(底层由平衡二叉树实现)set 一般...2014-01-06 16:34:00 · 84 阅读 · 0 评论 -
java中map list set 用法以及区别
转自:http://j2eemylove.iteye.com/blog/1195823List,Set,Map是否继承自Collection接口? 答:List,Set是,Map不是。 如图: Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├...2014-01-06 16:34:00 · 109 阅读 · 0 评论 -
java类的一些特殊效果
上代码:package com.wjy;public class Test { public static void main(String[] args){ Student s1=new Student(99); }}class Student{public static Student stu=new Student(22);//这里必须要static修饰,否则会出错。publi...2014-01-06 16:34:00 · 92 阅读 · 0 评论 -
java for语句的一个用法
上代码:package com.wjy;public class Test {public static void main(String[] args) {int[] attay = new int[5];for (int i : attay) {System.out.println("it is " + i);}}}运行结果:it is 0it is 0it is 0it...2014-01-06 16:34:00 · 91 阅读 · 0 评论 -
Java流读写
写:package com.wjy.write;import java.io.BufferedWriter;import java.io.FileOutputStream;import java.io.OutputStreamWriter;public class FileWriter { public void writeContent(){ ...2014-01-06 16:37:00 · 83 阅读 · 0 评论