解决方案 »
- java监听WM_COPYDATA消息
- 关于java的小计算题
- JAVA集合问题
- 怎么设置JPasswordField的高度?
- 常量在内存中是如何表示的?例如:int i=3;这个3是个整数常量.怎么表示的呢?
- 请问怎样在禁止JList中的JCheckBox,使之不能操作?
- tij3, 垃圾收集问题. 顺便散点分...
- 怎么样在将splitPane的背景变白啊?
- 新手请教一个比较白痴的问题,还请各位不吝赐教!
- 求救!SimpleIO.java:9: variable c might not have been initialized System.out.println("The letter is : "+c); ^ 1 error
- 新手请教-关于抽象类Graphics
- 请教数据类型的问题
Java命名规范定义规范的目的是为了使项目的代码样式统一,使程序有良好的可读性。包的命名 (全部小写,由域名定义)Java包的名字都是由小写单词组成。但是由于Java面向对象编程的特性,每一名Java程序员都 可以编写属于自己的Java包,为了保障每个Java包命名的唯一性,在最新的Java编程规范中,要求程序员在自己定义的包的名称之前加上唯一的前缀。 由于互联网上的域名称是不会重复的,所以程序员一般采用自己在互联网上的域名称作为自己程序包的唯一前缀。
例如:net.frontfree.javagroup
类的命名 (单词首字母大写)根据约定,Java类名通常以大写字母开头,如果类名称由多个单词组成,则每个单词的首字母均应为大 写例如TestPage;如果类名称中包含单词缩写,则这个所写词的每个字母均应大写,如:XMLExample,还有一点命名技巧就是由于类是设计用来 代表对象的,所以在命名类时应尽量选择名词。
例如: Graphics
方法的命名 (首字母小写,字母开头大写)方法的名字的第一个单词应以小写字母作为开头,后面的单词则用大写字母开头。
例如:drawImage
常量的命名 (全部大写 ,常加下划线)
常量的名字应该都使用大写字母,并且指出该常量完整含义。如果一个常量名称由多个单词组成,则应该用下划线来分割这些单词。
例如:MAX_VALUE
参数的命名参数的命名规范和方法的命名规范相同,而且为了避免阅读程序时造成迷惑,请在尽量保证参数名称为一个单词的情况下使参数的命名尽可能明确。Javadoc注释Java除了可以采用我们常见的注释方式之外,Java语言规范还定义了一种特殊的注释,也就是我们 所说的Javadoc注释,它是用来记录我们代码中的API的。Javadoc注释是一种多行注释,以/**开头,而以*/结束,注释可以包含一些 HTML标记符和专门的关键词。使用Javadoc 注释的好处是编写的注释可以被自动转为在线文档,省去了单独编写程序文档的麻烦。
例如:/**
* This is an example of
* Javadoc
* @author darchon
* @version 0.1, 10/11/2002
*/在每个程序的最开始部分,一般都用Javadoc注释对程序的总体描述以及版权信息,之后在主程序中 可以为每个类、接口、方法、字段添加 Javadoc注释,每个注释的开头部分先用一句话概括该类、接口、方法、字段所完成的功能,这句话应单独占据一行以突出其概括作用,在这句话后面可以跟 随更加详细的描述段落。在描述性段落之后还可以跟随一些以Javadoc注释标签开头的特殊段落,例如上面例子中的@auther和@version,这 些段落将在生成文档中以特定方式显示。
变量和常量命名
变量的命名主要的的命名规范有以下三种:
Camel 标记法:首字母是小写的,接下来的单词都以大写字母开头
Pascal 标记法:首字母是大写的,接下来的单词都以大写字母开头
匈牙利标记法:在以Pascal标记法的变量前附加小写序列说明该变量的类型在Java我们一般使用匈牙利标记法,基本结构为scope_typeVariableName,它 使用1-3字符前缀来表示数据类型,3个字符的前缀必须小写,前缀后面是由表意性强的一个单词或多个单词组成的名字,而且每个单词的首写字母大写,其它字 母小写,这样保证了对变量名能够进行正确的断句。例如,定义一个整形变量,用来记录文档数量:intDocCount,其中int表明数据类型,后面为表 意的英文名,每个单词首字母大写。这样,在一个变量名就可以反映出变量类型和变量所存储的值的意义两方面内容,这使得代码语句可读性强、更加容易理解。 byte、int、char、long、float、 double、boolean和short。数据类型/前缀(附)
byte b
char c
short sh
int i
long l
char c
string s
float f
double d
hashtable h
[] arr
List lst
Vector v
StringBuffer sb
Boolean b
Byte bt
Map map
Object ob对于在多个函数内都要使用的全局变量,在前面再增加“g_”。例如一个全局的字符串变量:g_strUserInfo。在变量命名时要注意以下几点:· 选择有意义的名字,注意每个单词首字母要大写。· 在一段函数中不使用同一个变量表示前后意义不同的两个数值。· i、j、k等只作为小型循环的循环索引变量。· 避免用Flag来命名状态变量。· 用Is来命名逻辑变量,如:blnFileIsFound。通过这种给布尔变量肯定形式的命名方式,使得其它开发人员能够更为清楚的理解布尔变量所代表的意义。· 如果需要的话,在变量最后附加计算限定词,如:curSalesSum。· 命名不相包含,curSales和curSalesSum。· static final 变量(常量)的名字应该都大写,并且指出完整含义。· 如果需要对变量名进行缩写时,一定要注意整个代码中缩写规则的一致性。例如,如果在代码的某些区域中使用intCnt,而在另一些区域中又使用intCount,就会给代码增加不必要的复杂性。建议变量名中尽量不要出现缩写。· 通过在结尾处放置一个量词,就可创建更加统一的变量,它们更容易理解,也更容易搜索。例如,请使用 strCustomerFirst和strCustomerLast,而不要使用strFirstCustomer和strLastCustomer。常 用的量词后缀有:First(一组变量中的第一个)、Last(一组变量中的最后一个)、Next(一组变量中的下一个变量)、Prev(一组变量中的上 一个)、Cur(一组变量中的当前变量)。· 为每个变量选择最佳的数据类型,这样即能减少对内存的需求量,加快代码的执行速度,又会降低出错的可能性。用于变量的数据类型可能会影响该变量进行计算所产生的结果。在这种情况下,编译器不会产生运行期错误,它只是迫使该值符合数据类型的要求。这类问题极难查找。· 尽量缩小变量的作用域。如果变量的作用域大于它应有的范围,变量可继续存在,并且在不再需要该变量后的很长时间内仍然占用资源。它们的主要问题是,任何类 中的任何方法都能对它们进行修改,并且很难跟踪究竟是何处进行修改的。占用资源是作用域涉及的一个重要问题。对变量来说,尽量缩小作用域将会对应用程序的 可靠性产生巨大的影响。关于常量的命名方法,在JAVA代码中,无论什么时候,均提倡应用常量取代数字、固定字符串。也就是 说,程序中除0,1以外,尽量不应该出现其他数字。常量可以集中在程序开始部分定义或者更宽的作用域内,名字应该都使用大写字母,并且指出该常量完整含 义。如果一个常量名称由多个单词组成,则应该用下划线“_”来分割这些单词如:NUM_DAYS_IN_WEEK、MAX_VALUE。
请教下为什么下面这个程序可以运行
import java.awt.*;
import java.applet.*;
import java.util.*;
class myButton1 extends Canvas
{
AutoEvent parent;
Color color;
String label;
myButton1(AutoEvent parent,Color color,String label)
{
this.parent=parent;
this.color=color;
this.label=label;
}
public void paint(Graphics g)
{
//用指定颜色对圆角矩形进行填充
g.setColor(color);
int rnd=30;
g.fillRoundRect(0, 0, size().width, size().height, rnd, rnd);
//黑色画出圆角矩形的边框
g.setColor(Color.black);
g.drawRoundRect(0, 0, size().width, size().height, rnd, rnd);
//对字体进行设置
FontMetrics fm=g.getFontMetrics(); //获取当前上下文字体的字体规格
int width=fm.stringWidth(label); //字符串label的advance width,其基线从左到右的距离
int height=fm.getHeight(); //Font中文本行的标准height
int ascent=fm.getAscent(); //
int leading=fm.getLeading(); //Font的标准行间距
int horizMargin=(size().width-width)/2; //字符串左边空距离
int verMargin=(size().height-height)/2; //字符串上边缘到Top的距离
g.setColor(Color.white);
g.drawString(label, horizMargin, verMargin+ascent+leading);
}
//按下键盘事件
public boolean keyDown(Event evt,int key)
{
TextField t=(TextField)parent.h.get("keyDown");
t.setText(evt.toString());
return true;
}
//键盘弹起事件
public boolean keyUp(Event evt,int key)
{
TextField t=(TextField)parent.h.get("keyUp");
t.setText(evt.toString());
return true;
}
//丢失焦点事件
public boolean lostFocus(Event evt,Object w)
{
TextField t=(TextField)parent.h.get("lostFocus");
t.setText(evt.toString());
return true;
}
//获取焦点事件
public boolean gotFocus(Event evt,Object w)
{
TextField t=(TextField)parent.h.get("gotFocus");
t.setText(evt.toString());
return true;
}
//鼠标按下事件
public boolean mouseDown(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseDown");
t.setText(evt.toString());
return true;
}
//鼠标拖拽事件
public boolean mouseDrag(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseDrag");
t.setText(evt.toString());
return true;
}
//鼠标进入事件
public boolean mouseEnter(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseEnter");
t.setText(evt.toString());
return true;
}
//鼠标离开事件
public boolean mouseExit(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseExit");
t.setText(evt.toString());
return true;
}
//鼠标移动事件
public boolean mouseMove(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseMove");
t.setText(evt.toString());
return true;
}
//鼠标弹起事件
public boolean mouseUp(Event evt,int x,int y)
{
TextField t=(TextField)parent.h.get("mouseUp");
t.setText(evt.toString());
return true;
}
}
public class AutoEvent extends Applet{
Hashtable h=new Hashtable();
String[] event={"keyDown", "keyUp", "lostFocus",
"gotFocus", "mouseDown", "mouseUp",
"mouseMove", "mouseDrag", "mouseEnter",
"mouseExit"};
myButton1 b1=new myButton1(this,Color.blue,"test1");
myButton1 b2=new myButton1(this,Color.red,"test2");
public void init()
{
setLayout(new GridLayout(event.length+1,2));
for(int i=0;i<event.length;i++)
{
TextField t=new TextField();
t.setEditable(false);
add(new Label(event[i],Label.CENTER));
add(t);
h.put(event[i],t);
}
add(b1);
add(b2);
}
}类myButton1的首字母是小写的。在eclipse中可以运行。
首先,明确一点,Java是严格区分大小写。
其次,Java命名规范上确实说类需要大写,但这个不是强制性的。你可以小写,没人阻拦你。
再次,既然是这样,为什么在同一个包下面不能同时定义两个类,一个类名为A,另一个类名为a呢?
这跟操作系统有关。比如A的全限定类名为test.A,a的全限定类名为test.a
那么编译之后,将会有一个test文件夹,然后里面有两个class,一个是A.class,一个是a.class。
然后?看出来了么?你的windows能在同一个文件夹下同时创建a.txt和A.txt么?最后,给一个链接
http://stackoverflow.com/questions/10890805/case-sensitivity-of-java-class-names
首先,明确一点,Java是严格区分大小写。
其次,Java命名规范上确实说类需要大写,但这个不是强制性的。你可以小写,没人阻拦你。
再次,既然是这样,为什么在同一个包下面不能同时定义两个类,一个类名为A,另一个类名为a呢?
这跟操作系统有关。比如A的全限定类名为test.A,a的全限定类名为test.a
那么编译之后,将会有一个test文件夹,然后里面有两个class,一个是A.class,一个是a.class。
然后?看出来了么?你的windows能在同一个文件夹下同时创建a.txt和A.txt么?最后,给一个链接
http://stackoverflow.com/questions/10890805/case-sensitivity-of-java-class-names
我的第一个类叫myButton1,第二个类叫myButton。这样编译器也无法区分???
但过程比较麻烦。删除之后,提示找不到或者无法加载主类。我又在cmd下用javac把文件都编译了一遍。移到bin文件夹下才成功。
但是我突然又有个疑问,我小写的myButton运行成功了,当改成大写的时候,应该会出现像你说的那种问题:
编译MyButton类,向操作系统申请写入MyButton.class,但win会让他写入myButton.class,编译成功,但是javac严格区分大小写,还是要找MyButton.class。找不到,报错
但是我运行成功了。这是什么问题?bin下确确实实只有myButton.class。
楼主现在对Java的编译运行过程还没有概念。没有概念,讨论不了。