Java的基本程序设计结构总结(第一部分)

Java的基本程序设计结构

序言:

本文推荐具有C语言基础的、耐心的同学进行阅读,本文中省略了部分与C语言相同的知识点,想要深入学习Java的同学请点这里 |->我是链接

本文分为三个部分,其他部分正在写,作者欢迎纠错,但拒绝人身攻击。
我爱Python

一、数据类型:

基本类型(四类八种)

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类型

  • 布尔类型有两个值: truefalse ,用来判断逻辑条件。

  • 整型和布尔值之间不能相互转换。

在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++差不多,此处省略好多字。。。我爱Python

8. 枚举类型

当变量的取值只在一个有限的集合内时,可以使用枚举类型
例如衣服的尺码:

enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE };
//现在,可以声明这种类型的变量:
Size s = Size.MEDIUM;
//Size 类型的变量只能存储这个类型声明中给定的某个枚举值,或者 null 值,null 表示这个变量没有设置任何值。

To be continued…

posted @ 2018-11-18 19:20  WangHalo  阅读(789)  评论(0编辑  收藏  举报