Java习惯用法总结
作者:网络转载 发布时间:[ 2015/4/7 13:55:08 ] 推荐标签:Java 软件开发 用法 总结
启动一条线程
下面的三个例子使用了不同的方式完成了同样的事情。
实现Runnnable的方式:
void startAThread0(){
new Thread(new MyRunnable()).start();
}
class MyRunnable implements Runnable{
public void run(){
...
}
}
继承Thread的方式:
void startAThread1(){
new MyThread().start();
}
class MyThread extends Thread{
public void run(){
...
}
}
匿名继承Thread的方式:
void startAThread2(){
new Thread(){
public void run(){
...
}
}.start();
}
不要直接调用run()方法。总是调用Thread.start()方法,这个方法会创建一条新的线程并使新建的线程调用run()。
参考:java.lang.Thread,java.lang.Runnable。
使用try-finally
I/O流例子:
void writeStuff()throws IOException{
OutputStream out=new FileOutputStream(...);
try{
out.write(...);
}finally{
out.close();
}
}
锁例子:
void doWithLock(Lock lock){
lock.acquire();
try{
...
}finally{
lock.release();
}
}
如果try之前的语句运行失败并且抛出异常,那么finally语句块不会执行。但无论怎样,在这个例子里不用担心资源的释放。
如果try语句块里面的语句抛出异常,那么程序的运行会跳到finally语句块里执行尽可能多的语句,然后跳出这个方法(除非这个方法还有另一个外围的finally语句块)。
从输入流里读取字节数据
InputStream in=(...);
try{
while(true){
int b=in.read();
if(b==-1)
break;
(...process b...)
}
}finally{
in.close();
}
read()方法要么返回下一次从流里读取的字节数(0到255,包括0和255),要么在达到流的末端时返回-1。
参考:java.io.InputStream.read()。
从输入流里读取块数据
InputStream in=(...);
try{
byte[]buf=new byte[100];
while(true){
int n=in.read(buf);
if(n==-1)
break;
(...process buf with offset=0 and length=n...)
}
}finally{
in.close();
}
要记住的是,read()方法不一定会填满整个buf,所以你必须在处理逻辑中考虑返回的长度。
参考:java.io.InputStream.read(byte[])、java.io.InputStream.read(byte[],int,int)。
从文件里读取文本
BufferedReader in=new BufferedReader(
new InputStreamReader(new FileInputStream(...),"UTF-8"));
try{
while(true){
String line=in.readLine();
if(line==null)
break;
(...process line...)
}
}finally{
in.close();
}
BufferedReader对象的创建显得很冗长。这是因为Java把字节和字符当成两个不同的概念来看待(这与C语言不同)。
你可以使用任何类型的InputStream来代替FileInputStream,比如socket。
当达到流的末端时,BufferedReader.readLine()会返回null。
要一次读取一个字符,使用Reader.read()方法。
你可以使用其他的字符编码而不使用UTF-8,但好不要这样做。
参考:java.io.BufferedReader、java.io.InputStreamReader。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
Java性能测试有哪些不为众人所知的原则?Java设计模式??装饰者模式谈谈Java中遍历Map的几种方法Java Web入门必知你需要理解的Java反射机制知识总结编写更好的Java单元测试的7个技巧编程常用的几种时间戳转换(java .net 数据库)适合Java开发者学习的Python入门教程Java webdriver如何获取浏览器新窗口中的元素?Java重写与重载(区别与用途)Java变量的分类与初始化JavaScript有这几种测试分类Java有哪四个核心技术?给 Java开发者的10个大数据工具和框架Java中几个常用设计模式汇总java生态圈常用技术框架、开源中间件,系统架构及经典案例等

sales@spasvo.com