第三章 Java的基本程序设计结构 (1)

来源:互联网 发布:移动数据流量叠加卡 编辑:程序博客网 时间:2024/04/28 03:11

3.2 注释

与大多数程序语言一样,Java的注释是不会出现在可执行程序中。因此,可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀。在Java中有三种注释方式。

  • 最常用的方式是使用//,其注释内容从//开始到本行结尾。
    System.out.println("We will user 'Hello, World!'");//is this too cute?
  • 当需要长篇注释时,既可以在每行的注释前面标记//,也可以用/**/将一段比较长的注释括起来。
    /* 这是一段很长的注释*/    System.out.println("We will user 'Hello, World!'");
  • 第三种注释可以用来自动地生成文档。
/** * 这可以用来生成文档 * @version study-01 * @author zjk-order */ public class FirstSample{    public static void main(String[] args){        System.out.println("We will user 'Hello, World!'");    } }

注意: 在Java中,/* */注释不能嵌套。也就是说,如果代码本身包含了一个*/,就不能用/**/将注释括起来。


3.3 数据类型

Java 是一种强类型语言。这意味着每一变量声明一种类型,在Java中,一共有8种基本类型(primitive type),其中有4种整型,2种浮点类型,1种用于表示Unicode编码的字符单元的字符类型char和一种用于表示真值得boolean类型。

注意:Java有一种能够表示任意精度算书包,通常称为“大数值”(big number)。虽然被称为大数值,但是它并不是一种新的Java数据类型,而是一个Java对象。

3.3.1 整型

整数用于表示没有小数部分的数值,它允许是负数。Java提供了4种整型,具体容如下:

类型 存储类型 取值范围 int 4 字节 -2 147 483 648 ~ 2 147 483 647 short 4 字节 -32 768 ~ 32 767 long 8 字节 -9 2323 372 036 854 775 808 ~ 2323 372 036 854 775 807 byte 1 字节 -128 ~ 127

在通常情况下,int类型最常用。但是如果表示星球上的居住人数,就需要使用long类型。byte和short主要用于特定的应用场合,例如,底层文件处理或者需要控制占用存储空间量的大数组。
在Java中,整型的范围和Java代码的机器运行无关。
长整型数值有一个后缀L(如:40000000000000000L)。十六进制数值有一个前缀0x(如:0xCAFE)。八进制前缀0。例如,010对应八进制中的8。很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数。

注意:Java没有任何无符号类型(unsigned)。

3.3.2 浮点类型

浮点类型用于表示有小数部分的数值。在Java中有两种浮点类型,具体内容如下:

类型 存储需求 取值范围 float 4字节 大约±3.402 823 47E + 38F(有效位数为6-7位) double 8字节 大约 ±1.797 693 134 862 315 70E + 308 (有效位数为15位)

