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

3.1 一个简单的Java应用程序

在上一章中,我们运行了一个Java程序:

public class HelloWorld {
	public static void main(String[] args) {
		System.out.println("Hello, Wolrd!");
	}
}

这个程序虽然简单,但是所有的Java程序都具有这种结构,通过这个程序我需要告知你以下几点:

  1. Java严格区分大小写。

  2. 关键字public,被称为访问修饰符(asscess modifier),访问修饰符控制程序的其他部分对此代码的访问级别。

  3. 关键字class后面紧跟着类名HelloWorld

  4. 类名必须以字母开头,后面可以跟着字母和数字的任意组合,但不能使用Java中的保留字作为类名,并建议使用大驼峰命名法命名类名。Java中的保留字请参考Java中的保留字

  5. 源代码的文件名必须与公共类的名字相同,否则无法编译。

  6. 每个Java应用程序都必须有一个main方法。其声明格式如下:

    public static void main(String[] args) {
    	//你的代码
    }
    
  7. Java中方法调用的格式如下:
    Object.method(parameters)
    HelloWorld程序中,就将参数Hello, World!传递给了System.out对象的println方法。

3.2 注释

注释并不会被编译器编译到字节码文件中。注释的作用就是程序的说明书,便于其他程序员理解这段代码的作用。

注释并不是越详细越好或者越多越好,当代码的行为足够明显时,代码本身就是很好的注释。

常用的注释有以下3种:

  1. 单行注释://
    例:

    System.out.println("Hello,World!"); //这是单行注释
    
  2. 多行注释:/* */
    ❗ 注意:多行注释不能嵌套使用

    例:

    /*
    * 这是多行注释
    * 我不会被执行
    */
    System.out.println("Hello,World!");
    
  3. 文档注释/Javadoc注释:/** */
    当你为你的程序添加了文档注释后,通过使用Javadoc命令生成APi文档。参考Javadoc命令的使用

    例:

    /**
     * 除法运算
     *
     * @param a 被除数
     * @param b 除数
     * @return 商
     * @throws ArithmeticException 如果除数为0
     */
    public static int divide(int a, int b) throws ArithmeticException {
    	if (b == 0) {
    		throw new ArithmeticException("除数不能为0");
    	}
    	return a / b;
    }
    

3.3 数据类型

Java是一种强类型语言。因此,在声明一个变量的时候,必须指定类型。

Java有8种基本类型,包括4种整型,2种浮点类型,1种字符类型和1种用于表示真值的boolean类型。
❗注意:Java不支持无符号数据类型

3.3.1 整型

整型用于表示没有小数部分的数值。

类型 存储需求 取值范围
byte 1字节 -2^7 ~ 2^7-1
short 2字节 -2^15 ~ 2^15-1
int 4字节 -2^31 ~ 2^31-1
long 8字节 -2 ^63 ~ 2^63 -1
  • 长整型数值有一个后缀Ll(如4000000000000L)
  • 16进制有一个前缀0X0x(如0xCAFE)
  • 8进制有一个前缀0(如010),由于容易混淆,建议不要使用8进制
  • Java7开始,可以加上前缀0B0b表示二进制数
  • Java7开始,可以在数字字面量中加入下划线(如1_000_000),以方便阅读。

3.3.2

浮点类型用于表示带有小数部分的数值。

类型 存储需求 取值范围
float 4字节 ~
double 8z字节 ~

关于取值范围和精度可以点击这里

  • double的数值精度是float的两倍,因此也被成为双精度
  • 通常情况下,double比float更适用
  • float类型有一个后缀Ff(如3.14F)
  • double类型有一个后缀Dd(如3.14D)
  • 浮点类型不适合用于金融计算,除非你能够接受误差。

3.3.3 char类型

3.3.4 Unicode和char类型

《Java核心技术 卷1》这本书中并没有详细的介绍char,更多的讨论了Unicode。想要了解Java中的char类型,可以点击这里

3.3.5 boolean类型

boolean(布尔)类型有两个值;truefalse,用来判定逻辑条件
❗注意:整数类型和boolean值之间不能进行相互替换

3.4 变量与常量

Java使用变量存储值。

常量就是值不变的变量。

3.4.1 声明变量

Java中的每一个变量都有一个类型(type)。

在声明变量时,必须指定变量的类型,然后才是变量名。
例如:

