2005年10月18日
#
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.text.*;
import java.io.*;
public class Note extends Frame {
private MenuBar mb;
private Menu mset_param ,mhelp;
private MenuItem mibc ,miSound;
private MenuItem miabout;
//缺省的背景颜色
private static Color backgroundcolor = Color.GRAY;
//funtction of the button on plcb is chose year andmonth
//and set alarm colock and remind booking
private JCheckBox remindBook ,alarmColock;
private JComboBox cbyears ,cbmonths;
private JPanel plcb;
//日历按钮
private JPanel plbt;
private JButton button[];
//add vector to contain button[],so that find it
private Vector v;
//save the year and month
private String choseyear ,chosemonth;
private int choseyearint ,chosemonthint;
private boolean changed = false;
private boolean fileExist = false;//the application first run to find file
private static boolean needSound;
//add text to write down what to do in the future
private TextArea tanote;
private JPanel plta;
//默认的年份
private final static String years[]={
"1995" ,"1996" ,"1997" ,"1998" ,"1999" ,"2000" ,
"2001" ,"2002" ,"2003" ,"2004" ,"2005" ,"2006" ,
"2007" ,"2008" ,"2009" ,"2010" ,"2011" ,"2012" ,
"2013" ,"2014" ,"2015" ,"2016" ,"2017" ,"2018" ,
"2019" ,"2020"
};
private static final String months[] = {
"January" ,"February" ,"March" ,"April" ,"May" ,"June" ,"July" ,"August" ,
"September" ,"October" ,"November" ,"December"
};
private final static int dom[] = {
31 ,28 ,31 ,30 ,31 ,30 ,31 ,31 ,30 ,31 ,30 ,31
};
//save the first day of the month to use
private int start;
//save the button who is entered
private int btnIndex;
public Note() {
mb = new MenuBar();
mset_param = new Menu("设置");
mhelp = new Menu("帮助");
mibc = new MenuItem("背景");
miSound = new MenuItem("声音");
miabout = new MenuItem("关于...");
mset_param.add(mibc);
mset_param.addSeparator();
mset_param.add(miSound);
mhelp.add(miabout);
setMenuBar(mb);
mb.add(mset_param);
mb.setHelpMenu(mhelp);
MListener ml = new MListener();
mibc.addActionListener(ml);
miabout.addActionListener(ml);
miSound.addActionListener(ml);
cbyears = new JComboBox();
cbmonths = new JComboBox();
plcb = new JPanel();
plcb.setLayout(new FlowLayout());
JLabel lyears = new JLabel("年份:");
JLabel lmonths = new JLabel("月份:");
plcb.add(lyears);
plcb.add(cbyears);
plcb.add(lmonths);
plcb.add(cbmonths);
remindBook = new JCheckBox("预约提示",true);
alarmColock = new JCheckBox("闹钟");
// Dimension d = new Dimension();
// remindBook.setSize(d);
// remindBook.getSize(d);
// System.out.println("W:"+d.getWidth()+" H:"+d.getHeight());
plcb.add(remindBook);
plcb.add(alarmColock);
remindBook.addActionListener(new RemindListener());
alarmColock.addActionListener(new RemindListener());
add(plcb ,BorderLayout.NORTH);
//add calendar
getCalendar();
plbt = new JPanel();
plbt.setBackground(Color.BLUE);
plbt.setLayout(new GridLayout(7 ,7));
plbt.add(new JLabel(" 星期日"));
plbt.add(new JLabel(" 星期一"));
plbt.add(new JLabel(" 星期二"));
plbt.add(new JLabel(" 星期三"));
plbt.add(new JLabel(" 星期四"));
plbt.add(new JLabel(" 星期五"));
plbt.add(new JLabel(" 星期六"));
//add calendar button to frame
//add button to vector;
v = new Vector();
button = new JButton[42];
for(int i=0;i<41;i++){
button[i] = new JButton();
plbt.add(button[i]);
button[i].addActionListener(new ButtonListener());
v.add(button[i]);
}
button[41] = new JButton();
plbt.add(button[41]);
button[41].setText("保存");
button[41].addActionListener(new SaveListener());
add(plbt ,BorderLayout.CENTER);
//add note book
// plta = new JPanel();
tanote = new TextArea(5 ,80);
// tanote.addTextListener(new tanoteTextListener());
// tanote.setColumns(80);
// plta.add(tanote);
// tanote.SCROLLBARS_VERTICAL_ONLY;
add(tanote ,BorderLayout.SOUTH);
/*
//add date to button
GregorianCalendar calendar = new GregorianCalendar(choseyearint ,chosemonthint ,1);
int start = calendar.get(Calendar.DAY_OF_WEEK)-1;
int daysInMonth = dom[chosemonthint];
if(calendar.isLeapYear(choseyearint)&&chosemonthint == 1){
++daysInMonth;
}
for(int i =0;i<daysInMonth;i++){
button[start+i].setText(" "+(i+1)+" ");
}
*/
//add the default year and month to JComboBox
for(int i= 0;i<=25;i++){
cbyears.addItem(years[i]);
}
for(int i=0;i<12;i++){
cbmonths.addItem(months[i]);
}
/*
//add current year and month
cbyears.setSelectedIndex(choseyearint-1995);
cbmonths.setSelectedIndex(chosemonthint);
*/
//show date to calendar
showDate();
//open file add to note
Calendar now = new GregorianCalendar();
int num = start + now.get(Calendar.DAY_OF_MONTH)-1;
btnIndex = num;
readFile(num);
fileSound();
//add threadcb to listen jcombobox state
new ThreadCB().start();
//listen the JComboBox of years and months
cbyears.addItemListener(new cbyearsItemListener());
cbmonths.addItemListener(new cbmonthsItemListener());
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
System.exit(0);
}
});
}
/**
*add menu listener to know the menu what do want to do
*/
class MListener implements ActionListener{
public void actionPerformed(ActionEvent e){
MenuItem i = (MenuItem)e.getSource();
if(i.equals(miabout)){
JOptionPane.showMessageDialog(null ,"日历记事本程序V1.0","关于..." ,JOptionPane.INFORMATION_MESSAGE);
}
else if(i.equals(mibc)){
//backgroundcolor = Color.BLACK;
backgroundcolor = JColorChooser.showDialog(null ,"选择颜色..." ,getBackground());
setBackground(backgroundcolor);
plbt.setBackground(backgroundcolor);
// System.out.println(choseyear);
////
}
else{
JOptionPane.showMessageDialog(null ,"I am sorry ,this function is not complation" ,"Sorry" ,JOptionPane.INFORMATION_MESSAGE);
}
}
}
/**
*add the year JComboBox listener to know what active
*/
class cbyearsItemListener implements ItemListener{
public void itemStateChanged(ItemEvent e){
// System.out.println(e.paramString());
// System.out.println(e.getStateChange());
// System.out.println(e.getItem().toString());
// if(e.getSource().equals("1997")){
// System.out.println("1997 is chosed");
// }
// else{
// System.out.println("the System is not chose 1997");
// }
// choseyear = e.getItem().toString();
changed = true;
// showDate();
// cbmonths.setSelectedIndex(5);
}
}
/**
*add the month JComboBox listener to know what active
*/
class cbmonthsItemListener implements ItemListener{
public void itemStateChanged(ItemEvent e){
// System.out.println(choseyear);
// chosemonth = e.getItem().toString();
changed = true;
// chosemonthint = Integer.parseInt(chosemonth);
// System.out.println(chosemonthint);
// showDate();
}
}
public static void main(String args[]) {
System.out.println("Starting Note...");
Note mainFrame = new Note();
mainFrame.setSize(600, 400);
mainFrame.setTitle("日历记事本");
mainFrame.setBackground(backgroundcolor);
mainFrame.setVisible(true);
for(int i=0;i<10;i++){
System.out.print("\007");
}
// Thread dd = new ThreadCB();
// dd.start();
// mainFrame.paintCalendar();
}
protected void getCalendar(){
Calendar now = new GregorianCalendar();
// System.out.println("year :"+now.get(Calendar.YEAR));
// System.out.println("month:"+now.get(Calendar.MONTH));
// int y = now.get(Calendar.YEAR);
// choseyear = Integer.toString(y);
// int m = now.get(Calendar.MONTH);
// chosemonth = Integer.toString(m+1);
choseyearint = now.get(Calendar.YEAR);
chosemonthint = now.get(Calendar.MONTH);
// System.out.println("y "+choseyear+"::"+chosemonth);
}
/**
*show date to calendar
*/
protected void showDate(){
GregorianCalendar calendar = new GregorianCalendar(choseyearint ,chosemonthint ,1);
start = calendar.get(Calendar.DAY_OF_WEEK)-1;
int daysInMonth = dom[chosemonthint];
if(calendar.isLeapYear(choseyearint)&&chosemonthint == 1){
++daysInMonth;
}
for(int i =0;i<daysInMonth;i++){
button[start+i].setForeground(Color.BLACK);
button[start+i].setText(" "+(i+1)+" ");
}
//set current day
int nowDay = start + calendar.get(Calendar.DAY_OF_MONTH);
button[nowDay+1].setForeground(Color.RED);
//add current year and month
cbyears.setSelectedIndex(choseyearint-1995);
cbmonths.setSelectedIndex(chosemonthint);
}
//listen the buttons active
class ButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
Object obj = e.getSource();
// System.out.println("haha"+e.getSource());
btnIndex = v.indexOf(obj);
readFile(btnIndex);
/* switch(v.indexOf(obj)){
case 1:
System.out.println("i am button1");
break;
case 2:
// System.out.println("I am button2");
readFile(2);
break;
case 41:
System.out.println(tanote.getText());
break;
default:
System.out.println("I do not know who am I");
break;
}
*/ }
}
/**
*create a thread to listen the year or month′s state
*/
class ThreadCB extends Thread{
public void run(){
while(true){
if(changed){
changed = false;
choseyearint = cbyears.getSelectedIndex()+1995;
chosemonthint = cbmonths.getSelectedIndex();
//System.out.println("y:"+choseyearint+":M:"+chosemonthint);
for(int i=0;i<40;i++){
button[i].setText("");
}
showDate();
}
try{
sleep(200);
}
catch(InterruptedException e){
System.err.println(e);
}
}
}
}
/**
* add note book listener to know the textarea active
*/
/*
class tanoteTextListener implements TextListener{
public void textValueChanged(TextEvent e){
//System.out.println(e.getSource());
}
}*/
/**
*check file to know the file is exist
* if exist,read it to the note book
*/
protected void readFile(int bt){
int y = cbyears.getSelectedIndex()+1995;//real year
int m = cbmonths.getSelectedIndex()+1;//real month
String fileName = Integer.toString(y) + Integer.toString(m)+"button"+Integer.toString(bt);
// System.out.println("I am dudu");
// System.out.println(fileName);
// String fileName = "testDay.java";
File file = new File(fileName);
BufferedReader is;
String line;
StringBuffer sb = new StringBuffer();
tanote.setText("");
if(file.exists()){
try{
is = new BufferedReader(new FileReader(fileName));
while((line = is.readLine())!= null){
sb.append(line);
sb.append("\n");
}
is.close();
}
catch(IOException e){
System.err.println(e);
System.exit(0);
}
tanote.setText(sb.toString());
fileExist = true;
}
else{
System.out.println(fileName+" is not exists");
}
}
/**
*sound
*/
protected void fileSound(){
if(remindBook.isSelected()){
if(fileExist){
/* for(int i=0;i<10;i++){
System.out.println("\007");
}
*/
needSound = true;
}
}
}
/**
*listen the save button active
*/
class SaveListener implements ActionListener{
public void actionPerformed(ActionEvent e){
int bt = btnIndex;
int y = cbyears.getSelectedIndex()+1995;//real year
int m = cbmonths.getSelectedIndex()+1;//real month
String fileName = Integer.toString(y) + Integer.toString(m)+"button"+Integer.toString(bt);
try{
BufferedWriter bw = new BufferedWriter(new FileWriter(fileName));
//int row = tanote.getRows();
//System.out.println("rows:"+row);
String s = tanote.getText();
System.out.println("length:"+s.length());
bw.write(s);
bw.close();
}
catch(IOException ev){
System.err.println(ev);
System.exit(0);
}
}
}
//
class RemindListener implements ActionListener{
public void actionPerformed(ActionEvent ae){
Object obj = ae.getSource();
if(obj.equals(remindBook)){
if(remindBook.isSelected()){
System.out.println("I am selected");
}
else{
System.out.println("I am not selected");
}
}
else{
if(alarmColock.isSelected()){
// System.out.println("I am selected");
final JFrame jf = new JFrame("设置时间");
jf.setSize(300,100);
jf.setLocation(200 ,200);
jf.setVisible(true);
// Font f = new Font( ,Font.BOLD ,20);
JLabel jl = new JLabel("逗你玩");
String name=jl.getFont().getName();
// System.out.println("Font:"+name);//name′s value is Dialog
Font f = new Font(name ,Font.BOLD+Font.ITALIC ,20);
jl.setForeground(Color.red);
jl.setFont(f);
jf.getContentPane().setLayout(new GridLayout(5 ,2));
jf.getContentPane().add(new JLabel(" "));
jf.getContentPane().add(jl);
jf.getContentPane().add(new JLabel("sorry! this function is not do!!"));
jf.pack();
jf.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent we){
jf.dispose();
}
});
}
else{
System.out.println("I am not selected");
}
}
}
}
}
本人这段时间暂时没有学习JAVA了,所以很少来上面发文章。但我个人觉得JAVA还是很有趣的语言,我以后还会继续学习的,谢谢大家的支持…
<!--用iframe来装入2005索引页,这样我们就获得了所有本年度的文章列表了-->
<!--<iframe id="cataloghtml" src="catalog_2005.html" style=display:none;position:absolute;top:400;left:400;z-index:250
></iframe>-->
<script>
var startYear = 2005; //你的博客是哪一年建立的?
var showCount = 10; // 每个栏目显示多少条?
var d = new Date();
var currYear = d.getUTCFullYear();
for(i=currYear;i>=startYear;i--)
{
document.writeln('<iframe id="cataloghtml'+i+'" src="catalog_'+i+'.html"
style=display:none;position:absolute;top:400;left:400;z-index:250 ></iframe>');
}
</script>
<script>
//这部分的脚本是自动更新用的
//从cataloghtml的categoryname这个栏目读取文章列表放到当前页面的mycategoryname中
function showcatalog(mycategoryname,categoryname)
{
var currShowCount = 0;
var currTotalCount = 0;
l="<ul type='circle'>";
for(iyear=currYear;iyear>=startYear;iyear--)
{
currCategory = document.body.all[mycategoryname];
ol = eval("cataloghtml"+iyear+".document.body.all");
var entityDiv = null;
for(i=0;i<ol.length;i++)
{
if(ol[i].className =="entity")
{
entityDiv = ol[i];break;
}
}
ol = entityDiv.children.tags("UL");
var oLI=null;
for(i=0;i<ol.length;i++)
{
if(ol[i].children(0).name==categoryname)
{
oLI = ol[i].children.tags("LI");
break;
}
}
if(oLI == null) return ;
for(i=0;i<oLI.length;i++)
{
if(i>showCount-1) break;
oA = oLI[i].children(1);
s = oA.innerHTML;
pos = s.search(/[)|】|』|\]]{1}/);
if(pos>0)s=s.slice(pos+1);
l += "<li style='width:245px;height:18;overflow:hidden'><a href='"+oA.href+"' target='_blank'>"+s+"</a></li>\r\n";
}
currShowCount += i;
currTotalCount += oLI.length;
}
for(;currShowCount<showCount;currShowCount++)
l += "<li style='width:245px;height:18;overflow:hidden'>...</li>\r\n";
l+="</ul>";
currCategory.insertAdjacentHTML("beforeend",l);
// 增加代码,统计栏目文章数
titleDIV = currCategory.parentElement.children(0);
titleDIV.insertAdjacentHTML("beforeend","("+ currTotalCount +")");
}
//从cataloghtml读取目录并生成当前页面
function showallcatalog()
{
//需要改写的地方之一
showcatalog("mcategory1","category1");//※情感绿洲
showcatalog("mcategory2","category2");//※文学草坪
showcatalog("mcategory3","category3");//※科教园地
showcatalog("mcategory4","category4");//※电脑网络
showcatalog("mcategory5","category5");//※院校文化
showcatalog("mcategory6","category6");//※都市生活
showcatalog("mcategory7","category7");//※影音娱乐
showcatalog("mcategory8","category8");//※人在北京
//……
//注意,上面的省略号表示如果还有第九、第十个标题栏时依此类推,写类似的代码
}
</script>
<!--当body装入后调用showallcatalog()装载最新文章列表-->
<body onload=showallcatalog()>
<div><div class="mydiv1" target="_blank"><div class="mybg_01" target="_blank"><a href="http://liyangbit.blogchina.com/catalog_2005.html#category1" target="_blank"><img class="myimg" alt="查看更多情感绿洲的文章,请点击此处" src="http://bimzcy.blogchina.com/inc/go.gif" /></a>※情感绿洲 </div><div class="divtext" id="mcategory1" target="_blank"></div></div><!--结束-->
<div><div class="mydiv2" target="_blank"><div class="mybg_01" target="_blank"><a href="http://liyangbit.blogchina.com/catalog_2005.html#category2" target="_blank"><img class="myimg" alt="查看更多文学草坪的文章,请点击此处" src="http://bimzcy.blogchina.com/inc/go.gif" /></a>※文学草坪</div><!--文学部分--><div class="divtext" id="mcategory2" target="_blank"></div></div><!--结束-->
<div><div class="mydiv1" target="_blank"><div class="mybg_01" target="_blank"><a href="http://liyangbit.blogchina.com/catalog_2005.html#category3" target="_blank"><img class="myimg" alt="查看更多科教园地的文章,请点击此处" src="http://bimzcy.blogchina.com/inc/go.gif" /></a>※科教园地</div><div class="divtext" id="mcategory3" target="_blank"></div></div><!--结束-->
<div><div class="mydiv2" target="_blank"><div class="mybg_01" target="_blank"><a href="http://liyangbit.blogchina.com/catalog_2005.html#category4" target="_blank"><img class="myimg" alt="查看更多电脑网络的文章,请点击此处" src="http://bimzcy.blogchina.com/inc/go.gif" /></a>※电脑网络</div><div class="divtext" id="mcategory4" target="_blank"></div></div><!--结束-->
<div><div class="mydiv1" target="_blank"><div class="mybg_01" target="_blank"><a href="http://liyangbit.blogchina.com/catalog_2005.html#category5" target="_blank"><img class="myimg" alt="查看更多院校文化,请点击此处" src="http://bimzcy.blogchina.com/inc/go.gif" /></a>※院校文化</div><div class="divtext" id="mcategory5" target="_blank"></div></div><!--结束-->
<div><div class="mydiv2" target="_blank"><div class="mybg_01" target="_blank"><a href="http://liyangbit.blogchina.com/catalog_2005.html#category6" target="_blank"><img class="myimg" alt="查看更多都市生活,请点击此处" src="http://bimzcy.blogchina.com/inc/go.gif" /></a>※都市生活</div><div class="divtext" id="mcategory6" target="_blank"></div></div><!--结束-->
<div><div class="mydiv1" target="_blank"><div class="mybg_01" target="_blank"><a href="http://liyangbit.bokee.com/catalog_2005.html#category7"target="_blank"><img class="myimg" alt="查看更多影音娱乐的文章,请点击此处" src="http://bimzcy.blogchina.com/inc/go.gif" /></a>※影音娱乐</div><!--音乐时空部分--><div class="divtext" id="mcategory7" target="_blank"></div></div><!--结束-->
<div><div class="mydiv2" target="_blank"><div class="mybg_01" target="_blank"><a href="http://liyangbit.bokee.com/catalog_2005.html#category8" target="_blank"><img class="myimg" alt="查看更多人在北京,请点击此处" src="http://bimzcy.blogchina.com/inc/go.gif" /></a>※人在北京</div><div class="divtext" id="mcategory8" target="_blank"></div></div><!--结束-->
</div></p>
为什么代码很重要
尽管JAVA是用来写程序而不是散文, 但它仍然被用来表达思想和观点的。而且,在调查中显示,那些思想和观点在实际中完成了很多事情。为编写出好的JAVA风格而担忧,似乎是在浪费时间, 但实际上它对我们编写程序是很适宜的,因为它所要表达的思想和观点是格外清晰的。
这里提供一些理由,为什么要使用好的JAVA代码规范
一个软件产品的80%的生命期是在维护(maintenance)。
几乎没有一个软件在它的整个生命期里都是被它的作者来维护的。
使用好的风格提高了软件的可维护性。
如果源代码和软件产品是捆绑给客户的,作为产品的剩余部分,它应该有好的分包(well-packaged),足够清晰和专业的代码。
使用好的风格编写代码有以下几点好处:
提高了代码的可读性,持续性,和谐性。这些都能使代码能更容易的理解和维护。
使代码更容易被跟踪和调试,因为它是清晰的和持续的。
使你或另一个程序员在编写终止时更容易再继续下去,尤其在一个很长的时间后。
增加了代码预排(walkthroughs)的好处, 因为能让参入者更多的将焦点集中在代码正在做什么。
概要方针
使用好的JAVA风格并不困难, 但是它确实需要注意细节。下面是一些常用的概要指导方针:
使代码更清晰和更容易读
使代码更持续
使用显而易见的标识符名
逻辑地组织你的文件和类
每个文件只有一个类(这里不包括一些内部类)
使用80-90个字符的最大行宽
明智的使用空格来and/or其他分隔符
缩排上,使用空格(Space)来代替Tab
Tabs vs. 空格
在编写代码时,“Tabs vs. 空格” 是一个严谨的观点。这里我并不是暗示只有一个正确的方法。我支持使用空格,因为它能保证我的代码在你的编辑器里和我的编辑器里看到的相同,反之矣然。如果你感觉使用空格来代替Tab"不是正确的", 那么就使用Tab吧。
括号和缩进
在编写代码时,缩进风格(cf., Raymond, "Indent Style"),或者放置括号("{" 和 "}") 和一些相关联的缩进代码,是另一个严谨的观点。象JAVA一样,有许多C风格的语言存在。我这里也不是暗示它们中哪一个更优先更好。在大多数本文的范例代码中,我使用了K&R 风格,如果你不喜欢K&R风格,那么就使用其他风格吧。
注释
在JAVA代码中你可以使用两种注释: Javadoc 注释 (也称为文档注释) 和执行注释。 Javadoc注释能够被javadoc工具解压来制造一个API文档。执行注释是那些解释代码目的和方式的注释。在注释你的JAVA代码时请使用以下方针:
尽可能的使用Javadoc注释(在类和方法上,使之能最小化).
多使用块注释,少使用//注释, 除非一些特殊的情况,如变量声明
要记住:好注释是有帮助的,坏注释是麻烦的。
Example 1. Bad Comment Style
// applyRotAscii() -- Apply ASCII ROT
private void applyRotAscii(){
try{
int rotLength = Integer.parseInt(rotationLengthField.getText().trim()); // get rot len
RotAscii cipher = new RotAscii(rotLength); // new cipher
textArea.setText(cipher.transform(textArea.getText())); // transform
}catch(Exception ex){
/* Show exception */
ExceptionDialog.show(this, "Invalid rotation length: ", ex); }
}
Example 2. Good Comment Style
/**
* Apply the ASCII rotation cipher to the user's text. The length is retrieved
* from the rotation length field, and the user's text is retrieved from the
* text area.
*
* @author Thornton Rose
*/
private void applyRotAscii() {
int rotLength = 0; // rotation length
RotAscii cipher = null; // ASCII rotation cipher
try {
// Get rotation length field and convert to integer.
rotLength = Integer.parseInt(rotationLengthField.getText().trim());
// Create ASCII rotation cipher and transform the user's text with it.
cipher = new RotAscii(rotLength);
textArea.setText(cipher.transform(textArea.getText()));
} catch(Exception ex) {
// Report the exception to the user.
ExceptionDialog.show(this, "Invalid rotation length: ", ex);
}
}
块和语句
使用下面的方针来编写块和语句:
一行只写一个语句
控制语句总是使用{}这样的括号 (e.g., 'if').
考虑在块的末尾使用一个注释 (e.g., } // end if), 尤其是长的或嵌套块
在块的开头放置变量的声明语句
总记得初始化变量
如果你是个完美主义者,左对齐变量名
在switch块里缩进case从句
在操作符后留有空白
在if, for, 或while语句中, 在括号“(”前留有空白
在表达式中使用空白和插入语来增强可读性
在for循环中的变量是个例外。 循环变量可能会在语句初始化部分被定义。 e.g., for (int i = 0; ...)
.
在块的末尾插入注释有助于你无意中跟踪到被删除的结尾括号“}”.
Example 3. Bad Block Style.
try{
for(int i=0;i<5;i++){
...
}
int threshold=calculateThreshold();
float variance=(threshold*2.8)-1;
int c=0;
if (threshold<=15) c=calculateCoefficient();
switch(c){
case 1: setCeiling(c*2); break;
case 2: setCeiling(c*3); break;
else: freakOut();
}
}catch(Exception ex){ ... }
Example 4. Good Block Style.
try {
int threshold = 0;
float variance = 0.0;
int coefficient = 0;
// Prepare 5 cycles.
for (int i = 0; i < 5; i ++){
prepareCycle(i);
}
// Calculate the threshold and variance.
threshold = calculateThreshold();
variance = (threshold * 2.8) - 1;
// If the threshold is less than the maximum, calculate the coefficient.
// Otherwise, throw an exception.
if (threshold <= MAX_THRESHOLD) {
coefficient = calculateCoefficient();
} else {
throw new RuntimeException("Threshold exceeded!");
}
// Set the ceiling based on the coefficient.
switch (coefficient) {
case 1:
setCeiling(coefficient * 2);
break;
case 2:
setCeiling(coefficient * 3);
break;
else:
freakOut();
} // end switch
} catch(Exception ex) {
...
} // end try