Java的基本程序设计结构(第一部分)
Java的基本程序设计结构
序言:
本文推荐具有C语言基础的、耐心的同学进行阅读,本文中省略了部分与C语言相同的知识点,想要深入学习Java的同学请点这里 |->我是链接
本文分为三个部分,其他部分正在写,作者欢迎纠错,但拒绝人身攻击。
一、数据类型:
基本类型(四类八种)
1. 整型:
- byte
字节数:1
数据表示范围:-128~127 - short
字节数:2
数据表示范围:-32 768~32 767 - int
字节数:2
数据表示范围:-32 768~32 767 - long
字节数:4
数据表示范围:-2 147 483 648~2 147 483 647
在Java中,整型的范围与运行Java代码的机器无关,解决了平台移植的问题。
相反,C/C++程序需要针对不同的处理器选择更为高效的整型,移植时易发生整数溢出。
由于Java在所有机器上都能够得到相同的运行结果,所以各种数据类型的取值范围必须固定。
长整型数值有一个后缀 L 或 1
- 十六进制数值有一个前缀 0x 或 0X
- 八进制数值有一个前缀 0
2. 浮点型
- float
字节数:4
数据表示范围:约为 ±3.402 823 47E+38F(有效位数为6~7位) - double
字节数:8
数据表示范围:±1.797 693 134 862 315 70E+308(有效位数为15位)
double 表示双精度,绝大部分的应用程序都采用 double 类型。在很多情况下,float 类型的精度很难满足需求。使用 float 的情况:需要单精度数据的库,或者需要存储大量数据。
float 类型的数值有一个后缀 F 或 f 。没有后缀的浮点数值默认为 double 类型,也可以在浮点数值的后面添加后缀 D 或 d 。
所有的浮点数值计算都遵循IEEE 754规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:(在实际应用中很少遇到)
- 正无穷大
常量:Double.POSITIVE_INFINITY- 负无穷大
常量:Double.NEGATIVE_INFINITY- NaN(不是一个数字)
常量表示:Double.NaN
3. Unicode和char类型
char类型的字面量值要用单引号括起来。
char 类型的值可以表示为十六进制值。(\u)
特殊字符的转义序列:
转义序列 | 名称 | Unicode值 |
---|---|---|
\b | 退格 | \u0008 |
\t | 制表 | \u0009 |
\n | 换行 | \u000a |
\r | 回车 | \u000d |
\” | 双引号 | \u0022 |
\’ | 单引号 | \u0027 |
\ | 反斜杠 | \u005c |
- Unicode转义序列会在解析代码之前得到处理(优先转义,包括计算,注意陷阱)
- 一定要注意注释中的\u,在某些情况下注释中的 \u 同样具有转义作用。
- 最好不要使用 char 数据类型,除非确实需要处理 UTF-16 代码单元,最好将字符串作为抽象数据类型处理。
4. boolean类型
-
布尔类型有两个值: true 和 false ,用来判断逻辑条件。
-
整型和布尔值之间不能相互转换。
在C++中,数值甚至指针可以替代布尔值(例如 “假” 的值为 “0”)。
二、变量
1. 变量初始化
声明一个变量后,必须用赋值语句对变量进行显示初始化,未经初始化的变量不能通过编译。
在Java中,可以把变量声明放在任何地方。
C和C++中,区分变量的声明和定义,而Java中不进行区分。
2. 常量
- 在 Java 中,使用关键字 final 指示常量 关键字 final 表示这个变量只能被赋值一次,习惯上常量名使用全大写。
- 在 Java 中,如果希望某个常量可以在一个类的多个方法中使用,这个常量被称为类常量,可以使用关键字 static final
设置一个类常量,定义在 main 的外部。
const是Java的保留关键字,不使用。
三、运算符
-
算术运算与C基本相同(没啥太大区别。。。)
-
除法运算时不能被0除,整型被0除会产生一个异常,浮点数被0除会得到无穷大或NaN结果。
关键字strictfp,,使用严格的浮点计算,基本上用不到。
1. 数学函数与常量
在 Math 类中,包含了各种各样的数学函数。在编写不同类型的程序时,可能需要的函数也不同。
- 例 :计算一个数的平方根
double x = 4 ;
double y = Math.sqrt(x) ;
System.out.println(y) ; //输出 2.0
//println 方法和 sqrt 方法存在微小的差异。sqrt 不处理对象, println 处理 System.out 对象。
//在 Java 中,没有幂运算,因此需要借助 Math 类的 pow 方法。语句:
double y = Math.pow(x ,a );
//表示将的值设置为 x 的 a 次幂。pow 方法有两个 double 类型的参数,其返回结果也为 double 类型。
//Math 类也提供了一些常用的三角函数:
Math.sin
Math.cos
Math.tan
Math.atan
Math.atan2
//还有指数函数以及它的反函数——自然对数以及以 10 为底的对数:
Math.exp
Math.log
Math.log10
//最后,Java 还提供了两个用于表示 π 和 e 常量的近似值
Math.PI
Math.E
不必在数学方法名和常量名前添加前缀"Math",只要在源文件的顶部使用静态导入即可:
import static java.lang.Math.*;
2. 强制类型转换
在必要的时候,int 类型的值会自动的转换为 double 类型。但另一方面,有时也需要将 double 转换成 int 。
在 Java 中,允许强制类型转换,例:
double x = 9.997;
int nx = (int) x;
//强制类型转换通过截断小数部分将浮点值转换为整型。
double x = 9.997;
int nx = (int) Math.round(x);
//使用 Math.round 对浮点数进行四舍五入计算,以便得到最接近的整数。
注意:进行强制类型换时不能超出目标类型的数据范围!
一旦超出目标数据范围,结果就会被截断成一个完全不同的值。
3. 结合赋值和运算符
可以在赋值中使用二元运算符。(此处与C语言极为相近)
x += 4;等价于x = x + 4;
如果运算符得到一个值,其类型与左侧操作数的类型不同,就会发生强制类型转换,例如:
如果 x 是一个 int ,则以下语句是合法的:
x += 3.5;
此时将把值设置为(int)(x+3.5)
4. 自增与自减运算符
(此处又与C语言极为相近)
int n = 12;
n++;
//与C语言极为相似。。。。
int m= 7;
int n = 7;
int a = 2 * ++m;//此时 a 的值为 16,m 的值为 8
int b = 2 * n++;//此时 b 的值为 14,n 的值为8
//减法类似,不想举例了。。。。
强烈建议不要在表达式里写自增减运算符,看着实在太难受了。。。。
5. 关系和 boolean 运算符
。。。再次和C语言极为相似。。。
C语言中的逻辑运算符继续用。。。
同样支持三元运算符。。。
同样可以得出布尔值。。。
详细内容。。。去看C语言教材吧。。。
6. 位运算符
处理整型类型时,可以直接对组成整型数值的各个位完成操作。这意味着可以使用掩码技术得到整数中的各个位。位运算符包括:
- & (“and”)
- | (“or”)
- ^ (“xor”)
- ~ (“not”)
这些运算符按位模式处理,且这些运算符同样可以应用在布尔值上。
还有 >> 和 << 运算符将位模式右移或左移。需要建立位模式来完成位掩码时,这两个运算符会很方便:
int fourthBitFromRight = (n & (1 << 3)) >> 3;
最后, >>> 运算符会用0填充高位,这与 >> 不同,它会用符号位填充高位。
注意,不存在 <<< 运算符(收起你的想象力吧)
7. 运算符优先级
。。。和C/C++差不多,此处省略好多字。。。
8. 枚举类型
当变量的取值只在一个有限的集合内时,可以使用枚举类型。
例如衣服的尺码:
enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };
//现在,可以声明这种类型的变量:
Size s = Size.MEDIUM;
//Size 类型的变量只能存储这个类型声明中给定的某个枚举值,或者 null 值,null 表示这个变量没有设置任何值。