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

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

目录

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

1.注释

2.数据类型

2.1整型

2.2浮点类型

2.3char类型

2.4Unicode和char类型

2.5boolean类型

3.变量

4.运算符

4.1数学函数与常量

4.2数值类型之间的转换

4.3强制类型转换

4.4结合赋值和运算符

4.5自增和自减运算符

4.6关系和boolean运算符

4.7位运算符

4.8括号与运算符级别

4.9枚举类型

4.10字符串

4.11输入输出

4.11数组


1.注释

在Java中,有3种标记注释的方式。最常用的方式是使用//,其注释内容从//开始到本行结尾。当需要长篇的注释时,既可以在每行的注释前面标记//,也可以使用/*和*/将一段比较长的注释括起来。最后,第三种注释可以用来自动地生成文档。这种注释以/**开始,以*/结束。

2.数据类型

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

2.1整型

在Java中,整数的范围与运行Java代码的机器无关。这就解决了软件从一个平台移植到另一个平台,或者在同一个平台中的不同操作系统之间进行移植给程序员带来的诸多问题。由于Java程序必须保证在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。

长整型数值有一个后缀L或l(如4000000000L)。十六进制数值有一个0x或0X(如0xCAFE)。八进制有一个前缀0,例如,010对应八进制的8。很显然,八进制表示法比较容易混淆,所以建议最好不要使用八进制常数。

从Java7开始,加上前缀0b或0B就可以写二进制数。例如,0b1001就是9。另外 , 同样是从 Java 7 开始,还可以为数字字面量加下划线 ,如用1 _ 000 _ 000 ( 或0b1111 _ 0100 _ 0010 _ 0100 _ 0000 )表示一百万。 这些下划线只是为了让人更易读 。 Java编译器会去除这些下划线。

注意,Java没有任何无符号(unsigned)形式的int、long、short或byte类型。

2.2浮点类型

