# Java 的基础知识(一)
# 前言
本文适合有一定编程理念的小伙伴搭配☕️食用。
刚开始学 Java,建立使用 Eclipse 作为开发平台。
# 输入输出
Java 的输入输出主要按照流 (stream) 的模式来实现。其中数据的流向是按照计算机的方向确定的,流入计算机的数据流叫做输入流 (inputStream),由计算机发出的数据流叫做输出流 (outputStream)。
编写 java 程序时,使用到相应的类就要导入相应的包,用 import
导入 (用 Eclipse 编写时,可以忽略此操作,Eclipse 会自动帮你导入相应的包)。
import java.util.Scanner; | |
public class Main { | |
public static void main(String[] args) { | |
/******** 一个简单的例子 ********/ | |
Scanner in = new Scanner(System.in); // 实例化输入对象 | |
int a = in.nextInt(); // 定义 a 变量,类型为 int;并用 in 读入一个整数,赋给 a | |
System.out.println(a); // 输出 a | |
in.close(); // 建议写,可以不写 | |
/******************************/ | |
} | |
} |
# 输入
使用 Scanner 类
这是 Java5 的新特征,用来获取用户输入,是 java 比较常用、简单、用于输入的类,使用时需导入 java.util.Scanner
。
// 使用 Scanner 类获取输入,需先实例化一个 Scanner 对象 | |
Scanner in = new Scanner(System.in); | |
// 接着调用 Scanner 类的方法读取输入,以下列出常用的一些方法: | |
in.next() // 输入字符串,以空格结束 | |
in.nextLine() // 输入字符串,以 enter 结束 | |
in.nextInt() // 输入一个整数 | |
in.nextDouble() // 输入一个双精度数 | |
in.close() // 关闭此扫描仪 |
更多方法可查看 Class Scanner
使用 BufferedReader 类和 InputStreamReader 类
在 java 中,用于用于处理数据流的类,使用时需导入 java.io.*
// 首先实例化 BufferedReader 类对象,它附属于标准输入流 System.in | |
BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); | |
// 接着调用方法 | |
in.read() // 读入单个字符 | |
in.readLine() // 读入一个文本行,通过识别‘\n’(换行) 或‘\r’(回车) 认为某行已终止 |
# 输出
java 的输出比较简单,常用语句如下:
System.out.print(); // 无换行输出 | |
System.out.println(); // 有换行输出 | |
System.out.printf("格式化字符串", 参数表); // 延续 C 语言风格的输出函数,用法与 C 语言类似 |
# 数据类型
# 定义形式
[修饰符] < 类型名称 > < 变量名称 > = < 初始值 >;int a, b; // 同时定义两个变量
int a = 0; // 定义变量并赋值
int a, b = 100, c;
final int a = 100; // 定义一个常量a,表示一旦初始化,值就不能修改了
# 类型名称
Java 是一种强类型语言,所有变量在使用前必须定义或声明,所有变量必须具有确定的数据类型。数据类型表示在变量中可以存放什么样的数据,程序运行过程中也不能改变变量的类型。
基本数据类型
数据类型 数据范围 char 16 位,存储 Unicode 码,用单引号赋值 boolean 只有 true 和 false 两个取值 byte 8 位,最大存储数据量是 255,存放的数据范围是 - 128~127 之间 short 16 位,最大数据存储量是 65536,数据范围是 - 32768~32767 之间 int 32 位,最大数据存储容量是 2 的 32 次方减 1,数据范围是负的 2 的 31 次方到正的 2 的 31 次方减 1 long 64 位,最大数据存储容量是 2 的 64 次方减 1,数据范围为负的 2 的 63 次方到正的 2 的 63 次方减 1 float 32 位,数据范围在 3.4e-45~1.4e38,直接赋值时必须在数字后加上 f 或 F double 64 位,数据范围在 4.9e-324~1.8e308,赋值时可以加 d 或 D 也可以不加 变量名称:又称标识符,只能由字母、数字、下划线构成,数字不能出现在第一个位置。此外,Java 的保留字也不能用作标识符。
Java 的保留字列表
abstract do implements protected throws boolean double import public transient break else instanceof return true byte extends int short try case false interface static while catch final long strictfp void char finally native super volatile class float new switch const* for null synchronized continue goto* package this default if private throw
# 数据运算
# 算术运算
java 有 5 个算术运算符 + - * / %
,可以和赋值运算符 =
结合起来,形成复合赋值运算。
操作符 | 描述 |
---|---|
+ | 加法 - 相加运算符两侧的值 |
- | 减法 - 左操作数减去右操作数 |
* | 乘法 - 相乘操作符两侧的值 |
/ | 除法 - 左操作数除以右操作数 |
% | 取余 - 左操作数除以右操作数的余数 |
++ | 自增:操作数的值增加 1 |
-- | 自减:操作数的值减少 1 |
注意: 两个运算符中间不要有空格。
a = 1 + 2; | |
a = 3 - 2; | |
a = 3 / 2; | |
··· | |
a += 1; | |
a = a + 1; | |
··· |
# 自增 & 自减
// 自增 (值 + 1) | |
a ++; // 先参与运算,后 + 1 | |
++ a; // 先 + 1,后参与运算 | |
/*** 举例子 ***/ | |
int a = 0, b = 1; | |
a = b ++; // 结果 a 为 1,b 为 2;先执行 a = b ,再执行 b + 1 | |
a = ++ b; // 结果 a 为 2,b 为 2;先执行 b + 1 ,再执行 a = b | |
/***********/ | |
// 自减 (值 - 1),与自增一样 | |
a --; | |
-- a; |
# 强制类型转换
基本形式
(数据类型)变量或数据
:会把()
右边第一个数据转换为()
里面的数据类型。
注意
- 浮点数和整数放在一起运算时,Java 会将整数转换成浮点数,然后进行浮点数运算。
- 强制性转换的优先级高于四则运算。
例子
double a = 1.0; | |
double b = 2.0; | |
int i = (int)a/b; // 会报错,运算解果为 double,试图把一个 double 赋给一个 int | |
int i = (int)(a/b); // 正确写法 |
# 关系运算
Java 的关系运算符
运算符 | 描述 | 例子 (A=10,B=20) |
---|---|---|
== | 检查如果两个操作数的值是否相等,如果相等则条件为真。 | (A == B) 为假。 |
!= | 检查如果两个操作数的值是否相等,如果值不相等则条件为真。 | (A != B) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是那么条件为真。 | (A> B) 为假。 |
< | 检查左操作数的值是否小于右操作数的值,如果是那么条件为真。 | (A < B) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是那么条件为真。 | (A>= B) 为假。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。 | (A <= B) 为真。 |
# 位运算
Java 定义了位运算符,应用于整数类型 (int),长整型 (long),短整型 (short),字符型 (char),和字节型 (byte) 等类型。
位运算符作用在所有的二进制位上,并且按位运算。
操作符 | 描述 | 例子 (A=60,B=13) |
---|---|---|
& | 如果相对应位都是 1,则结果为 1,否则为 0 | (A & B) 得到 12 (0000 1100) |
| | 如果相对应位都是 0,则结果为 0,否则为 1 | (A | B) 得到 61 (0011 1101) |
^ | 如果相对应位值相同,则结果为 0,否则为 1 | (A ^ B) 得到 49 (0011 0001) |
〜 | 按位取反运算符翻转操作数的每一位,即 0 变成 1,1 变成 0。 | (〜A) 得到 - 61 (1100 0011) |
<< | 按位左移运算符。左操作数按位左移右操作数指定的位数。 | A <<2 得到 240 (1111 0000) |
>> | 按位右移运算符。左操作数按位右移右操作数指定的位数。 | A >> 2 得到 15 (1111) |
>>> | 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。 | A >>> 2 得到 15 (0000 1111) |
# 逻辑运算
操作符 | 描述 | 例子 (A 为真,B 为假) |
---|---|---|
&& | 逻辑与运算符。当且仅当两个操作数都为真,条件才为真。 | (A && B) 为假。 |
|| | 逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。 | (A || B) 为真。 |
! | 逻辑非运算符。用来反转操作数的逻辑状态。如果条件为 true,则逻辑非运算符将得到 false。 | !(A && B) 为真。 |
# 赋值运算
操作符 | 描述 |
---|---|
= | 简单的赋值运算符,将右操作数的值赋给左侧操作数 |
+= | 加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数 |
-= | 减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数 |
*= | 乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数 |
/= | 除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数 |
%= | 取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数 |
<<= | 左移位赋值运算符 |
>>= | 右移位赋值运算符 |
&= | 按位与赋值运算符 |
^= | 按位异或赋值操作符 |
|= | 按位或赋值操作符 |
注意: a 运算符= b
的形式等价于 a = a y运算符 b
# 条件运算
也称三元运算符
x = (关系表达式) ? (为真时的结果) : (为假时的结果) | |
/*** 小例子 ***/ | |
int s = 2 > 3 ? 5 : 6; //s 的结果为 6 | |
/***********/ |
# 运算符优先级
如下表,从上往下优先级逐渐降低
类别 | 操作符 | 关联性 |
---|---|---|
后缀 | () [] . (点操作符) | 左到右 |
一元 | expr++ expr-- | 从左到右 |
一元 | ++expr --expr + - ~ ! | 从右到左 |
乘性 | * / % | 左到右 |
加性 | + - | 左到右 |
移位 | >> >>> << | 左到右 |
关系 | > >= < <= | 左到右 |
相等 | == != | 左到右 |
按位与 | & | 左到右 |
按位异或 | ^ | 左到右 |
按位或 | | | 左到右 |
逻辑与 | && | 左到右 |
逻辑或 | || | 左到右 |
条件 | ? : | 从右到左 |
赋值 | = += -= *= /= %= >>= <<= &= ^= |= | 从右到左 |
逗号 | , | 左到右 |
# 第一个 Java 程序
public class Main { | |
public static void main(String[] args) { | |
System.out.println("Hello World!"); | |
} | |
} |