java代码必须注释吗,java程序中如何加入注释

java工作中良好的代码注释习惯是什么

注释是为了方便自己或代码维护方更容易地读懂代码的用处。

创新互联专注为客户提供全方位的互联网综合服务,包含不限于成都网站制作、做网站、外贸营销网站建设、永和网络推广、小程序定制开发、永和网络营销、永和企业策划、永和品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供永和建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

一、背景 

1、当我们第一次接触某段代码,但又被要求在极短的时间内有效地分析这段代码,我们需要什么样的注释信息? 

2、怎么样避免我们的注释冗长而且凌乱不堪呢? 

3、在多人协同开发、维护的今天,我们需要怎么样的注释来保证高质、高交的进行开发和维护工作呢? 

二、意义 

程序中的注释是程序设计者与程序阅读者之间通信的重要手段。应用注释规范对于软件本身和软件开发人员而言尤为重要。并且在流行的敏捷开发思想中已经提出了将注释转为代码的概念。好的注释规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护。好的注释规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码。好的注释规范可以最大限度的提高团队开发的合作效率。长期的规范性编码还可以让开发人员养成良好的编码习惯,甚至锻炼出更加严谨的思维能力。 

三、注释的原则 

1、 注释形式统一 

在整个应用程序中,使用具有一致的标点和结构的样式来构造注释。如果在其他项目组发现他们的注释规范与这份文档不同,按照他们的规范写代码,不要试图在既成的规范系统中引入新的规范。 

2、 注释的简洁 

内容要简单、明了、含义准确,防止注释的多义性,错误的注释不但无益反而有害。 

3、 注释的一致性 

在写代码之前或者边写代码边写注释,因为以后很可能没有时间来这样做。另外,如果有机会复查已编写的代码,在今天看来很明显的东西六周以后或许就不明显了。通常描述性注释先于代码创建,解释性注释在开发过程中创建,提示性注释在代码完成之后创建。修改代码的同时修改相应的注释,以保证代码与注释的同步。 

4、 注释的位置 

保证注释与其描述的代码相邻,即注释的就近原则。对代码的注释应放在其上方相邻或右方的位置,不可放在下方。避免在代码行的末尾添加注释;行尾注释使代码更难阅读。不过在批注变量声明时,行尾注释是合适的;在这种情况下,将所有行尾注释要对齐。 

5、 注释的数量 

注释必不可少,但也不应过多,在实际的代码规范中,要求注释占程序代码的比例达到20%左右。注释是对代码的“提示”,而不是文档,程序中的注释不可喧宾夺主,注释太多了会让人眼花缭乱,注释的花样要少。不要被动的为写注释而写注释。 

6、删除无用注释 

在代码交付或部署发布之前,必须删掉临时的或无关的注释,以避免在日后的维护工作中产生混乱。 

7、 复杂的注释 

如果需要用注释来解释复杂的代码,请检查此代码以确定是否应该重写它。尽一切可能不注释难以理解的代码,而应该重写它。尽管一般不应该为了使代码更简单便于使用而牺牲性能,但必须保持性能和可维护性之间的平衡。 

8、 多余的注释 

描述程序功能和程序各组成部分相互关系的高级注释是最有用的,而逐行解释程序如何工作的低级注释则不利于读、写和修改,是不必要的,也是难以维护的。避免每行代码都使用注释。如果代码本来就是清楚、一目了然的则不加注释,避免多余的或不适当的注释出现。 

9、必加的注释 

典型算法必须有注释。在代码不明晰或不可移植处必须有注释。在代码修改处加上修改标识的注释。在循环和逻辑分支组成的代码中添加注释。为了防止问题反复出现,对错误修复和解决方法的代码使用注释,尤其是在团队环境中。 

10、注释在编译代码时会被忽略,不编译到最后的可执行文件中,所以注释不 

会增加可执行文件的大小。 

四、JAVA注释技巧 

1、空行和空白字符也是一种特殊注释。利用缩进和空行,使代码与注释容易区 

别,并协调美观。 

2、当代码比较长,特别是有多重嵌套时,为了使层次清晰,应当在一些段落的 

结束处加注释(在闭合的右花括号后注释该闭合所对应的起点),注释不能 

写得很长,只要能表示是哪个控制语句控制范围的结束即可,这样便于阅读。 

3、将注释与注释分隔符用一个空格分开,在没有颜色提示的情况下查看注释时, 

这样做会使注释很明显且容易被找到。 

4、不允许给块注释的周围加上外框。这样看起来可能很漂亮,但是难于维护。 

5、每行注释(连同代码)不要超过120个字(1024×768),最好不要超过80 

字(800×600) 。 

6、Java编辑器(IDE)注释快捷方式。Ctrl+/ 注释当前行,再按则取消注释。 

7、对于多行代码的注释,尽量不采用“/*......*/”,而采用多行“//”注释, 

这样虽然麻烦,但是在做屏蔽调试时不用查找配对的“/*......*/”。 

8、注释作为代码切换开关,用于临时测试屏蔽某些代码。

什么是注释?如何在Java程序中加入注释?

试想一下,一个没有一句注释的程序源码,怎么读,一个程序要上万条代码不可能全部记得住哪一块是什么用,而且一个项目也不会是一个人独自完成,那样效率太低,多人合作就要给别人说明,每一块是什么用,方便他人使用,方便自己更正,而这些说明文字就是注释,注释不会被执行,不影响运行结果。

Java中代码的注释有三种:

// 注释一行 

/* ...... */ 注释若干行 

/** ...... */ 注释若干行,并写入 javadoc 文档

前两种比较容易理解,至于第三种,你学习Java看的api文档就是javadoc程序根据第三种的注释生成的。

扩展资料

注释就是对代码的解释和说明,其目的是让人们能够更加轻松地了解代码。注释是编写程序时,写程序的人给一个语句、程序段、函数等的解释或提示,能提高程序代码的可读性。

对于java语言来说,大量注释会影响执行效率么

Java代码注释写的多,会影响到编译效率,但是不会影响到执行效率。

Java代码是先编译成字节码,然后被JVM解释执行的。

我做了个实验

TimeDemo 类

import java.util.ArrayList;

public class TimeDemo {

public static void main(String[] args) {

long start = System.currentTimeMillis();

ArrayListInteger list = new ArrayListInteger();

for (int i = 0; i 1000000; i++) {

list.add(i);

}

long end = System.currentTimeMillis();

System.out.println("本次执行耗费了"+(end-start)+"毫秒");

}

}

TimeDemo2

import java.util.ArrayList;

public class TimeDemo2 {

public static void main(String[] args) {

long start = System.currentTimeMillis();

ArrayListInteger list = new ArrayListInteger();

for (int i = 0; i 1000000; i++) {

list.add(i);

}

//用java.io生成了很多行的注释,

//注释

//注释

//注释

//注释

//注释

long end = System.currentTimeMillis();

System.out.println("本次执行耗费了"+(end-start)+"毫秒");

}

}

运行结果

当注释行数是1~1万行的时候. 能较快的编译

当注释行数达到1百万的时候,编译稍微慢一点

当注释行数达到1千万行的时候, CPU占用100%,卡了进1分钟也没有编译完成,只好强行关闭

结论:

简单明了的注释有助于程序猿对代码的读写

只有当注释行数极大的时候,才会严重的影响编译速度。 但不会影响执行速度

java代码注释(所有代码)注释比较重点的也行

多注了些控制流程,希望我的注释能够对你有帮助:

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

