`
yule1235
  • 浏览: 2226 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

详解Java编程的十一条基础规则

阅读更多
本文介绍的java规则的说明分为5个级别,级别1是最基本也是最重要的级别,在今后将陆续写出其他的规则。遵守了这些规则可以提高程序的效率、使代码有更好的可读性等。


(1) 避免使用NEW关键字来创建String对象


把一个String常量copy到String 对象中通常是多余、浪费时间的。



Public class test{
 Public void method(){
  System.out.print (str);
 }
 private String str = new String ("1"); //这里新建对象是完全没有必要的
 private String str2=”2” //正确的应该如此
}



(2) 避免使用不必要的嵌套


过多的嵌套会使你的代码复杂化,减弱可读性。



Public class test {
 String add (){
  Int c=(a=a+b)+b; //过于复杂
  Return c
 }
}



(3) 避免在同一行声明不同类型的多个变量


这样可以使程序更加清晰,避免混乱


private int index, index1[];


正确的应该如此:


private int index;

private int index1[];


(4) 在每一行里写一条语句


这条规则不包括for语句:比如:'for (int i = 0; i < 10; i++) x--;’可以增加代码的可读性。



public class OSPL {
 int method (int a, int b) {
  int i = a + b; return i; // 可读性不强
 }

  正确的:

public class OSPLFixed {
 int method (int a, int b) {
  int i = a + b;
  return i;
 }
}



(5)经常从finalize ()中调用super.finalize ()


这里的finalize ()是java在进行垃圾收集的时候调用的,和finally不一样。如果你的父类没有定义finally()的话,你也应该调用。这里有两个原因:(1)在不改变代码的情况下能够将父类的finally方法加到你的类中。 (2)以后你会养成习惯调用父类的finally方法,即使父类没有定义finally方法的时候。


正确的方法应该如此:



public class parentFinalize {
 protected void finalize () throws Throwable {
  super.finalize(); // FIXED
 }



(6) 不要在finalize ()中注销listeners


不要再finalize ()方法中中注销listeners,finalize ()只有再没有对象引用的时候调用,如果listeners从finalize()方法中去除了,被finalize的对象将不会在垃圾收集中去除。


public void finalize () throws Throwable {

 bButton.removeActionListener (act);

}


(7) 不要显式的调用finalize ()方法


虽然显式的调用这个方法可以使你确保你的调用,但是当这个方法收集了以后垃圾收集会再收集一次。



public class T7 {
 public void finalize() throws Throwable {
  close_resources ();
  super.finalize ();
 }
 public void close_resources() {}
}
class Test {
 void cleanup () throws Throwable {
  t71.finalize(); // 调用
  t71 = null;
 }
 private t71 = new T7 ();
}



对于这样的调用我们应该自己创建一个释放的方法,做最初finalize ()所作的事情,当你每次想显式的调用finalize ()的时候实际上调用了释放方法。然后再使用一个判断字段来确保这个方法只执行一次,以后再调用就没关系了。



public class T7 {
 public synchronized void release () throws Throwable{
  if (!_released) {
   close_resources (); // do what the old 'finalize ()'
   did _released = true;
  }
 }
 public void finalize () throws Throwable {
  release ();
  super.finalize ();
 }
 public void close_resources() {}
 private boolean _released = false;
}
class TestFixed {
 void closeTest () throws Throwable {
  t71 .release (); // FIXED
  t71 = null;
 }
 private T7 t71 = new T7 ();
}



(8)不要使用不推荐的API


尽量使用JDK1.3推荐的API。在类和方法或者java组件里有很多方法是陈旧的或者是可以选择的。有一些方法SUN用了"deprecated“标记。最好不要使用例如:



private List t_list = new List ();
t_list.addItem (str);



如果查一下javadoc的话,会发现建议用add()来代替addItem()。


(9)为所有序列化的类创建一个'serialVersionUID'


可以避免从你各种不同的类破坏序列的兼容性。如果你不特别制订一个UID的话,那么系统为自动产生一个UID(根据类的内容)。如果UID在你新版本的类中改变了,即使那个被序列化的类没改变,你也不能反序列化老的版本了。


public class DUID implements java.io.Serializable { public void method () {}}


在里面加一个UID,当这个类的序列化形式改变的时候,你也改变这个UID就可以了。



public class DUIDFixed implements java.io.Serializable {
 public void method () {}
 private static final long serialVersionUID = 1;
}


(10)对于private常量的定义


比较好的做法是对于这样的常量,加上final标记,这样的常量从初始化到最后结束值都不会改变。


private int size = 5;


改变后的做法是:


private final int size = 5;


(11)避免把方法本地变量和参数定义成和类变量相同的名字


这样容易引起混扰,建议把任何的变量字都定义成唯一的。这样看来,SCJP里的那些题目在现实中就用不到了:)


public void method (int j) { final int i = 5; // VIOLATION } private int j = 2;


  建议:


public void method (int j1) { final int i = 5; // VIOLATION } private int j = 2;


分享到:
评论

相关推荐

    125集专攻JAVA基础 JAVA零基础入门学习视频教程 动力节点JAVA视频教程.txt

    京动力节点-Java编程零基础教程-001-编程基础-基本概念-语言、程序、编程.mp4 北京动力节点-Java编程零基础教程-002-编程基础-基本概念-编译.mp4 北京动力节点-Java编程零基础教程-003-编程基础-基本DOS操作.mp4 ...

    JAVA SE应用详解.pdf

    、基本语法规则、面向对象核心技术、数组和集合、异常处理、文件和数据流、图形用户界面、线程、网络编程和数据库程序设计。_x000D_本书以初学者为 起点,每个章节循序渐进地向读者介绍了Java相关核心知识,并设计...

    Java基础知识点总结.docx

    二、 Java语法基础 5 数据类型 5 运算符号 14 语句 15 函数 15 方法重载(Overloadjing)与重写(Overriding) 16 数组 17 总结 18 三、 常见关键字 20 四、 面向对象★★★★★ 21 五、 封装(面向对象特征之一)★...

    java基础案例与开发详解案例源码全

    3.3.3 Java标识符命名规则41 3.3.4 关键字42 3.3.5 常量42 3.4 运算符43 3.4.1 算术运算符43 3.4.2 赋值操作符45 3.4.3 关系操作符47 3.4.4 逻辑操作符48 3.4.5 位操作符49 3.4.6 移位运算符49 3.4.7 其他操作符50 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    (超赞)JAVA精华之--深入JAVA API

    1 JAVA SE ...3.5 JavaMail(JAVA邮件服务)API详解 3.6 jxl.jar 包简介 3.7 Java与XML联合编程之SAX篇 3.8 Java与XML联合编程之DOM篇 4 其他 4.1 代码复用的规则 4.2 Java IO 包中的Decorator模式

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    此外,本书的配套光盘还免费提供了价值人民币330元的java教学视频,对java语言进行了全面讲解,帮助一些不会java语言的读者快速地从java基础知识的学习中过渡到java web的学习与开发上. 第1部分 xml篇. 第1章 xml...

    Java大赛作品:卡片三国源码及详解.rar

    Java大赛作品:卡片三国源码及详解,卡片游戏“Card Fight” ,联机对战型卡片游戏。首先来说明一下Card Fight的游戏规则吧:启动Card Fight的应用程序后,就会出现下图所示的菜单画面,菜单的内容从上到下分别为:新...

    疯狂JAVA讲义

    学生提问:老师,我想学习Java编程,到底是学习Eclipse好呢,还是学习JBuilder好呢? 21 1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种...

    新视野B1U4 Text A 课文详解_java_

    使用高级语言编写程序的优点是:编程相对简单、直观、易理解、不容易出错;高级语言是独立于计算机的,因而用高级语言编写的计算机程序通用性好,具有较好的移植性。用高级语言编写的程序称为源程序,计算机系统不能...

    Oracle数据库使用及命名规则的详解

    开始注释,类似JAVAK中的开始注释,主要列出文件名,编写日期,版权说明,程序功能以及修改记录:  REM  REM $Header: filename, version, created date,auther  REM  REM Copyright  REM  REM ...

    汪文君高并发编程实战视频资源下载.txt

     高并发编程第三阶段13讲 一个JNI程序的编写,通过Java去调用C,C++程序.mp4  高并发编程第三阶段14讲 Unsafe中的方法使用,一半是天使,一半是魔鬼的Unsafe.mp4  高并发编程第三阶段15讲 Unsafe背后的汇编指令,...

    Java进阶教程解密JVM视频教程

    JVM 是 Java 程序的运行环境,学习 JVM,方能了解 Java 程序是如何被执行的,为进一步深入底层原理乃至程序性能调优打好基础。通过学习这门课程,你将掌握:1. JVM 内存结构的组成、各部分功能作用,学会利用内存...

    JAVA SE学习精华集锦

    3.5 JavaMail(JAVA邮件服务)API详解 145 3.6 jxl.jar 包简介 150 3.7 Java与XML联合编程之SAX篇 154 3.8 Java与XML联合编程之DOM篇 159 4 其他 165 4.1 代码复用的规则 165 4.2 Java IO 包中的Decorator模式 168

    Java入门教程(微学苑)-part1

    2 Java语法基础 24 2.1 Java数据类型以及变量的定义 24 2.2 对布尔型的说明 25 2.3 Java数据类型转换 26 2.4 自动数据类型转换 26 2.5 强制数据类型转换 26 2.6 Java运算符 27 2.6.1.1 数学运算符 27 2.6.1.2 关系...

    Java开发技术大全 电子版

    第2篇Java面向对象编程 第3章对象和类98 3.1面向对象的基本概念98 3.1.1对象98 3.1.2类99 3.1.3消息101 3.1.4面向对象的4个基本特征101 3.2类与对象104 3.2.1类的基本结构104 3.2.2类的声明104 3.2.3创建...

Global site tag (gtag.js) - Google Analytics