int num;
double salary;
int a,b,c; //不建议在一个语句中声明多个变量,会降低代码的可读性
  • Java中的变量名必须以一个“字母”开头有“字母”或数字构成的序列。
    ❗ 注意:这里的“字母”指的是Java中的字母,包括'A-Z'、'a-z'、'_'、'$'或任何Unicode字符,你甚至可以用中文当作变量名,但不建议这么使用。
  • 变量名建议使用小驼峰命名法

3.4.2 变量初始化

声明一个变量后,需要使用赋值语句对变量进行显示初始化,使用一个没有初始化的值往往会引发问题。
例如:

int a;
System.out.println(a); //error: variable a might not have been initialized

int b = 10;
System.out.println(b); //ok
  • 建议变量的声明尽量靠近第一次使用的地方
  • 从Java10开始,对于局部变量,如果可以从变量的初始值推断出它的类型,可以使用关键字var而无需声明类型。
    例如:
    var num = 1_000;
    var str = "hello";
    

3.4.3 常量

可以使用关键字final指示常量。
例如:

final int NUM_TEN = 10;

关键字final表示这个变量只能被赋值一次,且赋值后就不可修改。
习惯上,常量名使用全大写,不同单词间用下划线隔开。

*** 3.4.4 枚举类型
当明确一个变量的取值范围在一个固定范围时,可以使用枚举。
例如:

// 使用枚举DayOfWeek表示一周
enum DayOfWeek {
	Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
};
DayOfWeek today = DayOfWeek.Monday;

DayOfWeek类型的变量只能存储这个类型中声明的某个枚举值或者null。

3.5 运算符

3.5.1 算术运算符

  • +:加
  • - :减
  • * :乘
  • \ :除
  • % :求余/取模

注意

  • 当参与/运输的两个操作数都是整数时,表示整除除法,否则表示浮点除法
  • 整数被除0将会产生一个异常,而浮点数除0会得到无穷大或NaN结果

3.5.2数学函数与常量

这一节主要介绍了Math类。

3.5.3 数值类型之间的转换

image

图中,实现表示没有精度损失的转换,虚线表示有精度损失的转换。

  • 如果两个操作数中有一个是double类型,另一个就会转换为double类型
  • 否则,如果其中有一个是float类型,另一个操作数就会转换为float类型
  • 否则,如果其中有一个是long类型,另一个操作数就会转换为long类型
  • 否则,两个操作数都会被转换成int类型

3.5.4 强制类型转换

像上一小节中由取值范围小到取值范围大的类型转换也被称为自动升级
但是某些时候我们可能会需要让double转换成int,这种可能损失精度的转换要通过强制类型转换(cast)来完成。
例如

double x = 3.14D;
int y = (int)x; // x is 3

3.5.5 结合赋值和运算符

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

x += 4; //等价于 x = x + 4;
  • 如果右侧计算出的结果类型和左侧操作数的类型不同,就会发生强制类型转换
    例如:
    	int x = 10;
    	x += 3.14; // 会把x设置为 (int)(x+3.14)
    

3.5.6 自增与自减运算符

  • 自增运算符:++
  • 自减运算符:--
    例如:
int m = 7;
int x = 7;
int a = 2 + ++m; //now a is 10,m is 8
int b = 2 + m++; //now a is 9,m is 8

3.5.7 关系和boolean运算符

可以使用 ==!=检测相等性。
例如:

 3 == 7; //false
 3 != 7; //true

常用的还有:

运算符 含义
> 大于
< 小于
>= 大于等于
<= 小于等于
|
|| 短路或
&
&& 短路与

Java中还可以使用三元表达式:
condition ? expression1: expression2 *
如果条件成立,则返回
expression1否则返回expression2*

3.5.8 位运算符

位运算符 含义
&
|
^ 异或
~ 取反
>> 右移
<< 左移
>>> 无符号右移

详细了解可以参考这篇文章

3.5.9 括号与运算符级别

优先级 运算符 结合性
1 ()、[]、{} 从左向右
2 !、+、-、~、++、-- 从右向左
3 *、/、% 从左向右
4 +、- 从左向右
5 «、»、>>> 从左向右
6 <、<=、>、>=、instanceof 从左向右
7 ==、!= 从左向右
8 & 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左
14 =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= 从右向左

当一个表达式中的运算符过多时,建议分段书写或者使用括号。

3.6 字符串

这一节主要介绍了String类。可以参考这篇教程

可以在 https://docs.oracle.com/en/java/javase/index.html 阅读联机文档。

posted @ 2023-03-12 11:27  asfly  阅读(32)  评论(0)    收藏  举报