Java学习-语言基础-基础语法
Java语言基础-基础语法
00-Java的基本程序设计结构
简单的Java应用程序
注释
数据类型
变量
运算符
字符串
输入输出
控制流
大数值
数组
01-简单的Java应用程序
1 |
|
- 关键字
Public
称为访问修饰符
,这些修饰符用于控制程序的其他部分对这段代码的访问级别。 - 关键字
class
表明Java程序中的全部内容都包含在类中。这里,只需要将类作为一个加载程序逻辑的容器,程序逻辑定义了应用程序的行为。 - 关键字
class
后面紧跟类名。Java中定义类名的规则很宽松。名字必须以字母开头,后面可以跟字母和数字的任意组合,长度上基本没有限制。但是不能使用Java保留字作为类名。 - 标准的命名规范为:类名是以大写字母开头的名词。如果名字由多个单词组成,每个单词的第一个字母都应该大写。
- 源代码的文件名必须与公共类的名字相同,并用
.java
作为扩展名。因此,存储这段源代码的文件名必须为FirstSample.java
。 - Java中的所有函数都属于某个类的方法(标准术语称其为方法,而不是成员函数)。
- 如果
main
方法正常退出,那么Java应用程序的推出代码为0,表示成功地运行了程序。如果需要在终止程序时返回其他的代码,那就需要调用System.exit
方法。
注意:根据Java语言规范,main方法必须申明为public。在Jaav SE 1.4及以后的版本中强制main方法是public的。
02-注释
- 使用
//
,其注释内容从//
开始到本行结尾。 - 使用
/*
和*/
将一段比较长的注释括起来。 - 以
/**
开始,以*/
结束,用于自动生成文档。
在Java中,/* */注释不能嵌套。也就是说,不能简单地把代码用/*和*/括起来作为注释,因为这段代码本身可能也包含一个*/
03-数据类型
Java是一种强类型语言。这就意味着必须为每一个变量申明一种类型。在Java中,一共有8种基本类型。
- 4种整型
- 2种浮点类型
- 1种用于表示
Unicode
编码的字符单元的字符类型char
- 1种用于表示真值的
boolean
类型
Java有一个能够表示任意精度的算术包,通常称为“大数值”。虽然被称为大数值,但它并不是一种新的Java类型,而是一个Java对象。
整型
整型用于表示没有小数部分的数值,它允许是负数。Java提供4种整型。
类型 存储需求 取值范围 int 4字节 -2 147 483 648 ~ 2 147 483 647(正好超过20亿) short 2字节 -32 768 ~ 32 767 long 8字节 -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 byte 1字节 -128 ~ 127 btye
——short
——int
——long
,2倍关系,等比增长。Java中,整型的范围与运行Java代码的机器无关
- 长整型数值有一个后缀L或l(如4000000000L)。
- 十六进制数值有一个前缀0X或0x(如0xCAFE)。
- 八进制有一个前缀0,例如,010对应8进制中的8。八进制表示法比较容易混淆,建议最好不要使用八进制常数。
- 从Java7开始,加上前缀0B或0b就可以写二进制数。例如,0b1001就是9。另外,同样是从Java7开始,还可以为数字字面量加上下划线,如用1_000_000(或0b1111_0100_0010_0100_0000)表示一百万。这些下划线只是为了让人们更好读。Java编译器会去除这些下划线。
注意:Java没有任何无符号(unsigned)形式的int、long、short、或byte类型。
浮点类型
浮点类型用于表示小数部分的数值。在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类型,例如,需要单精度数据的库,或者需要存储大量的数据。
floa类型的数值有一个后缀F或f(例如,3.14F)。没有后缀F的浮点数值(如3.14)默认为double类型。当然,也可以在浮点数值后面添加后缀D或d(例如,3.14D)
所有的浮点数值计算都遵循IEEE 754规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值。
- 正无穷大
- 负无穷大
- NaN(Not a Number)
例如,一个正整数除以0的结果是正无穷大。计算0/0或者负数的平方根结果为NaN。
常量Double.POSITIVE_INFINITY、Double.NEGEATIVE_INFINITY和Double.NaN(以及相应的float类型的常量)分别表示这三种特殊的值。
注意:所有NaN(非数值)的值都认为是不相同的。然而,可以使用Double.isNaN方法。
1
2if (x == Double.NaN) // 永远是false
if (Double.isNaN(x)) // 检查x是否是(非数值)警告:浮点数值不适用于无法接受舍入误差的金融计算中。例如,命令System.out.println(2.0 - 1.1)将打印出0.8999999999999999,而不是人们想象中的0.9。这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确地表示分数1/10。这就好像十进制无法精确地表示分数1/3一样。如果在数值计算中不允许有任何舍入误差,就应该使用BigDecimal类。
浮点类型
char
类型原本用于表示单个字符。如今,有些Unicode
字符可以用一个char
值描述,另外一些Unicode
值需要两个char
值。char
类型的字面量值要用单引号括起来。例如:'A'
是编码值为65所对应的字符常量。它与"A"
不同,"A"
是包含一个字符A的字符串。char
类型的值可以表示为十六进制值,其范围从\u0000
到\Uffff
。除了转移序列
\u
之外,还有一些用于表示特殊字符的转义序列,所有这些转义序列都可以出现在加引号的字符字面量或字符串中。转义序列 名称 Unicode值 \b
退格 008 \t
制表 009 \n
换行 00a \r
回车 00d \"
双引号 022 \'
单引号 027 \\
反斜杠 05e 警告:Unicode转义字符会在解析代码之前得到处理。例如,"\u0022+\u0022"并不是一个由引号(U+0022)包围加号构成的字符串。实际上,\u0022会在解析之前转换为",这会得到""+"",也就是一个空串。
更隐蔽地,一定要当心注释中的
\u
。注释
// \u00A0 is a newline
会产生一个语法错误,因为读程序时
\u00A0
会替换成一个换行符。类似地,下面这个注释
// Look inside c:\users
也会产生一个语法错误,因为
\u
后面并未跟着4个十六进制数。在Java中,char类型描述了UTF-16编码中的一个代码单元。
我们强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元。最好将字符串作为抽象数据类型处理。
boolean类型
boolean
(布尔)类型有两个值:false
和true
,用来判断逻辑条件。整型值和布尔值之间不能进行相互转换
。注意:在C++中,数值甚至指针可以代替boolean值。值0相当于布尔值false,非0值相当于布尔值true。在Java中则不是这样。
因此,Java程序员不会遇到下述麻烦:
if (x = 0) // oops... meant x == 0
在C++中这个测试可以编译运行,其结果总是
false
。而在Java中,这个测试将不能通过编译,其原因是整数表达式x = 0
不能转换为布尔值。