Java核心技术 笔记——第3章
第3章 Java的基本程序设计结构
概述
- 简单Java程序
- 注释
- 数据类型
- 变量和常量
- 运算符
- 字符串
- 输入与输出
- 控制流程
- 大数
- 数组
一、 一个简单的Java程序
public class HelloWorld {
public static void main(String[] args) {
/* println方法输出后换行,print方法输出后不换行 */
System.out.println("Hello World!");
}
}
知识点:
第一行,public称为访问修饰符(access modifier),用于控制程序的访问级别。class称为类
,类是所有Java应用构建模块。
源代码的文件名必须与公共类的类名相同
Java虚拟机总是从指定类中的main方法开始执行,且main方法必须声明为public。
Java程序中main方法的声明格式:
public class ClassName {
public static void main(String[] args) {
//program statements
}
}
二、注释
注释分为三种:
- 单行注释:// ...
- 多行注释:/*... */
- 文档注释 /** ... */
// this is a single-line comment
/* this is a multi-line comment */
/**
* @date 2023/5/10 上午12:56
* @description
* this is a document comment
* @param
*/
注意
注释是不能够嵌套使用的
三、数据类型
Java是强类型语言。
补充
强类型语言即强制类型定义的语言,一旦某变量类型已经定义,那么如果不经强制转换,那么它永远都是该数据类型。例如:C++、Java
与之相反的弱类型语言则是某一个变量被定义类型,该变量可以根据环境变化自动进行转换,不需要经过强制转换。例如:JavaScript、PHP
Java中共有8中基本类型(primitive type),4中整型、2种浮点型、1中字符型char和一种用于表示真值的boolean类型。
相较于C++“见机行事”的基本数据类型大小,Java明确规定具体的大小:
| 类型名称 | 存储需求 | 取值范围 |
|---|---|---|
| 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 |
一般常用到int类型,其基本能够满足需求,byte和short类型主要运用在特定的应用环境下,比如:底层的文件处理或存储空间较小的数组中。
前文提到,Java中基本类型是固定的,所以很好的解决整型等基本数据类型溢出的问题,因为其数据类型范围与执行Java代码的机器无关。
补充
- 长整型拥有后缀L或l,例如:4000000000000L
- 十六进制数拥有前缀0x或0X,例如:0x1P-7
- 八进制数拥有前缀-1,例如:033(但是由于此表示方法易混淆,所以很少使用八进制数)
- 二进制数拥有前缀0b或0B,例如:0b10110101,还可以写成0b1011_0101(下画线仅帮助阅读,javac会去除这些下画线)
注意
Java并不存在无符号(unsigned)形式的数据类型
浮点型用于表示含有小数部分数值,Java中的浮点型有:
| 类型名称 | 存储需求 | 取值范围 |
|---|---|---|
| float | 4字节 | -3.40E+38到3.40E+38(6~8位有效数字) |
| double | 8字节 | -1.797 693E+308到1.797 693E308 (15位有效数字) |
在大多数情况下,float类型并不能够满足日常需求,所以在大多数情况下都是使用double类型。
补充
float类型具有后缀f或F,若没有此后缀默认为double类型
double类型具有后缀d或D,当然没有后缀也是可以的
特殊的字符和转义序列
| 转义序列 | 名称 |
|---|---|
| \b | 退格 |
| \t | 制表 |
| \n | 换行 |
| \r | 回车 |
| \f | 换页 |
| " | 双引号 |
| ' | 单引号 |
| \ | 反斜杠 |
| \s | 空格 |
| \newline | 只在文本块中使用:连接上一行和下一行 |
建议
由于在Java中,char类型描述为UTF-16编码的一个代码单元
所以强烈建议不要在程序中使用char类型,除非确实需要处理UTF-16代码单元,最好的方式是将字符串作为抽象数据类型来处理
注意
在C++中可以使用数值或指针来代替布尔值,例如:值0表示false,但是在Java中则不会。
四、变量和常量
Java声明变量和变量的规则与C++类似。需要注意的是:Java对“字母”、“数字”等其他符号的范围更大,例如:在Java中可以使用中文作为变量名,但是在C++下不行。但是,强烈建议
不要使用中文作为变量名。
补充
想要知道哪些Unicode字符可以作为标识符,可以使用
Character.isJavaIdentifierStart
和Character.isJavaIdentifierPart方法检查
区别
从Java 10开始,对于局部变量可以通过关键字var声明作为变量的“类型”,编译器会通过其变量的初始值推断出它的类型,而无需声明类型。
例如:
var test_variable=12; /* this variable type is int */同时Java并不会像C++一样区分声明和定义,在C++中:
int i ; /* 这是一个定义 */ extern int j ; /* 这是一个声明 */
在Java中使用final关键词来只是常量。若某个常量需要在一个类中多个方法中使用,则需要创建类常量
,关键词为:static final。
五、运算符
常见的+、-、*、/就不必说,注意点:①、当除数与被除数都为整数时,进行整数除法,其余都进行浮点除法;②、当除数为零时,将会得到无穷大或NaN的结果。
@startuml
left to right direction
[byte] --> [short]
[short] --> [int]
[int]->[long]
[char]->[int]
[int] -> [float] #line.dashed;
[int]->[double]
[float]->[double]
[long]->[float] #line.dashed;
[long]->[double] #line.dashed;
@enduml
总体上,从小到大数据是不会丢失的,特殊为:int -> float、long->float、long->
double。其次,若使用二元运算符连接两个数,总体上遵守转换为精度更高的数。
强制类型转换通过截断方式进行,例如:
double number=9.997;
int number_1=(int)number; /* number_1 is 9 */
int number_2=Math.round(number); /* number_2 is 10 */
若想通过舍入的方式获取更为精确的值,可以使用Math.round方法,其返回类型为long。
注意
不要将boolean类型进行强制类型转换,如有要求请使用:
b?1:0
赋值其实是一个表达式(expression),所以以下赋值正确的:
int x=1;
int y=x+=3; /* y is 4 */
当然,这样的方式颇具恶趣味,O(∩_∩)O哈哈~
为了帮助理解赋值是表达式这个观念,上述的方式赋值无疑是冗余的,勿模仿。🐱