double表示这种类型的数值精度是float类型的两倍(有人称之为双精度数值)。绝大部分应用程序都采用double类型。float类型的数值有一个后缀F或f(例如3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D或d(例如,3.14D)。

警告:浮点数值不适用于无法接受舍入误差的金融计算中。例如,命令System.out.println(2.0-1.1)将打印出0.8999999999999999,而不是人们想象的0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确的表示分数1/10。这就好像十进制无法精确的表示分数1/3一样。如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类。

2.3char类型

char 类型原本用于表示单个字符。不过 ,现在情况已经有所变化 。如今,有些 Unicode字符可以用一个 char值描述,另外一些 Unicode 字符则需要两个char 值。

警告:Unicode转义序列会在解析代码之前得到处理。例如,"\u0022+\u0022"并不是由引号(U+0022)包围加号构成的字符串。实际上,\u0022会在解析之前转换为",这会得到""+"",也就是一个空串。

2.4Unicode和char类型

码点是指与一个编码表中的某个字符对应的代码值。在Unicode标准中,码点采用十六进制书写,并加上前缀U+,例如U+0041就是拉丁字母A的码点。Unicode的码点可以分成17个代码级别。第一个代码级别称为基本的多语言级别。码点从U+0000到U+FFFF,其中包括经典的Unicode代码,其余的16个级别码点从U+10000到U+10FFFF,其中包括一些辅助字符。

UTF-16编码采用不同长度的编码表示所有Unicode码点。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元;而辅助字符采用一对连续的代码单元进行编码。

在Java中,char类型描述了UTF-16编码中的一个代码单元。

我们强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元。最好将字符串作为抽象数据类型处理。

2.5boolean类型

boolean(布尔)类型有两个值:false和true,用来判断逻辑条件。整型值和布尔值之间不能进行相互转换。

3.变量

变量名必须是一个以字母开头并由字母或数字构成的序列。需要注意,与大多数程序设计语言相比,Java中“字母”和“数字”的范围更大。字母包括'A'~'Z'、'a'~'z'、'_'、'$'或在某种语言中表示字母的任何Unicode字符。

声明一个变量之后,必须用赋值语句对变量进行显示初始化。千万不要使用为初始化的变量。在Java中,变量的声明尽可能的靠近变量第一次使用的地方,这是一种良好的编写风格。

在Java中,利用关键字final指示常量。关键字final表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上。常量名使用全大写。在Java中,经常希望某个常量可以在一个类中的多个方法中使用,通常将这些常量称为类常量。可以使用关键字static final设置一个类常量。而且,如果一个常量被声明为public,那么其他类的方法也可以使用这个常量。

4.运算符

在Java中,使用算术运算符+、-、*、/表示加、减、乘、除运算。当参与/运算的两个操作数都是整数时,表示整数除法;否则,表示浮点除法。整数的求余操作(有时称为取模)用%表示。

需要注意,整数被0除将会产生一个异常,而浮点数被0除将会得到无穷大或NaN结果。

4.1数学函数与常量

在Math类中,包含了各种各样的数学函数。在编写不同类别的程序时,可能需要的函数也不同。

注释:在Math类,为了达到最快的性能,所有的方法都使用计算机浮点单元中的例程。

4.2数值类型之间的转换

 经常需要将一种数值类型转换为另一种数值类型。图3-1给出了数值类型之间的合法转换。在图3-1中有6个实心箭头,表示无信息丢失的转换;有3个虚箭头,表示可能有精度损失的转换。

4.3强制类型转换

强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟待转换的变量名。

警告:如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。例如,(byte)300的实际值为44。

4.4结合赋值和运算符

可以在赋值中使用二元运算符。

注释:如果运算符得到一个值,其类型与左侧操作数的类型不同,就会发生强制类型转换。

4.5自增和自减运算符

前缀形式会先完成加1,而后缀形式会使用变量原来的值。

4.6关系和boolean运算符

Java包含丰富的关系运算符。要检测相等性,可以使用两个等号==。另外可以使用!=检测不相等。最后,还有经常使用的<(小于)、>(大于)、<=(小于等于)和>=(大于等于)运算符。

Java沿用了C++的做法,使用&&表示逻辑“与”运算符,使用||表示逻辑“或”运算符。&&和||运算符是按照“短路”方式来求职的:如果第一个操作数已经能够确定表达式的值,第二个操纵数就不必计算了。

4.7位运算符

处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使用掩码技术得到整数的各个位。位运算符包括:&("and")|("or")^("xor")~("not")

另外,还有>><<运算符将位模式左移或右移。最后,>>>运算符会用0填充高位,这与>>不同,它会符号位填充高位。不存在<<<运算符。

警告:移位运算符的右操作数要完成模32的运算(除非左操作数是long类型,在这种情况下需要对右操作数模64)。例如,1<<35的值等同于1<<3或8。

4.8括号与运算符级别

表3-4给出了运算符的优先级。如果不使用圆括号,就按照给出的运算符优先级次序进行计算。同一个级别的运算符按照从左到右的次序进行计算(除了表中给出的右结合运算符外。)例如,由于&&的优先级比||的优先级高,所以表达式

a && b || c 等价于(a && b)|| c 又因为+=是右结合运算符,所以表达式a += b += c 等价于 a += (b += c)也就是将b += c的结果(加上c之后的b)加到a上。

4.9枚举类型

有时候,变量的取值只在一个有限的集合内。针对这种情况,可以自定义枚举类型。枚举类型包括有限个命名的值。例如,

enum Size {SMALL,MEDIUM,LARGE,EXTRA_LARGE};

现在,可以声明这种类型的变量:

Size s = Size.MEDIM;

Size类型的变量只能存储这个类型声明中给定的某个枚举值,或者null值,null表示这个变量没有设置任何值。

4.10字符串

从概念上讲,Java字符串就是Unicode字符序列。Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,很自然的叫做String。每个用双引号括起来的字符串都是String类的一个实例。

  • 拼接

    与绝大多数的程序设计语言一样,Java语言允许使用+号连接(拼接)两个字符串。当一个字符串与一个非字符串的值进行拼接时,后者被转换成字符串。
  • 不可变字符串

    ​​​String类没有提供用于修改字符串的方法。由于不能修改Java字符串中的字符,所以在Java文档中将String类对象称为不可变字符串。不可变字符串有一个优点:编译器可以让字符串共享。
  • 空串和Null串

    空串""是长度为0的字符串。可以调用以下代码检查一个字符串是否为空:if(str.length()==0)或if(str.equals(""))。空串是一个Java对象,有自己的串长度(0)和内容(空)。不过,String变量还可以存放一个特殊的值,名为null,这表示目前没有任何对象与该变量关联。要检查一个字符串是否为null,要使用以下条件:if(str == null)。
  • 构建字符串

    在JDK5.0中引入StringBuilder类。这个类的前身是StringBuffer,其效率稍有些低,但允许采用多线程的方式执行添加或删除字符的操作。如果所有字符串在一个单线程中编辑,则应该使用StringBuilder替代它。这两个类的API是相同的。

4.11输入输出

  • 读取输入

    要通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。Scanner in = new Scanner(System.in);
  • 格式化输出

    每个以%字符开始的格式说明符都用相应的参数替换。格式说明符尾部的转换符将指示被格式化的数值类型:f表示浮点数,s表示字符串,d表示十进制整数。表3-5列出了所有的转换符。




4.11数组

数组长度不要求是常量:new int[n]会创建一个长度为n的数组

1、数组初始化以及匿名数组​​​​​​​

在Java中,提供了一种创建数组对象并同时赋予初始值的简化书写形式。下面是一个例子:

int[] smallPrimes = {2,3,5,7,11,13}

请注意,在使用这种语句时,不需要调用new。甚至还可以初始化一个匿名的数组:

new int {17,19,23,29,31,37}

注释:在Java中,允许数组长度为0。在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得非常有用。此时可以创建一个长度为0的数组:

new elementType[0]

注意,数组长度为0与null不同。

发布了17 篇原创文章 · 获赞 0 · 访问量 226

猜你喜欢

转载自blog.csdn.net/SUN19980421/article/details/104095263