double表示这种类型的数值精度是float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double类型。在很多情况下,float类型的精度很难满足需求。
float类型的数值有一个后缀F(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D(例如,3.14D)。
所有的浮点数都遵循IEEE 754规范。下面用于表示溢出和出错情况的三种特殊的浮点数值
* Double.POSITIVE_INFINITY 正无穷大
* Double.NEGATIVE_INFINITY 负无穷大
* Double.NaN (不是一个数值)
但是在实际情况中很少遇到。特别要说明的是,不能这样检测一个特定的值是否等于Double.NaN:

 if(x == Double.NaN)

所有“飞数值”的值都认为是不相同的。然而,可以使用Double.isNaN方法:

if(Double.isNaN(x))

3.3.3 char类型

char类型用于表示单个字符。通常永磊表示字符常量。例如:‘A’是编码为65所对应的字符常量。与“A”不同,“A”是一个包含字符A的字符串。Unicode编码单元可以表示为十六进制值。其范围从\u0000到\Uffff。例如:\u2122表示注册符号(™),\u03C0 表示希腊字符π。

3.3.4 boolean 类型

boolean 类型有两个值:false和true,用于判定逻辑条件。整型值和布尔值之间不能相互转换。

3.4 变量

在Java中,每一个变量属于一种类型(type)。在声明变量时,变量所属的类型位于变量名之前。这里列举一些声明变量的示例:

    double salary;    int vacationDays;    long earthPopulation;    boolean done;

变量名必须是以一个字母或数字构成的序列。变量名中所有的字符都是有意义的,并且大小写敏感。变量名的长度没有限制。
*注意: 如果想知道哪些Unicode字符属于Java中的“字母”,可以使用Character类的isJavaIdentifierStart和isJavaIdentifierPart方法进行检测。
不能将变量命名为Java保留字。*

3.4.1 变量初始化

声明一个变量之后,必须用赋值语句对变量进行显示初始化,千万不要使用未被初始化的变量。例如,Java编译器认为下面语句序列是错误的:

    int vacationDays;    System.out.print(vacationDays);//ERROR--variable not initialized

要想对一个已经进行声明过的变量进行赋值,就需要将变量名放在等号(=)左侧,相应取值的Java表达式放在等号的右侧。

    int vacationDays;    vacationDays = 12;

也可以将变量的声明和初始化放在同一行中。例如:

    int vacationDays = 12;

最后在Java中可以声明放在代码中的任何地方。例如,下例带面的书写形式在Java 中完全是合法的:

double salary = 65000.0;System.out.println(salsry);int vacationDays = 12; //OK to declare a variable here

3.4.2 常量

在Java 中,利用关键字final指示常量。例如:

public class Constants{    public static void main(String[] args){        final double CM_PER_INCH = 2.54;        double paperWidth = 8.5;        double paperHeight = 11;        System.out.println("Paper size in centimeters:"            + paperWidth*CM_PER_INCH +"by"+paperHeight *CM_PER_INCH );    }}

关键字 final 表示这个变量只能被复制一次,一旦被赋值之后,就不能够再更改了。习惯上常量名使用全大写。
在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。下面使用类常量的示例:

    public class Constant2{        public static final double CM_PER_INCH = 2.54;        public staitc  void main(String[] args){            double paperWidth = 8.5;            double paperHeight = 11;            System.out.println("Paper size in centimeters:"                + paperWidth*CM_PER_INCH +"by"+paperHeight *CM_PER_INCH );        }    }

需要注意,类常量的定义位于main方法的外部。因此,在同一个类的其他方法中也是可以使用这个常量。而且,如果常量被声明为public,那么其他类的方法也可以使用这个常量。

3.5 运算符

在Java中,使用算数运算符+、-、*、/表示加、减、乘、除运算。当参与/运算的恋歌操作数都是整数时,表示整数除法;否则,表示浮点数除法。整数的求余操作(有时称为取模)用%表示。例如15/2=7,15%2=1,15.0/2=7/5。
需要注意整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。
可以在赋值语句中采用一种简化的格式书写二元算数运算符。
例如,
x+=4 等于 x=x+4;

3.5.1 自增运算符与自减运算符

当然,程序员都知道加1、减1是数值变量最常见的操作。在Java中,借鉴了c和c++的实现方式,也使用了自增、自减运算符:n++将变量n的当前值加1;n–将n的当前值减1。例如:

    int n = 12;    n++;

n的值将变成13。因为这些运算符改变了变量的值。所以他的错作数不是是数值。例如,4++就是一条非法的语句。
实际上,这两个运算符有两种形式,上面介绍的是运算符放在操作数的后面的后缀形式,还有一种前缀形式,++n。两种方式都是对变量值加1。但在表达式中,这两种形式就有区别了。前缀方式先进行加1运算;后缀方式则使用变量原来的值。

    int m =7;    int n =7;    int a = 2* ++m;//new a is 16,m is 8    int b = 2*n++; //new  b is 14,n is 8

我们建议不要在其他表达式的内部使用++,这样编写的代码很容易令人困惑,并会产生烦人的BUG。

3.5.2 关系运算符与boolean运算符

Java包含各种关系运算符。其中,使用两个等号==检测是否相等。例如,3==7的值为false。
使用!=检测是否不相等。例如,3!=7的值为false。
另外,经常使用的运算符还有<,>,<=和>=。
Java沿用了C++的习惯,用&&表示逻辑“与”、用||表示逻辑“或”。从!=运算符很同意看出,!表示逻辑“非”。&&和||是按照“短路”的方式求值。如果第一个操作数已经能够正确表达式的值,第二个操作数就不必计算了。如果用&&对表达式进行计算:

expression1 && expression2

并且第一个表达式值为false,结果不能为真。因此,第二个表达式的值就没有必要计算。这种表达式可以避免一些错误的发生。例如,表达式:

x!=0&&1/x>x+y // no division by 0

当x为0时,不会计算第二部分。因此,若x为0,1/x不被计算,也不会出现除以0的错误。
与之类似,对于

expression1 || expression2

当第一个表达式为true时,结果自动为true。不必再计算第二部分。
最后,Java支持三元操作符?:。在很多时候,这个操作符非常有用。表达式

    condition ? expression1 : expression2;

当条件condition为真时计算第一个表达式,否则计算第二个表达式。例如:

    x < y ? x:y;

返回x和y中较小的那个值。

3.5.3 位运算符

在处理整型数值时,可以直接对组成整型数值的各个位进行操作。这意味着可以使用屏蔽技术获得证书中的各个位。位运算符包括:
&(“与”)、|(“或”)、^(“异或”)、~(“非”)
这些位运算符在位模式下工作。例如,如果n是一个整型变量,并且用二进制表示的n从右数第四位为1,那么

    int fourtBitFromRight = (n & 0b1000) /ob1000;

返回1;否则返回0,通过运算用2的幂次方的&运算可以将其他位屏蔽掉,而值保留其中的某一位。
注意:&和|运算符应用于布尔值,得到的结果也是布尔值。这两个运算符与&&和||的运算非常相似,只是不按“短路”方式计算。即在得到计算结果之前,一定要计算两个操作数的值。
另外,“>>”和“<<”运算符将二进制位进行右移或左移操作。当需要建立为模式屏蔽默写位时,使用两个运算符十分方便:

    int fourthBitFormRigth = (n&(1<<3))>>3;

最后,>>>运算符将用0填充最高位;>>运算符用符号位填充最高位。没有<<<运算符。

阅读全文
0 0
原创粉丝点击