# 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 是一种强类型语言,所有变量在使用前必须定义或声明,所有变量必须具有确定的数据类型。数据类型表示在变量中可以存放什么样的数据,程序运行过程中也不能改变变量的类型。

  • 基本数据类型

    数据类型数据范围
    char16 位,存储 Unicode 码,用单引号赋值
    boolean只有 true 和 false 两个取值
    byte8 位,最大存储数据量是 255,存放的数据范围是 - 128~127 之间
    short16 位,最大数据存储量是 65536,数据范围是 - 32768~32767 之间
    int32 位,最大数据存储容量是 2 的 32 次方减 1,数据范围是负的 2 的 31 次方到正的 2 的 31 次方减 1
    long64 位,最大数据存储容量是 2 的 64 次方减 1,数据范围为负的 2 的 63 次方到正的 2 的 63 次方减 1
    float32 位,数据范围在 3.4e-45~1.4e38,直接赋值时必须在数字后加上 f 或 F
    double64 位,数据范围在 4.9e-324~1.8e308,赋值时可以加 d 或 D 也可以不加
  • 变量名称:又称标识符,只能由字母、数字、下划线构成,数字不能出现在第一个位置。此外,Java 的保留字也不能用作标识符。

  • Java 的保留字列表

    abstractdoimplementsprotectedthrows
    booleandoubleimportpublictransient
    breakelseinstanceofreturntrue
    byteextendsintshorttry
    casefalseinterfacestaticwhile
    catchfinallongstrictfpvoid
    charfinallynativesupervolatile
    classfloatnewswitch
    const*fornullsynchronized
    continuegoto*packagethis
    defaultifprivatethrow

# 数据运算

# 算术运算

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!");
        
	}
}
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

深坑妙脆角 微信支付

微信支付

深坑妙脆角 支付宝

支付宝

深坑妙脆角 贝宝

贝宝