public class GoodLucky extends JFrame implements ActionListener{

JTextField tf = new JTextField(); //实例化一个文本域

//设置两个按钮

JButton b1 = new JButton("开始");

JButton b2 = new JButton("停止");

boolean isGo = false;

//构造函数

public GoodLucky(){

b1.setActionCommand("start");//在开始按钮上设置一个动作监听 start

JPanel p = new JPanel(); //实例化一个可视化容器

//将两个按钮添加到可视化容器上面,用add方法

p.add(b1);

p.add(b2);

//在两个按钮上增加监听的属性,自动调用下面的监听处理方法actionPerformed(ActionEvent e),如果要代码有更好的可读性,可用内部类实现动作

//监听处理。

b1.addActionListener(this);

b2.addActionListener(this);

//将停止按钮设置为不可编辑(即不可按的状态)

b2.setEnabled(false);

this.getContentPane().add(tf,"North"); //将上面的文本域放在面板的北方,也就是上面(上北下南左西右东)

this.getContentPane().add(p,"South"); //将可视化容器pannel放在南边,也就是下面

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置用户在此窗体上发起 "close" 时默认执行的操作,参数EXIT_ON_CLOSE是使用 System exit 方法退出应用程序。仅在应用程序中使用

this.setSize(300,200); //设置面板大小,宽和高

this.setLocation(300,300); //设置面板刚开始的出现的位置

Cursor cu = new Cursor(Cursor.HAND_CURSOR); //用指定名称创建一个新的定制光标对象,参数表示手状光标类型

this.setCursor(cu); //为指定的光标设置光标图像,即设置光标图像为上面所创建的手状光标类型

this.setVisible(true); //将面板可视化设置为true,即可视,如果为false,即程序运行时面板会隐藏

tf.setText("welcome you! "); //设置面板的标题为欢迎

this.go(); //调用go方法

}

public void go(){

while(true){ //这里是死循环,也就是说用户不点击停止按钮的话他一直循环出现随机数,直到用户点击停止按钮循环才能推出,具体流程在actionPerformed方法中控制。

if(isGo == true){ //上面所定义的isGo的初始值为false,所以程序第一次到此会跳过

String s = ""; //设置空字符串

for(int j = 1; j = 7;j++){ //产生7个随机数

int i = (int)(Math.random() * 36) + 1;//每个随机数产生方式,这里定义灵活,可以自由定义随机数产生的方式

if(i 10){

s = s + " 0" + i; //如果产生的随机数小于10的话做处理:这里就牵扯到一个重要的概念,简单叙述一下:

/*

当一个字符串与一个整型数项相加的意思是连接,上面的s = s + " 0" + i的意思是字符串s链接0再连接整型i值,而不会导致0和整型的i相加,

产生的效果为s0i,由于s为空字符串(上面定义过的),所以当i小于零时,在个位数前面加上0,比如产生的随机数i为7的话,显示效果为 07.

*/

}else{

s = s + " " + i; //如果产生的随机数比10打的话,那么加上空格显示,即数字和数字之间有个空格

}

//以上循环循环七次,以保证能出现7个随机数

}

tf.setText(s); //将产生的随机数全部显示在文本域上,用文本域对象tf调用它的设置文本的方法setText(String)实现。

}

//以下为线程延迟

try{

Thread.sleep(10); //线程类同步方法sleep,睡眠方法,括号里的单位为ms。

}catch(java.lang.InterruptedException e){

e.printStackTrace(); //异常捕获,不用多说。

}

}

}

//以下是上面设置的事件监听的具体处理办法,即监听时间处理方法,自动调用

public void actionPerformed(ActionEvent e){ //传入一个动作事件的参数e

String s = e.getActionCommand(); //设置字符串s来存储获得动作监听,上面的start

/*

以下这个条件语句块的作用为:用户点击开始后(捕获start,用方法getActionCommand()),将命令触发设置为true,从而执行上面的go方法中的循环体(因为循环体中要求isGo参数为true,而初始为false)。

执行循环快产生随机数,并将开始按钮不可编辑化,而用户只可以使用停止按钮去停止。如果用户按下停止时,也就是没有传入参数“start”的时候,

执行else语句块中的语句,isGo设置为false,将不执行上面go中的循环语句块,从而停止产生随机数,并显示,并且把开始按钮设置为可用,而把

停止按钮设置为不可用,等待用户按下开始再去开始新一轮循环产生随机数。

*/

if(s.equals("start")){ //如果捕获到start,也就是用户触发了动作监听器,那么下面处理

isGo = true; //设置isGo为true

b1.setEnabled(false); //将开始按钮设置为不可用

b2.setEnabled(true); //将停止按钮设置为可用

}else{

isGo = false; //将isGo设置为false,isGo为循环标志位

b2.setEnabled(false); //设置停止按钮为不可用(注意看是b2,b2是停止按钮)

b1.setEnabled(true); //设置开始按钮为可用

}

}

public static void main(String[] args){

new GoodLucky(); //产生类的实例,执行方法

}

}

圣诞平安夜了,祝朋友开心快乐!

java源程序的注释量必须在多少以上?

一般编程在1/4~1/3就可以了,其实编程的时候不单要关注注释的量,还要写的清晰、明了。注释的多少不是主要的,关键是能让别人看的时候能看明白。

另外在命名是也要特别注意,命名能都充分表现你的变量、方法、类的含义,这样也能起到注释的作用。

还有就是类、方法不能过大,方法十几行也就差不多了,太多可读性就比较差了。

java 需要加注释。

注释的很详细了 还有什么不明白的可以给我留言

此外给楼主点建议,打好基础,这套代码乱七八糟,写的太烂了。不适合用来学习,要学习就找好代码,不然很容易被误导。

/**

*此类事dao层中的一个类 使用hibernate完成持久层的控制

*继承自抽象类AbstractDAO并实现了抽象类的相关方法

*主要包括获取图书列表,获取图书记录,添加图书信息,添加和更新图书信息,

*获取图书信息和判断判断是否可以删除图书信息这几个功能

*/

public class BookDAO extends AbstractDAO {

//无参数构造方法

public BookDAO() {

}

/**治理竟然加了个主方法,恕在下愚钝,除了添乱之外想不出别的解释

*也可能是测试阶段用来测试 然后忘记删除了

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

}

/**

* 获取图书信息 根据关键字使用模糊查询 得到包含关键字的图书信息列表

*如果输入的book对象的bookName属性为控制或者空字符串 默认查询所有图书信息

*@pamar book 图书信息的持久化对象 应该对应数据库中的一张表bookinfo

*@pamar pager 应该是一个封装了分页逻辑的对象

*@return List 返回的数据库中包含book中关键字(图书名)的图书信息列表

*默认情况返回数据库中所有图书的信息,

*这里返回值设计成ListBookinfo会更好 当然由于集成的抽象类的限制改不了(抽象类设计的不好 )

**/

public List getBookList(Bookinfo book,Pager pager) throws DataAccessException{

//hql语句 默认情况下 返回数据库中所有的图书信息

String hql = " from com.jframe.biz.book.Bookinfo book" +

" where 1=1 ";

/*如果book名存在且不是空串

*重新构造hql语句 添加限制条件 返回book名字的模糊查询结果集

*/

if(book.getBookName()!=null!"".equals(book.getBookName())){

hql += " and book.bookName like '%"+book.getBookName()+"%'";

}

//如果书的作者不为空且不是空串 添加限制条件 返回指定作者的模糊查询结果集

if(book.getAuthor()!=null!"".equals(book.getAuthor())){

hql += " and book.author like '%"+book.getAuthor()+"%'";

}

//创建查询对象 执行hql语句

Query query = this.getSession().createQuery(hql);

//以下两条记录设置了从数据库的第几条记录开始 查到第几条 用于分页

//设定结果集的大小 就是分页逻辑设定的每页显示的记录数

query.setMaxResults(pager.getPageSize());

//从分页中逻辑中传过来的起始记录开始查

query.setFirstResult((pager.getCurrentPage()-1)*pager.getPageSize());

//返回查询到的结果

return query.list();

}

/**

*查询指定条件的图书的记录数

*@pamar book 一个图书信息对象

*@return int 图书的记录数

*/

public int getBookCount(Bookinfo book) throws DataAccessException{

//设定默认的hql 查询所有的图书的记录

String hql = " select count(bookName) from com.jframe.biz.book.Bookinfo book" +

" where 1=1 ";

//如果图书名不为空且不是空串 添加限制条件--图书名的模糊查询

if(book.getBookName()!=null!"".equals(book.getBookName())){

hql += " and book.bookName like '%"+book.getBookName()+"%'";

}

// 如果图书作者不为空且不为空串 添加限制条件--图书作者的模糊查询

if(book.getAuthor()!=null!"".equals(book.getAuthor())){

hql += " and book.author like '%"+book.getAuthor()+"%'";

}

Query query = this.getSession().createQuery(hql);

//返回查询的结果集到list

List list = query.list();

//如果结果集对象不为空且存在结果

if(list!=nulllist.size()0)

//将结果集中第一个元素转换成整形然后返回

return ((Integer)query.list().iterator().next()).intValue();

else

//没有记录返回0

return 0;

}

/**

*添加图书信息

*@parma book 图书信息对象

*@return 很费解 为啥这个方法还有返回值,即使需要返回值也是布尔型的啊

*/

public Bookinfo addBookInfo(Bookinfo book) throws DataAccessException{

//创建hibernate模板对象

HibernateTemplate template = this.getHibernateTemplate();

//调用模板的保存方法保存图书信息

template.save(book);

//清理缓存或者说清理脏数据 检验内存中的持久态对象是否已经存入数据库

template.flush();

template.evict(book);

//以后返回值就不解释了 方法头上面有参数和返回值的解释

return getBookInfo(book);

}

/**

*保存或者更新方法 注意 这个方法在旧版的hibernate里有 貌似hibernate3.0以上版本就删掉了

*@parma book 图书信息对象

*@return 为啥这个和上个方法还有返回值,即使需要返回值也是布尔型的啊

*/

public Bookinfo saveBookInfo(Bookinfo book) throws DataAccessException{

//同上个方法 以后不解释

HibernateTemplate template = this.getHibernateTemplate();

//如果数据库中没有则插入 如果有则更新

template.saveOrUpdate(book);

return book;

}

/**

*删除指定图书

*@parma book图书信息

*@return void

*/

public void deleteBookInfo(Bookinfo book) throws DataAccessException{

HibernateTemplate template = this.getHibernateTemplate();

//调用模板的删除方法

template.delete(book);

}

/**

*根据书号查询图书信息

*@param book 图书对象

*@return 图书信息

*/

public Bookinfo getBookInfo(Bookinfo book) throws DataAccessException{

HibernateTemplate template = this.getHibernateTemplate();

//sql语句 查询指定书号的图书信息

String hql = " from com.jframe.biz.book.Bookinfo book" +

" where 1=1 and book.bookNo='"+book.getBookNo()+"'";

//调用查询的模板的查询类

List list = template.find(hql);

//将查询结果集的第一个值强制转换成对象返回

if(list!=nulllist.size()0)

return (Bookinfo) list.iterator().next();

else

return null;

}

/**

*r如果日志信息中记录的书号是可删除的 并且在数据库中存在则返回true

*/

public boolean isCanDelete(Bookinfo book) {

boolean flag = false;

HibernateTemplate template = this.getHibernateTemplate();

String hql = " from com.jframe.biz.log.Loginfo log" +

" where 1=1 and log.bookinfo.bookNo='"+book.getBookNo()+"'";

List list = template.find(hql);

if(list!=nulllist.size()0)

flag = false;

else

flag = true;

return flag;

}

}


网页标题:java代码必须注释吗,java程序中如何加入注释
浏览路径:http://scyanting.com/article/heeshd.html