java代码格式?java代码的基本格式
各位老铁们,大家好,今天由我来为大家分享java代码格式,以及java代码的基本格式的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!
C++、C、或者java,这些语言写代码时应该要怎么规范格式,
C/C++源代码书写规范1.在.h/.cpp的开头应有一段格式统一的说明,内容包括:a.文件名(FileName);b.创建人(Creator);c.文件创建时间(Date);d.简短说明文件功能、用途(Comment)。例:////////////////////////////////////////////// FileName: GetVersion.h// Creator: Liu Haifeng// Date: 2002-10-28// Comment: Get file version information////////////////////////////////////////////2.对于主要功能函数应有注释说明。内容包括:功能、入口/出口参数,必要时还可有备注或补充说明,对于函数中的主要功能代码,也应有注释说明。注释以英文为主。例://////////////////////////////////////////////Remarks:// Check file whether exist////Parameters:// LPCTSTR lpszPathName: Input full path name////Return values:// int: Non-zero means success// Zero means failure////////////////////////////////////////////3.每列代码的长度推荐为80列,最长不得超过120列;折行以对齐为准。例:HANDLE KSOpenFile(const char cszFileName[],int nMode);或者:BOOL KSReadFile(HANDLE hFile,void*pvBuffer,int nReadSize,int*pnReadSize);4.循环、分支代码,判断条件与执行代码不得在同一行上。例:正确:if(n==-2)n= 1;elsen= 2;不得写做:if(n==-2) n= 1;else n= 2;5.指针的定义,*号既可以紧接类型,也可以在变量名之前。例:可写做:int* pnsize;也可写做:int*pnsize;但不得写做:int* pnsize;6.在类的成员函数内调用非成员函数时,在非成员函数名前必须加上"::"。例:::Sleep(2000);7.函数入口参数有缺省值时,应注释说明。例:BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace/*= TRUE*/);或者:BOOL KSSaveToFile(const char cszFileName[],BOOL bCanReplace//= TRUE);8. else if必须写在一行。9.与‘{’、‘}’有关的各项规定:9.1‘{’、‘}’应独占一行。在该行内可有注释。例:正确:for(i= 0; i< cbLine; i++){//.....printf("Line%d:", i);printf("%s\n", pFileLines);}不得写做:for(i= 0; i< cb; i++){ printf("Line%d:", i);printf("%s\n", pFileLines);}9.2‘{’必须另起一行,‘{’之后的代码必须缩进一个Tab。‘{’与‘}’必须在同一列上。例:正确:if(i> 0){m= 1;n++;}不得写做:if(i> 0){m= 1;n++;}例外:if(i== 0){ ASSERT(FALSE); return;}9.3在循环、分支之后若只有一行代码,虽然可省略‘{’、‘}’,但不推荐这么做。若省略后可能引起歧义,则必须加上‘{’、‘}’。例:正确:if(n==-2)n= 1;elsen= 2;或者:if(n==-2){ n= 1;}else if(n!= nTemp){ n= 2;}else{ n= 3;}不得写做:if(n==-2)n= 1;else if(n!= nTemp)n= 2;elsen= 3;不推荐:if(i< 1){ n= 1;}else{if(i== 1){ n= 2;}else{if(i> 1){ n= 3;}}}10.与空格有关的各项规定。10.1在所有两目、三目运算符的两边都必须有空格。在单目运算符两端不必空格。但在‘->’、‘::’、‘.’、‘[’、‘]’等运算符前后,及‘&’(取地址)、‘*’(取值)等运算符之后不得有空格。例:正确:int n= 0, nTemp;for(int i= nMinLine; i<= nMaxLine; i++)不得写做:int n=0, nTemp;for( int i=nMinLine; i<=nMaxLine; i++)10.2 for、while、if等关键词之后应有1个空格,再接‘(’,之后无空格;在结尾的‘)’前不得有空格。例:正确:if(-2== n)不得写做:if(-2== n)或if(-2== n)等等。10.3调用函数、宏时,‘(’、‘)’前后不得有空格。例:正确:printf("%d\n", nIndex);不得写做:printf("%d\n", nIndex);printf("%d\n", nIndex);等等。10.4类型强制转换时,‘(’‘)’前后不得有空格例:可写做:(KSFile*)pFile;也可写做:(KSFile*)pFile不得写做:( KSFile*)pFile( KSFile*) pFile11.与缩进有关的各项规定11.1缩进以 Tab为单位。1个 Tab为 4个空格11.2下列情况,代码缩进一个 Tab:1.函数体相对函数名及'{'、'}'。例:int Power(int x){return(x* x);}2. if、else、for、while、do等之后的代码。3.一行之内写不下,折行之后的代码,应在合理的位置进行折行。若有+-*/等运算符,则运算符应在上一行末尾,而不应在下一行的行首。11.3下列情况,不必缩进:switch之后的 case、default。例:switch(nID){case ID_PLAY:......break;case ID_STOP:......break;default:......break;12.对于涉及到系统的功能调用,要求使用系统提供的宏,不得直接使用具体的数值。例: char szSystemPath[MAX_PATH]={0};正确char szSystemPath[260]={0};错误13.关于函数编写的规定13.1除了非常简单的函数或者没有必要,函数需要有返回值,并且推荐返回值的类型为int,成功时为 true,失败时为false。不推荐直接使用1和0来表示。13.2在函数内部变量定义全部放在函数的开始处,不能在代码中间出现变量定义。变量定义需要初始化值,一般是0、false、NULL等。13.3程序员自行编写的函数不推荐使用DWORD等指明字节长度的变量类型,推荐使用unsigned long等变量类型。对于ULONG等vc系统定义的变量类型,推荐使用unsigned long来代替。如果调用系统API,在MSDN中已经指明了是DWORD等类型,则可以使用。13.4推荐使用int nResult作为函数自身的返回值变量,int nRetCode、BOOL bRetCode作为调用其他函数的返回值变量。13.5推荐使用goto语句来统一函数出口,goto语句一般只能跳转到一个函数出口,最多只能有两个,出口标识必须命名为Exit0和Exit1。在出口处必须显式检查曾经申请过的系统资源(如内存),并且进行释放。13.6如果编写DLL,除非特殊情况,导出函数的调用类型必须是__stdcall,便于多模块协同工作。附录:1.函数编写示范///////////////////////////////////////////////////////////////////////// Remarks:// Get file version information//// Parameters:// [in] const char cszPathName: Input file path name// [out] PVERSION_INFO*pVersionInfo: File version information//// Return values:// int: Non-zero means success, zero means failure///////////////////////////////////////////////////////////////////////int GetFileVersion(const char cszPathName, PVERSION_INFO*pVersionInfo){int nResult= false;int nRetCode= false;char szSystemPath[MAX_PATH]={0};nRetCode= IsFileExist(cszPathname);if(!nRetCode)goto Exit0;//Others code herenResult= true;Exit0:return nResult;}以前你的习惯可能是我定义一个函数,通过传递参数去实现这个函数的功能。面向对象编程要体现三个特点“封装、继承、多态”;比如你写一个飞这个函数,你需要在这里传递参数飞机。换个角度,你定义一个类是飞机,那这个飞机在封装的过程就有飞。降落等这功能(函数)。你想要用飞这个功能(函数)的时候,你只需调用飞机这个类“飞”这个成员函数。
java 代码怎么写
package com.date;
public class DateDome{
private int year=0;//年
private int month=0;//月
private int day=0;//日
public DateDome(int year,int month,int day){
this.year=year;
this.month=month;
this.day=day;
}
public DateDome(){
}
//年大于等于0
public boolean isYear(){
boolean suc=false;
if(year<0)return suc;
else if(year>=0)suc=true;
return suc;
}
//判断月数1-12月
public boolean isMonth(){
boolean suc=false;
if(month<0||month>12)return false;
else suc=true;
return suc;
}
//判断天数1-31号
public boolean isDay(){
boolean suc=false;
if(day<=0||day>31)return suc;
else suc=true;
return suc;
}
//是否为闰年
public boolean isRunNian(int year){
boolean suc=false;
if(year>=0){
if(year%400==0||(year%4==0&&year%100!=0)){
suc=true;
}
}
return suc;
}
//判断合法年月日
public boolean isInvaildate(int year,int month, int day){
boolean suc=false;
if(isYear()&&isMonth()&&isDay()){
switch(month){
case 1:
suc=true;
break;
case 2:
if(isRunNian(year)&&day<=29){
suc=true;
}else if(day<=28){
suc=true;
}
break;
case 3:
suc=true;
break;
case 4:
if(day<=30)suc=true;
break;
case 5:
suc=true;
break;
case 6:
if(day<=30)suc=true;
break;
case 7:
suc=true;
break;
case 8:
suc=true;
break;
case 9:
if(day<=30)suc=true;
break;
case 10:
suc=true;
break;
case 11:
if(day<=30)suc=true;
break;
case 12:
suc=true;
break;
}
}
return suc;
}
//根据日期得到天数
public int getDaysByDate(int year,int month,int day){
int days=0;
if(isInvaildate(year,month,day)){
for(int i=0;i<year;i++){
if(isRunNian(i)){
days+=366;
}else{
days+=365;
}
}
for(int i=1;i<month;i++){
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12){
days+=31;
}else if(i==4||i==6||i==9||i==11){
days+=30;
}else if(i==2){
if(isRunNian(year)){
days+=29;
}else{
days+=28;
}
}
}
days+=day-1;
return days;
}else{
System.out.println("处理有非法日期!!!");
return-1;
}
}
//根据天数得到日期数int[]由,年、月、日组成的数组
public int[] getDateByDays(int days){
int das=0;//预计的天数
int y=0,m=1,d=1;//0年1月1号
int[] date=new int[3];
boolean suc=true;
int temp=0;
if(days<0){
System.out.println("请输入合法天数!!!");
return new int[]{0,0,0};
}
while(suc){
if(isRunNian(y)){
temp=366;
}else{
temp=365;
}
das+=temp;
if(das<days){
y++;
}else{
das-=temp;
break;
}
}
while(suc){
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12){
temp=31;
}else if(m==4||m==6||m==9||m==11){
temp=30;
}else if(m==2){
if(isRunNian(y)){
temp=29;
}else{
temp=28;
}
}
das+=temp;
if(das<days){
m++;
}else{
das-=temp;
break;
}
}
d=days-das+1;
date[0]=y;
date[1]=m;
date[2]=d;
return date;
}
//得到多少天前或后合法日期
public int[] addORsubDay(int dd){
int days=getDaysByDate(year,month,day);
if(days>=0){
days+=dd;
if(days>0){
return getDateByDays(days);
}else{
System.out.println("处理日期不能小于0年1月1号");
return new int[]{0,0,0};//代表无效日期
}
}else{
System.out.println("处理日期不能小于0年1月1号");
return new int[]{0,0,0};//年,月,日
}
}
//得到两个日期相距天数
public int TwoDate(int[] date1,int[] date2){
int d=-1;
if(isInvaildate(date1[0],date1[1],date1[2])&&isInvaildate(date2[0],date2[1],date2[2])){
int days1=getDaysByDate(date1[0],date1[1],date1[2]);
int days2=getDaysByDate(date2[0],date2[1],date2[2]);
d=days1-days2;
return d>=0?d:-d;
}else
{
System.out.println("处理有非法日期!!!");
return d;
}
}
}
我写了你提出的功能,你还可以扩展其它功能。
怎么读取java文件中字符编码格式
1:简单判断是UTF-8或不是UTF-8,因为一般除了UTF-8之外就是GBK,所以就设置默认为GBK。
按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。其实,如果项目运行的平台就是中文操作系统,如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式,只要判定两种常见的编码就可以了:GBK和UTF-8。由于中文Windows默认的编码是GBK,所以一般只要判定UTF-8编码格式。
对于UTF-8编码格式的文本文件,其前3个字节的值就是-17、-69、-65,所以,判定是否是UTF-8编码格式的代码片段如下:
File file= new File(path);
InputStream in= new java.io.FileInputStream(file);
byte[] b= new byte[3];
in.read(b);
in.close();
if(b[0]==-17&& b[1]==-69&& b[2]==-65)
System.out.println(file.getName()+":编码为UTF-8");
else
System.out.println(file.getName()+":可能是GBK,也可能是其他编码");
2:若想实现更复杂的文件编码检测,可以使用一个开源项目cpdetector,它所在的网址是:。它的类库很小,只有500K左右,cpDetector是基于统计学原理的,不保证完全正确,利用该类库判定文本文件的代码如下:
读外部文件(先利用cpdetector检测文件的编码格式,然后用检测到的编码方式去读文件):
/**
*利用第三方开源包cpdetector获取文件编码格式
*
*@param path
*要判断文件编码格式的源文件的路径
*@author huanglei
*@version 2012-7-12 14:05
*/
public static String getFileEncode(String path){
/*
* detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法加进来,如ParsingDetector、
* JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的
*字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar
* cpDetector是基于统计学原理的,不保证完全正确。
*/
CodepageDetectorProxy detector= CodepageDetectorProxy.getInstance();
/*
* ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
*指示是否显示探测过程的详细信息,为false不显示。
*/
detector.add(new ParsingDetector(false));
/*
* JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码
*测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
*再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
detector.add(JChardetFacade.getInstance());//用到antlr.jar、chardet.jar
// ASCIIDetector用于ASCII编码测定
detector.add(ASCIIDetector.getInstance());
// UnicodeDetector用于Unicode家族编码的测定
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charset charset= null;
File f= new File(path);
try{
charset= detector.detectCodepage(f.toURI().toURL());
} catch(Exception ex){
ex.printStackTrace();
}
if(charset!= null)
return charset.name();
else
return null;
}
String charsetName= getFileEncode(configFilePath);
System.out.println(charsetName);
inputStream= new FileInputStream(configFile);
BufferedReader in= new BufferedReader(new InputStreamReader(inputStream, charsetName));
读jar包内部资源文件(先利用cpdetector检测jar内部的资源文件的编码格式,然后以检测到的编码方式去读文件):
/**
*利用第三方开源包cpdetector获取URL对应的文件编码
*
*@param path
*要判断文件编码格式的源文件的URL
*@author huanglei
*@version 2012-7-12 14:05
*/
public static String getFileEncode(URL url){
/*
* detector是探测器,它把探测任务交给具体的探测实现类的实例完成。
* cpDetector内置了一些常用的探测实现类,这些探测实现类的实例可以通过add方法加进来,如ParsingDetector、
* JChardetFacade、ASCIIDetector、UnicodeDetector。
* detector按照“谁最先返回非空的探测结果,就以该结果为准”的原则返回探测到的
*字符集编码。使用需要用到三个第三方JAR包:antlr.jar、chardet.jar和cpdetector.jar
* cpDetector是基于统计学原理的,不保证完全正确。
*/
CodepageDetectorProxy detector= CodepageDetectorProxy.getInstance();
/*
* ParsingDetector可用于检查HTML、XML等文件或字符流的编码,构造方法中的参数用于
*指示是否显示探测过程的详细信息,为false不显示。
*/
detector.add(new ParsingDetector(false));
/*
* JChardetFacade封装了由Mozilla组织提供的JChardet,它可以完成大多数文件的编码
*测定。所以,一般有了这个探测器就可满足大多数项目的要求,如果你还不放心,可以
*再多加几个探测器,比如下面的ASCIIDetector、UnicodeDetector等。
*/
detector.add(JChardetFacade.getInstance());//用到antlr.jar、chardet.jar
// ASCIIDetector用于ASCII编码测定
detector.add(ASCIIDetector.getInstance());
// UnicodeDetector用于Unicode家族编码的测定
detector.add(UnicodeDetector.getInstance());
java.nio.charset.Charset charset= null;
try{
charset= detector.detectCodepage(url);
} catch(Exception ex){
ex.printStackTrace();
}
if(charset!= null)
return charset.name();
else
return null;
}
URL url= CreateStationTreeModel.class.getResource("/resource/"+"配置文件");
URLConnection urlConnection= url.openConnection();
inputStream=urlConnection.getInputStream();
String charsetName= getFileEncode(url);
System.out.println(charsetName);
BufferedReader in= new BufferedReader(new InputStreamReader(inputStream, charsetName));
3:探测任意输入的文本流的编码,方法是调用其重载形式:
charset=detector.detectCodepage(待测的文本输入流,测量该流所需的读入字节数);
上面的字节数由程序员指定,字节数越多,判定越准确,当然时间也花得越长。要注意,字节数的指定不能超过文本流的最大长度。
4:判定文件编码的具体应用举例:
属性文件(.properties)是Java程序中的常用文本存储方式,象STRUTS框架就是利用属性文件存储程序中的字符串资源。它的内容如下所示:
#注释语句
属性名=属性值
读入属性文件的一般方法是:
FileInputStream ios=new FileInputStream(“属性文件名”);
Properties prop=new Properties();
prop.load(ios);
String value=prop.getProperty(“属性名”);
ios.close();
利用java.io.Properties的load方法读入属性文件虽然方便,但如果属性文件中有中文,在读入之后就会发现出现乱码现象。发生这个原因是load方法使用字节流读入文本,在读入后需要将字节流编码成为字符串,而它使用的编码是“iso-8859-1”,这个字符集是ASCII码字符集,不支持中文编码,
方法一:使用显式的转码:
String value=prop.getProperty(“属性名”);
String encValue=new String(value.getBytes(“iso-8859-1″),”属性文件的实际编码”);
方法二:象这种属性文件是项目内部的,我们可以控制属性文件的编码格式,比如约定采用Windows内定的GBK,就直接利用”gbk”来转码,如果约定采用UTF-8,就使用”UTF-8″直接转码。
方法三:如果想灵活一些,做到自动探测编码,就可利用上面介绍的方法测定属性文件的编码,从而方便开发人员的工作
补充:可以用下面代码获得Java支持编码集合:
Charset.availableCharsets().keySet();
可以用下面的代码获得系统默认编码:
Charset.defaultCharset();
java代码格式的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java代码的基本格式、java代码格式的信息别忘了在本站进行查找哦。