
正文
java规范代码演示 java编写规范
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
JAVA 中的 -> 是什么意思?
本文主要是讲解 Java 中的运算符。对于运算符而言是编程参与计算的基础核心内容。最基础的加减乘除取余。到后面的逻辑运算大于小于等于不等于。
本文内容思维导图
先从最简单的算术运算符说起。
算术运算符
算术运算符又分为java规范代码演示: 一元运算符和二元运算符, 并且在 Java 中包含三元运算符, 就是条件运算符或者叫作三目运算符只是名字不同,含义相同。
一元运算符
一元运算符只有一个变量就可以进行操作。常用的一元运算符就是自加,自减。一共四个一元运算符。
示例代码, 这里使用 JShell 快速查看结果。
需要注意其中的自加和自减的规则。当运算符在前的时候 ++ a; 运算符的优先级比较高, 所以会先处理这个代码, 所以可以看到代码里面直接返回java规范代码演示了结果 4。但是 a ++ 的时候却没有直接返回结果, 因为他的运算符比价低。 所以重新调用该变量就会打印出来当前的值。
代码定义如下:
运行查看结果:
二元运算符
二元运算符一共5个。分辨是加减乘除取余(+、-、*、/、%)。
其中,在进行除法运算的时候,遵守除数不能为 0java规范代码演示;
如果除数为 0 就会报错, 错误如下:
代码示例如下:
运行查看结果,编译, 运行:
赋值运算符
对于赋值运算符基本上贯穿了整个类的周期。常用的 = 赋值。 和简写赋值和算术运算符的使用方式。赋值运算符有如下图所示的使用方式。
使用 JShell 进行测试代码如下:
代码示例如下:
int a = 0;
a = 3;
System.out.println(a);// 3
a += 3;
System.out.println(a);// 6
a -= 3;
System.out.println(a);// 3
a *= 3;
System.out.println(a);// 9
a /= 3;
System.out.println(a);// 3
a %= 2;
System.out.println(a);// 1
比较运算符
比较运算符, 也可以说是布尔运算符。 主要是比较两个表达式的结果。 (表达式) 操作符 (表达式)
根据上面的运算符进行案例演示, 一定要动手练习。 更能加深印象。
只要知道比较运算是最终得到一个布尔类型的值。并且在进行比较运算的时候, 一定要注意其优先级。代码这次自己动手做吧。 有上面的演示, 应该很容易就搞定。
逻辑运算符
对于逻辑运算符, 主要就是 3 个。 逻辑与、逻辑或、逻辑非。和数学中的与或非意思一致。
格式: 表达式1 逻辑运算符 表达式2
逻辑运算符大多数情况下会和其他的运算符一起使用, 主要做一些简单或复杂的逻辑运算。 并且通常都是和 if, for 等逻辑表达式一起使用。
简单的说一说, 对于逻辑与和逻辑或不同点。 逻辑与为第一个表达式和第二个表达式都等于真值的情况下才会表达式成立。 逻辑或是第一个表达式为真值的情况下, 就不会在执行第二个表达式。 因为不管第二个表达式是否成立, 该逻辑运算都是真值了。
位运算符
对于任何编程语言而言, 最终的操作都是二进制表示, 因为计算机只认识二进制, 而八进制,十进制或者十六进制都是为了让开发人员方便开发。对于 Java 来说, 也可以针对数的某个值进行运算。这就需要位运算符的参与了。也是为了方便对二进制进行操作。
位运算符主要有一下运算符:
位与
按位与和逻辑运算符的逻辑与很类似,一个比较的表达式, 一个是按照位来进行判断。在二进制中, 位与的判断为都为 1 的记做 1 否则记做 0。
按位与规则如下:
0 0 = 0;
0 1 = 0;
1 0 = 0;
1 1 = 1;
先看一个都是正整数的值 10 2。
最终得出结果 0000 1010 0000 0010 = 0000 0010 转换成十进制就是2。
对于负值的位与运算有点区别的地方就是参与运算的是补码。
举例说明: 10 -2
具体如何得到补码, 可以参考我之前写的文章基础类型的相互转换。这里对于负值的情况需要了解什么是原码,反码和补码。参与运算的是补码。-2 的原码是 1000 0010 反码是 1111 1101 补码 在反码的基础最后一位加 1 得到1111 1110。
最终结果得到 0000 1010 1111 1110 = 0000 1010 十进制也就是 10。
这个时候怎么校验结果是否正确呢? 直接写 Java 代码就好了, 打开 jshell:
位或 |
按位或, 和逻辑或很类似, 只要二者有一位 1 结果就是 1。
按位或规则如下:
0 | 0 = 0;
0 | 1 = 1;
1 | 0 = 1;
1 | 1 = 1;
根据上面的运算得到了 10 | 2 = 10。
负值有略有不同。
还是要灵活运用原码反码和补码,特别是负数的情况下, 因为正数的原码和补码一致。
位反 ~
按位反, 和逻辑非类似。 是对位进行直接取反。
按位反规则如下:
~1 = 0;
~0 = 1;
先用 2 进行运算处理:
在进行 -2 的运算操作
-2 的原码 需要转换成补码, 用补码进行取反运算。 得到 1 的二进制。
代码演示如下:
位异或 ^
位异或是基于二进制的位运算。 采用符号 XOR 在 Java 中使用 ^ 进行表示。两个值相同取 0, 不同的取 1。
按位异或规则如下:
1 ^ 1 = 0;
0 ^ 0 = 0;
1 ^ 0 = 1;
0 ^ 1 = 1;
举例 10 ^ 2
举例 10 ^ -2
代码演示结果的准确性:
异或在代码优化和实际的工作中会经常用到。 后续实战中用到了在详细分析用法, 现在知道进行异或运算即可。
位左移
将一个操作数进行二进制位往左移, 移动后空出来的低位用 0 进行填充。移除的高位舍去。高位丢弃,低位补零。
操作数 移动的位数
举例说明 10 2
位左移代码演示:
位右移
将一个操作数进行二进制往右移, 移动后,有两种情况,一种有无符号一种是有符号。也就是最高位为 0 移动后高位补 0, 如果最高位(符号位)为 1, 移动后空缺位都为 1.
操作数 移动的位数
举例说明 10 2
对于负数举例 -2 2 空缺位补 1:
位右移代码演示:
注意这两者的区别。
无符号位右移
这个是和右移操作上是一致的, 但是不管是否最高位(符号位)为 1, 空缺位都使用 0 进行补齐。
操作数 移动的位数
举例说明 10 2
对于负数来说。 这里有点区别, 因为对于负值来说, 上面其实都是 32 位, 为了让大家看起来舒服转换成了对应的 8 位的。 因为无符号位右移会改变正负值, 所以 32 位的负值和 8 位的负值是不一致的。
并且 Java 在处理 byte, short , char 等值进行移位操作前, 会先将类型转换成 int 因为 int 占用 32 位。
所以 -2 2 的时候,8 位运算应该是如下:
因为会先转换成 32 位。 所以 32 位的 -2 等于如下:
也就是结果: 1073741823
无符号位右移代码如下:
理解原理。 更能发现问题。
类型比较运算符
这里说的类型比较是对象的比较。 判断每个定义的变量是否是某个类。该类可以是(接口、抽象类)。
语法规则:
boolean = 变量 instanceof 类
举例说明:
运行查看结果:
这里需要注意:
null 值是没有引用的, 所以和任何值都不相等。
instanceof 比较的是引用类型, 不能用于基础类型的比较。
条件(三目)运算符
三目运算在 Java 中只有一个就是 ? :
三目运算的语法格式:
`布尔表达式 ? 表达式1 : 表达式2`
大部分情况下, 对于三目运算是 if 和 else 的简写。举例说明:
int a = 1; int b = 2;
String msg = a b ? "a 比 b 大" : "a 比 b 小";
System.out.println(msg);
//上面的结果和下面一致
if(a b){
msg = "a 比 b 大!";
}else{
msg = "a 比 b 小!";
}
//msg 是 "a 比 b 小!"
运算符的优先级
所有的数学运算都是从左向右进行运算的, 对于 Java 来说大部分运算也是遵守从左向右的规则。 但是一元运算符,赋值运算符和三目运算符例外。他们是从右向左进行运算。
运算符的内容告一段落, 接下来就是开始逻辑表达式的学习。 教程编写不易。希望各位大看官点赞收藏加关注。更多内容大放送。
相关问答
Q1: java 的代码详解
class Person{//Persion类
String name;//String类变量java规范代码演示,未初始化,默认null
int age;//int类变量,默认0
public Person()//Person类的无参构造方法,一般用来初始化变量,如之前的name。 比如有时候需要定义人这个类特有的属性,会说话,那么一般会在无参构造函数里面写上canTalk=true;
{
}
public Person(String name,int age)//Person类的有参构造方法,参数name和age,和类变量name、age无关
{
this.name=name;//this指Persion类,就是把于传过来变量name赋值给之前的类变量name
this.age=age;//同上
}
public String talk(){//具有String返回值的方法,调用它的时候会得到String返回值
return "我是"+this.name+",今年"+this.age+"岁";//调用talk的时候用String a=talk();的形式,a的值就是"我是"+this.name+",今年"+this.age+"岁"
}
}
public class TestObjectArray{//TestObjectArray公共类,java文件的文件名需和公共类值相同,这段代码必须出现在TestObjectArray.java文件中
public static void main(String[] args){//主方法,程序的入口
Person[] p={new Person("张三",25),new Person("李四",30),new Person("王五",35)};//实例化Persion类,用人这个类来举例,每个人都有相同的一些特性,但每个人不同特性的属性值不同,如年龄的大小不同,实例化就相当于产生不同的人。这里是用数组的形式实例化
for(int i=0;ip.length;i++){//根据p的长度循环
System.out.println(p[i].talk());//p[1]时,会调用Persion类里面的talk()函数,并且传入的参数是 "张三",25 ,那么会显示java规范代码演示:"我是张三,今年25岁" 。System.out.println()换行显示括号内的内容
}
}
}
Q2: 求java窗体代码,可以显示默认长文本,代码格式最好规范可以直接使用。
importjava.awt.*;importjava.awt.event.*;importjava.awt.geom.*;importjava.util.*;importjavax.swing.*;/***多线程,小球演示.打开Windows任务管理器,可看到线程变化。可搜索到,run()方法/.start()**du:程序技巧体会:所谓产生一个小球,即是new其类对象,其属性携带画小球的坐标、颜色、所在容器等参数。**一个类,属性用来作为参数容器用,方法.完成功能。**///运行类publicclassBouncePress{//publicstaticvoidmain(String[]args){JFrameframe=newBouncePressFrame();//生成窗口。执行构造。-----业务逻辑。frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//similarto//window//listenerframe.show();}}classBouncePressFrameextendsJFrame{privateBallPressCanvascanvas;publicBouncePressFrame(){setSize(600,500);//窗口大小setTitle("BounceBall");ContainercontentPane=getContentPane();//Swing的窗口不能直接放入东西,只能在其上的ContentPane上放。canvas=newBallPressCanvas();//生成一个新面板。-----canvascontentPane.add(canvas,BorderLayout.CENTER);//窗口中心加入该面板。JPanelbuttonPanel=newJPanel();//再生成一个新面板。----buttonPanel//调用本类方法addButton。addButton(buttonPanel,"Start",//生成一个按钮"Start"---加入面板buttonPanelnewActionListener(){//|------按钮绑上action监听器。publicvoidactionPerformed(ActionEventevt){//|小球容器对象的addBall(Thread.NORM_PRIORITY-4,Color.black);//事件处理时,执行---addBall()方法。---产生小球(参数对象)---加入List中---开始画球。}});//按一次,addBall()一次---产生一个新小球---加入List中---开始画此新小球。//---画球线程BallPressThread的run()---小球(参数对象).move()---每次画时,先移动,再判断,再画。//---BallPressCanvas类的canvas对象.paint()---自动调BallPressCanvas类的paintComponent(Graphics//g)方法。//---该方法,从List中循环取出所有小球,第i个球,---调该小球BallPress类//.draw()方法---调Graphics2D方法画出小球。--使用color/addButton(buttonPanel,"Express",newActionListener(){publicvoidactionPerformed(ActionEventevt){addBall(Thread.NORM_PRIORITY+2,Color.red);}});addButton(buttonPanel,"Close",newActionListener(){publicvoidactionPerformed(ActionEventevt){System.exit(0);}});contentPane.add(buttonPanel,BorderLayout.SOUTH);}publicvoidaddButton(Containerc,Stringtitle,ActionListenerlistener){JButtonbutton=newJButton(title);//生成一个按钮。c.add(button);//加入容器中。button.addActionListener(listener);//按钮绑上action监听器。}/**主要业务方法。*/publicvoidaddBall(intpriority,Colorcolor){//生成小球(参数对象)BallPressb=newBallPress(canvas,color);//生成BallPress对象,携带、初始化//画Ball形小球,所需参数:所在容器组件,所需color--black/red.//小球加入List中。canvas.add(b);//面板canvas的ArrayList中加入BallPress对象。BallPressThreadthread=newBallPressThread(b);//生成画小球的线程类BallPressThread对象。传入BallPress对象(携带了画球所需//容器、color参数)。thread.setPriority(priority);thread.start();//callrun(),ballstarttomove//画球线程开始。---BallPressThread的run()---小球(参数对象).move()---先移动,再画。canvas.paint---BallPressCanvas类的}}//画球的线程类。classBallPressThreadextendsThread{privateBallPressb;publicBallPressThread(BallPressaBall){b=aBall;}//画球开始。publicvoidrun(){try{for(inti=1;i自动绘制面板,且自动调paintComponent(Graphics//g)方法,---重写该方法,绘制面板(及其上组件)。//作用2)该类对象属性ArrayListballs---兼作小球(参数对象)的容器。classBallPressCanvasextendsJPanel{privateArrayListballs=newArrayList();publicvoidadd(BallPressb){balls.add(b);//向ArrayList中添加球。当按下按钮,添加多个球时,都保存在这个List中。}//重写了javax.swing.JComponent的paintComponent()方法。//paint()方法自动调用该方法。publicvoidpaintComponent(Graphicsg){super.paintComponent(g);Graphics2Dg2=(Graphics2D)g;for(inti=0;i=canvas.getWidth()){//小球右边已经到画板右边。x=canvas.getWidth()-15;dx=-dx;//开始反向运动。}if(y=canvas.getHeight()){//小球已到画板顶。y=canvas.getHeight()-15;dy=-dy;}canvas.paint(canvas.getGraphics());//画出面板对象canvas----(及其上所有组件)////.paint()方法,自动调用}}/*importjava.awt.*;importjava.awt.event.*;importjava.awt.geom.*;importjava.util.*;importjavax.swing.*;*//***单线程,小球演示搜索不到,run()方法/.start()*//*publicclassBounce{publicstaticvoidmain(String[]args){JFrameframe=newBounceFrame();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//similarto//window//listenerframe.show();}}不懂的再问啊。。。
Q3: 用JAVA编写一段代码;
/**
* 将2进制字符串置换为10进制整数
* @author developer_05
*/
public class Exam05 {
public static void main(String[] args) {
String strBin = "11000000111001101"; //98765
long num;
num = convert(strBin);
System.out.println(strBin + "(2) : " + num + "(10)");
}
/**
* 将2进制字符串置换为10进制整数
* @param strHex 2进制字符串
* @return 10进制整数
*/
public static long convert(String strBin){
char[] arr = strBin.toCharArray();
long retValue = 0;
for(int i=0; iarr.length; i++){
retValue = retValue * 2 + (arr[i] - '0');
}
return retValue;
}
}
运行演示:
11000000111001101(2) : 98765(10)
Q4: java软件开发的代码规范
1、组织与风格
(1).关键词和操作符之间加适当的空格。
(2).相对独立的程序块与块之间加空行
(3).较长的语句、表达式等要分成多行书写。
(4).划分出的新行要进行适应的缩进,使排版整齐,语句可读。
(5).长表达式要在低优先级操作符处划分新行,操作符放在新行之首。
(6).循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分。
(7).若函数或过程中的参数较长,则要进行适当的划分。
(8).不允许把多个短语句写在一行中,即一行只写一条语句。
(9).函数或过程的开始、结构的定义及循环、判断等语句中的代码都要采用缩进风格。
注:如果大家有兴趣可以到安安DIY创作室博客,有相关说明性的文章和解释。
2、注解
Java 的语法与 C++ 及为相似,那么,你知道 Java 的注释有几种吗?是两种?
// 注释一行
/* ...... */ 注释若干行
不完全对,除了以上两种之外,还有第三种,文档注释:
/** ...... */ 注释若干行,并写入 javadoc 文档
注释要简单明了。
String userName = null; //用户名
边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。
在必要的地方注释,注释量要适中。注释的内容要清楚、明了,含义准确,防止注释二义性。
保持注释与其描述的代码相邻,即注释的就近原则。
对代码的注释应放在其上方相邻位置,不可放在下面。对数据结构的注释应放在其上方相邻位置,不可放在下面;对结构中的每个域的注释应放在此域的右方;
同一结构中不同域的注释要对齐。
变量、常量的注释应放在其上方相邻位置或右方。
全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。
在每个源文件的头部要有必要的注释信息,包括:文件名;版本号;作者;生成日期;模块功能描述(如功能、主要算法、内部各部分之间的关系、该文件与其它文件关系等);主要函数或过程清单及本文件历史修改记录等。
/**
* Copy Right Information : Neusoft IIT
* Project : eTrain
* JDK version used : jdk1.3.1
* Comments : config path
* Version : 1.01
* Modification history :2003.5.1
* Sr Date Modified By Why What is modified
* 1. 2003.5.2 Kevin Gao new
**/
在每个函数或过程的前面要有必要的注释信息,包括:函数或过程名称;功能描述;输入、输出及返回值说明;调用关系及被调用关系说明等
/**
* Description :checkout 提款
* @param Hashtable cart info
* @param OrderBean order info
* @return String
*/
public String checkout(Hashtable htCart,
OrderBean orderBean)
throws Exception{
}
javadoc注释标签语法
@author 对类的说明 标明开发该类模块的作者
@version 对类的说明 标明该类模块的版本
@see 对类、属性、方法的说明 参考转向,也就是相关主题
@param 对方法的说明 对方法中某参数的说明
@return 对方法的说明 对方法返回值的说明
@exception 对方法的说明 对方法可能抛出的异常进行说明
3、命名规范
定义这个规范的目的是让项目中所有的文档都看起来像一个人写的,增加可读性,减少项目组中因为换人而带来的损失。(这些规范并不是一定要绝对遵守,但是一定要让程序有良好的可读性)较短的单词可通过去掉元音形成缩写;要不然最后自己写的代码自己都看不懂了,那可不行。
较长的单词可取单词的头几发符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。
使用匈牙利表示法
Package 的命名
Package 的名字应该都是由一个小写单词组成。
package com.neu.util
Class 的命名
Class 的名字必须由大写字母开头而其他字母都小写的单词组成,对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。
public class ThisAClassName{}
Class 变量的命名
变量的名字必须用一个小写字母开头。后面的单词用大写字母开头
userName , thisAClassMethod
Static Final 变量的命名
static Final 变量的名字应该都大写,并且指出完整含义。
/**
*DBConfig PATH
**/
public static final String
DB_CONFIG_FILE_PATH =com.neu.etrain.dbconfig;
参数的命名
参数的名字必须和变量的命名规范一致。
数组的命名
数组应该总是用下面的方式来命名:
byte[] buffer;
而不是:
byte buffer[];
方法的参数
使用有意义的参数命名,如果可能的话,使用和要赋值的字段一样的名字:
SetCounter(int size){
this.size = size;
}
4、文件样式
所有的 Java(*.java) 文件都必须遵守如下的样式规则:
版权信息
版权信息必须在 java 文件的开头,比如:
/*
* Copyright ? 2000 Shanghai XXX Co. Ltd.
* All right reserved.
*/
其他不需要出现在 javadoc 的信息也可以包含在这里。
Package/Imports
package 行要在 import 行之前,import 中标准的包名要在本地的包名之前,而且按照字母
顺序排列。如果 import 行中包含了同一个包中的不同子目录,则应该用 * 来处理。
package hotlava.net.stats;
import java io.*;
import java.util.Observable;
import hotlava.util.Application;
这里 java。io.* 使用来代替InputStream and OutputStream 的。
Class
接下来的是类的注释,一般是用来解释类的。
/**
* A class representing a set of packet and byte counters
* It is observable to allow it to be watched, but only
* reports changes when the current set is complete
*/
接下来是类定义,包含了在不同的行的 extends 和 implements
public class CounterSet
extends Observable
implements Cloneable
Class Fields
接下来是类的成员变量:
/**
* Packet counters
*/
protected int[] packets;
public 的成员变量必须生成文档(JavaDoc)。proceted、private和 package 定义的成
员变量如果名字含义明确的话,可以没有注释。
存取方法
接下来是类变量的存取的方法。它只是简单的用来将类的变量赋值获取值的话,可以简单的
写在一行上。
/**
* Get the counters
* @return an array containing the statistical data. This array has been
* freshly allocated and can be modified by the caller.
*/
public int[] getPackets() { return copyArray(packets, offset); }
public int[] getBytes() { return copyArray(bytes, offset); }
public int[] getPackets() { return packets; }
public void setPackets(int[] packets) { this.packets = packets; }
其它的方法不要写在一行上
构造函数
接下来是构造函数,它应该用递增的方式写(比如:参数多的写在后面)。
访问类型 (public, private 等.) 和 任何 static, final 或 synchronized 应该在一行
中,并且方法和参数另写一行,这样可以使方法和参数更易读。
public
CounterSet(int size){
this.size = size;
}
克隆方法
如果这个类是可以被克隆的,那么下一步就是 clone 方法:
public
Object clone() {
try {
CounterSet obj = (CounterSet)super.clone();
obj.packets = (int[])packets.clone();
obj.size = size;
return obj;
}catch(CloneNotSupportedException e) {
throw new InternalError(Unexpected CloneNotSUpportedException: +
e.getMessage());
}
}
类方法
下面开始写类的方法:
/**
* Set the packet counters
* (such as when restoring from a database)
*/
protected final
void setArray(int[] r1, int[] r2, int[] r3, int[] r4)
throws IllegalArgumentException
{
//
// Ensure the arrays are of equal size
//
if (r1.length != r2.length || r1.length != r3.length || r1.length != r4.length)
throw new IllegalArgumentException(Arrays must be of the same size);
System.arraycopy(r1, 0, r3, 0, r1.length);
System.arraycopy(r2, 0, r4, 0, r1.length);
}
toString 方法
无论如何,每一个类都应该定义 toString 方法:
public
String toString() {
String retval = CounterSet: ;
for (int i = 0; i data.length(); i++) {
retval += data.bytes.toString();
retval += data.packets.toString();
}
return retval;
}
}
main 方法
如果main(String[]) 方法已经定义了, 那么它应该写在类的底部.
5、代码可读性
避免使用不易理解的数字,用有意义的标识来替代。
不要使用难懂的技巧性很高的语句。
源程序中关系较为紧密的代码应尽可能相邻。
6、代码性能
在写代码的时候,从头至尾都应该考虑性能问题。这不是说时间都应该浪费在优化代码上,而是我们时刻应该提醒自己要注意代码的效率。比如:如果没有时间来实现一个高效的算法,那么我们应该在文档中记录下来,以便在以后有空的时候再来实现她。
不是所有的人都同意在写代码的时候应该优化性能这个观点的,他们认为性能优化的问题应该在项目的后期再去考虑,也就是在程序的轮廓已经实现了以后。
不必要的对象构造
不要在循环中构造和释放对象
使用 StringBuffer 对象
在处理 String 的时候要尽量使用 StringBuffer 类,StringBuffer 类是构成 String 类的基础。
String 类将 StringBuffer 类封装了起来,(以花费更多时间为代价)为开发人员提供了一个安全的接口。当我们在构造字符串的时候,我们应该用 StringBuffer 来实现大部分的工作,当工作完成后将 StringBuffer 对象再转换为需要的 String 对象。比如:如果有一个字符串必须不断地在其后添加许多字符来完成构造,那么我们应该使用StringBuffer 对象和她的 append() 方法。如果我们用 String 对象代替StringBuffer 对象的话,会花费许多不必要的创建和释放对象的 CPU 时间。大家可以来安安DIY创作室一起讨论。
避免太多的使用 synchronized 关键字避免不必要的使用关键字 synchronized,应该在必要的时候再使用她,这是一个避免死锁的好方法。
7、编程技巧
byte 数组转换到 characters
为了将 byte 数组转换到 characters,你可以这么做:
Hello world!.getBytes();
Utility 类
Utility 类(仅仅提供方法的类)应该被申明为抽象的来防止被继承或被初始化。
初始化
下面的代码是一种很好的初始化数组的方法:
objectArguments = new Object[] { arguments };
枚举类型
JAVA 对枚举的支持不好,但是下面的代码是一种很有用的模板:
class Colour {
public static final Colour BLACK = new Colour(0, 0, 0);
public static final Colour RED = new Colour(0xFF, 0, 0);
public static final Colour GREEN = new Colour(0, 0xFF, 0);
public static final Colour BLUE = new Colour(0, 0, 0xFF);
public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF);
}
这种技术实现了RED, GREEN, BLUE 等可以象其他语言的枚举类型一样使用的常量。
他们可以用 '==' 操作符来比较。
但是这样使用有一个缺陷:如果一个用户用这样的方法来创建颜色 BLACK new Colour(0,0,0)
那么这就是另外一个对象,'=='操作符就会产生错误。她的 equal() 方法仍然有效。由于这个原因,这个技术的缺陷最好注明在文档中,或者只在自己的包中使用。
8、编写格式
代码样式
代码应该用 unix 的格式,而不是 windows 的(比如:回车变成回车+换行)
文档化
必须用 javadoc 来为类生成文档。不仅因为它是标准,这也是被各种 java 编译器都认可的方法。使用 @author 标记是不被推荐的,因为代码不应该是被个人拥有的。
缩进
缩进应该是每行2个空格. 不要在源文件中保存Tab字符. 在使用不同的源代码管理工具时Tab字符将因为用户设置的不同而扩展为不同的宽度.如果你使用 UltrEdit 作为你的 Java 源代码编辑器的话,你可以通过如下操作来禁止保存Tab字符, 方法是通过 UltrEdit中先设定 Tab 使用的长度室2个空格,然后用 Format|Tabs to Spaces 菜单将 Tab 转换为空格。
页宽
页宽应该设置为80字符. 源代码一般不会超过这个宽度, 并导致无法完整显示, 但这一设置也可以灵活调整. 在任何情况下, 超长的语句应该在一个逗号或者一个操作符后折行. 一条语句折行后, 应该比原来的语句再缩进2个字符.
{} 对
{} 中的语句应该单独作为一行. 例如, 下面的第1行是错误的, 第2行是正确的:
if (i0) { i ++ }; // 错误, { 和 } 在同一行
if (i0) {
i ++
}; // 正确, { 单独作为一行
} 语句永远单独作为一行.如果 } 语句应该缩进到与其相对应的 { 那一行相对齐的位置。
括号
左括号和后一个字符之间不应该出现空格, 同样, 右括号和前一个字符之间也不应该出现空格. 下面的例子说明括号和空格的错误及正确使用:
CallProc( AParameter ); // 错误
CallProc(AParameter); // 正确
不要在语句中使用无意义的括号. 括号只应该为达到某种目的而出现在源代码中。下面的例子说明错误和正确的用法:
if ((I) = 42) { // 错误 - 括号毫无意义
if (I == 42) or (J == 42) then // 正确 - 的确需要括号
9、代码编译
1.编写代码时要注意随时保存,并定期备份,防止由于断电、硬盘损坏等原因造成代码丢失。
2.同一项目组内,最好使用相同的编辑器,并使用相同的设置选项。
3.合理地设计软件系统目录,方便开发人员使用。
4.打开编译器的所有告警开关对程序进行编译。
5.在同一项目组或产品组中,要统一编译开关选项。
6.使用工具软件(如Visual SourceSafe)对代码版本进行维护。如果大家有不明白的可以到安安DIY创作室留言。
10、可移植性
Borland Jbulider 不喜欢 synchronized 这个关键字,如果你的断点设在这些关键字的作用域内的话,调试的时候你会发现的断点会到处乱跳,让你不知所措。除非必须,尽量不要使用。
换行
如果需要换行的话,尽量用 println 来代替在字符串中使用\n。
你不要这样:
System.out.print(Hello,world!\n);
要这样:
System.out.println(Hello,world!);
或者你构造一个带换行符的字符串,至少要象这样:
String newline = System.getProperty(line.separator);
System.out.println(Hello world + newline);
PrintStream
PrintStream 已经被不赞成(deprecated)使用,用 PrintWrite 来代替它。
Q5: 具体给我讲解一下这个最简单的JAVA代码
关键是 public staic 是公共静态的意思吗??
答:差不多
那为什么要写这个呢?
答:一会儿再说
不写这个可以吗??
答:不可以
这个东西是什么意思啊 弄不懂
答:如此这般,这般如此;
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
class Message{
public static void main(String[] args){
Systerm.out.println("欢迎来到JAVA世界!");
}
}
public意思是公有的,说白了就到哪里都可以访问这个main方法,没什么限制;
static意思是静态的,说白了就是执行main方法的时候,可以没有对象!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
main方法是一个特殊的方法,是程序执行的入口,一个Java程序从main方法开始执行。Java虚拟机在执行Java程序之前会事先分配一个主线程,然后在主线程里面执行我们这个main方法,明白了吧?所以我们经常说main方法叫主线程!线程就是一个程序里面不同的执行路径!算了,这些不理解也无所谓,总之,你就记住,Java程序从main方法开始执行,在你这里当程序运行的时候,从main方法进来,然后做的第一件事就是Systerm.out.println("欢迎来到JAVA世界!");
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
必须是public,要不然Java虚拟机想执行你这个Message类的main方法,如果你是“私有”的,不让人家访问,还怎么执行啊?
必须是static,因为执行你这个Message类的main方法,如果这个方法不是静态的,那么想执行,事先还得new出一个Message类的对象来,累死了!static的,可以没有对象,就执行。
java规范代码演示的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java编写规范、java规范代码演示的信息别忘了在本站进行查找喔。






