Java程序基本结构
/**
* 可以用来自动创建文档的注释
*/
public class Hello {
public static void main(String[] args) {
// 向屏幕输出文本:
System.out.println("Hello, world!");
/* 多行注释开始
注释内容
注释结束 */
}
} // class定义结束
Java是面向对象的语言,class是一个Java程序的基本单位。
类名要求:
- 类名必须以英文字母开头,后接字母,数字和下划线的组合;
- 习惯以大写字母开头。
public是访问修饰符,表示该class是公开的。不写public,也能正确编译,但是这个类将无法从命令行执行。
public除了可以修饰class外,也可以修饰方法。
static是另一个修饰符,它表示静态方法。Java入口程序规定的方法必须是静态方法,方法名必须为main,括号内的参数必须是String数组。
方法名也有命名规则,命名和class一样,但是首字母小写。
Java的每一行语句必须以分号结束。
Java有三种注释:
// 第一种注释...
/*
第二种注释
blablabla...
*/
/**
* 第三种注释
* 可以用来自动创建文档
*
* @auther mrxuxg
*/
变量
在Java中,变量分为两种:基本类型的变量和引用类型的变量。
变量必须先定义后使用,在定义变量的时候,可以给它一个初始值。例如:
int x = 1;
基本类型
基本数据类型是CPU可以直接进行运算的类型。Java定义了以下几种基本数据类型(括号内为字节数):
- 整数类型:byte(1),short(2),int(4),long(8)
- 浮点数类型:float(4),double(8)
- 字符类型:char(2)
- 布尔类型:boolean
对于整型类型,Java只定义了带符号的整型;
对于float类型,需要加上f后缀;
字符类型char表示一个字符。Java的char类型除了可表示标准的ASCII外,还可以表示一个Unicode字符(如汉字);
布尔类型boolean只有true和false两个值。Java语言对布尔类型的存储并没有做规定,因为理论上存储布尔类型只需要1 bit,但是通常JVM内部会把boolean表示为4字节整数。
引用类型
除了上述基本类型的变量,剩下的都是引用类型。例如,引用类型最常用的就是String字符串:
String s = "hello";
引用类型的变量类似于C语言的指针,它内部存储一个“地址”,指向某个对象在内存的位置。
常量
定义变量的时候,如果加上final
修饰符,这个变量就变成了常量:
final double PI = 3.14
常量在定义时进行初始化后就不可再次赋值,再次赋值会导致编译错误。
常量的作用是用有意义的变量名来避免魔术数字(Magic number),例如,不要在代码中到处写3.14,而是定义一个常量。如果将来需要提高计算精度,我们只需要在常量的定义处修改,例如,改成3.1416,而不必在所有地方替换3.14。
根据习惯,常量名通常全部大写。
var关键字
有些时候,类型的名字太长,写起来比较麻烦。例如:
StringBuilder sb = new StringBuilder();
这个时候,如果想省略变量类型,可以使用var关键字:
var sb = new StringBuilder();
编译器会根据赋值语句自动推断出变量sb的类型是StringBuilder。
var类似于C++的auto关键字。
浮点数运算
由于浮点数存在运算误差,所以比较两个浮点数是否相等常常会出现错误的结果。正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数。
整数运算在除数为0时会报错,而浮点数运算在除数为0时,不会报错,但会返回几个特殊值:
- NaN表示Not a Number
- Infinity表示无穷大
- -Infinity表示负无穷大
字符类型
要显示一个字符的Unicode编码,只需将char类型直接赋值给int类型即可
字符串类型
Java的编译器对字符串做了特殊照顾,可以使用+连接任意字符串和其他数据类型,这样极大地方便了字符串的处理。
字符串的不可变是指字符串内容不可变。
数组类型
定义一个数组类型的变量,使用数组类型类型[]
,例如,int[]。和单个基本类型变量不同,数组变量初始化必须使用new int[5]表示创建一个可容纳5个int元素的数组。
Java的数组有几个特点:
- 数组所有元素初始化为默认值,整型都是0,浮点型是0.0,布尔型是false;
- 数组一旦创建后,大小就不可改变。
可以用数组变量.length
获取数组大小。
数组是引用类型,在使用索引访问数组元素时,如果索引超出范围,运行时将报错。
输入输出
输出
System.out.println() //输出并换行
System.out.print() //输出后不换行
System.out.printf() //格式化输出
输入
import java.util.Scanner;
Scanner scanner = new Scanner(System.in);
String name = scanner.nextLine(); // 读取一行输入并获取字符串
int age = scanner.nextInt(); // 读取一行输入并获取整数
if
要判断引用类型的变量内容是否相等,必须使用equals()方法: