Java基础篇
十、变量与运算符
[!NOTE]
大驼峰命名:每个单词首字母大写,适用于类名起名
public static void methodNumber(){String getName = "张三"; }小驼峰命名:第一个单词全部小写,第二个单词起每个单词首字母大写,如变量,常量,方法名等
class ControllerServlet{}
10.1标识符命名规则
1. 定义
标识符是程序员为类、方法、变量等命名的符号
合理命名有助于提高代码可读性和维护性。
2. 命名规则
规则 | 说明 |
---|---|
由字母、数字、下划线 _ 和美元符号 $ 组成 | 可以包含但不限于 a-z, A-Z, 0-9, _, $ |
首字符不能是数字 | 如 int 1number = 5; 是非法的 |
区分大小写 | myVariable 和 myvariable 是不同的标识符 |
不允许使用关键字或保留字作为标识符 | 如不能用 class 作为变量名 |
保留字是指虽然当前版本未被使用为关键字,但未来可能会被使用的词语。
目前 Java 中没有严格意义上的“保留字”,但在某些上下文中会有一些特殊的保留用途,比如模块化系统中的
module
、requires
等在特定场景下具有特殊意义。
10.2常见关键字
关键字是指有特殊含义的预定义词语,用于表示特定的功能或特性。
分类 | 关键字 | 描述 |
---|---|---|
数据类型 | boolean , byte , char , double , float , int , long , short | 基本数据类型 |
流程控制 | if , else , switch , case , default , for , while , do , break , continue , return | 控制程序流程 |
类与对象 | class , interface , extends , implements , new , this , super | 类和对象相关操作 |
异常处理 | try , catch , finally , throw , throws | 处理异常情况 |
访问控制 | public , protected , private , static , final , abstract , synchronized , volatile , transient | 控制成员访问权限及行为 |
变量遵循标识符命名规则
变量只在作用域内有用
这个类我是后面才想起来的,回来补一下,因为经常用到
10.3Scanner的使用
Scanner
类是 Java 提供的一个用于获取用户输入的便捷工具,需要导包,
在头部写import java.util.Scanner
import java.util.Scanner; // 导入Scanner类 public class ScannerExample {public static void main(String[] args) {// 创建一个Scanner对象,关联到标准输入(System.in)Scanner scanner = new Scanner(System.in); System.out.println("请输入您的姓名:");String name = scanner.nextLine(); // 读取一行字符串输入 System.out.println("请输入您的年龄:");int age = scanner.nextInt(); // 读取一个整数输入 System.out.println("请输入您的身高(米):");double height = scanner.nextDouble(); // 读取一个浮点数输入 // 输出用户输入的信息System.out.println("您好, " + name + "。您今年" + age + "岁,身高为" + height + "米。");} }
10.4变量的分类与定义
1. 变量的本质
存储数据的基本单元,有名称、类型和值。
必须先声明后使用。
2. 定义格式
//变量类型 变量名 = 变量值int number = 10;
3.基本数据类型
整型
byte a = 1; // 1字节,8位有符号整数(-128~127) short b = 2; // 2字节,16位有符号整数(-32768~32767) int c = 3; // 4字节,32位有符号整数(-2^31~2^31-1) long d = 4L; // 8字节,64位有符号整数(-2^63~2^63-1)
浮点型
float e = 5.0f; // 4字节,32位单精度浮点数(IEEE 754标准) double f = 6.0; // 8字节,64位双精度浮点数(IEEE 754标准)
字符型
char g = 'A'; // 2字节,16位Unicode字符(\u0000~\uffff)
布尔型
boolean h = true; // 官方未明确字节数,JVM通常用1字节或4字节存储
注意:
布尔类型在不同JVM实现中占用空间可能不同
长整型(long)和浮点型(float)需分别用
L
和F
后缀显式声明
除基本类型外还有引用数据类型,如类,数组,接口,枚举,注解,记录等
四、数据类型转换
1. 自动类型提升(隐式转换)
小范围 → 大范围自动转换
提升顺序:
byte → short → int → long → float → double
特别注意:
char
不参与自动提升到int
以上byte
、short
、char
在表达式中会自动转为int
类型转换示例:
double d = 3.14; int i = (int)d; // 显式强制转换,结果为3
类型容量大的向小的转换需要进行强制类型转换
double d=13.5
int n=(int)d;
小的转大的有自动转换功能
这里所说的容量大小不是指占用字节大小,而是指表示数据范围的大小,如long可以转换为float
特别的:byte和short以及char的运算结果都为int,不能用他们本身来接收
精度损失1:
dpuble d1=12.3; double d2=12.9 int n1=(int)d1;//12 int n2=(int)d2;//12
不存在四舍五入,而是直接截断
精度损失2:
int n=128byte b=(byte)n;//-128
截取高位二进制,剩下最后一位作为高位的表示符号位
10.5 String 与基本数据类型的连接
1. 连接符:+
+
在字符串操作中表示连接如果一侧是字符串,则另一侧自动转换为字符串
System.out.println("年龄:" + age); // 输出:年龄:20
2. 运算规则
表达式从左向右执行
若左侧是字符串,则后续都变为字符串拼接
System.out.println(1 + 2 + "abc"); // 输出:3abc System.out.println("abc" + 1 + 2); // 输出:abc12
六、常见进制转换
1. 二进制、八进制、十进制、十六进制表示
二进制:以0b开头
八进制:以0开头
十六进制:以0X开头
二进制:
0b1010
八进制:
012
(已弃用,Java 8 开始不推荐)十六进制:
0xA
2. 源码、反码、补码
正数:源码 = 反码 = 补码
负数
:
反码:符号位不变,其余取反
补码:反码 + 1
Java 所有数值均以补码形式存储
3. 进制转换方法
十进制 → 任意进制:除 n 取余法
任意进制 → 十进制:按权展开相加法
七、基本运算符
1. 算术运算符
运算符 | 含义 |
---|---|
+ | 加法 |
- | 减法 |
* | 乘法 |
/ | 除法(整数除法只保留整数部分) |
% | 取模(余数) |
++ | 自增(前++和后++区别) |
-- | 自减 |
int a = 5, b = ++a; // a=6, b=6 int c = 5, d = c++; // c=6, d=5
2. 赋值运算符
运算符 | 含义 |
---|---|
= | 赋值 |
+= | 加后赋值 |
-= | 减后赋值 |
*= | 乘后赋值 |
/= | 除后赋值 |
%= | 取模后赋值 |
int a = 10; a += 5; // 等价于 a = a + 5;
3. 比较运算符(返回 boolean)
运算符 | 含义 |
---|---|
== | 等于 |
!= | 不等于 |
> | 大于 |
< | 小于 |
>= | 大于等于 |
<= | 小于等于 |
4. 逻辑运算符(用于布尔表达式)
运算符 | 含义 | 短路特性 |
---|---|---|
&& | 与(AND) | ✅短路 |
** | | ** | ||
! | 非(NOT) | ❌ |
& | 与(不短路) | ❌ |
** | ** | 或(不短路) | |
^ | 异或(相同为 false) | ❌ |
if (x > 0 && y < 10) { ... } // x <= 0 时不会判断 y
public class Main {public static void main(String[] args) { // ================== 算术运算符 ==================int a = 10, b = 3;System.out.println("算术运算符:");System.out.println("a + b = " + (a + b)); // 加法System.out.println("a - b = " + (a - b)); // 减法System.out.println("a * b = " + (a * b)); // 乘法System.out.println("a / b = " + (a / b)); // 除法(取商)System.out.println("a % b = " + (a % b)); // 取余数 // ================== 赋值运算符 ==================System.out.println("\n赋值运算符:");int c = 5; // 基本赋值c += 2; // 等价于 c = c + 2System.out.println("c += 2 后的值:" + c);c -= 1; // 等价于 c = c - 1System.out.println("c -= 1 后的值:" + c);c *= 3; // 等价于 c = c * 3System.out.println("c *= 3 后的值:" + c); // ================== 关系/比较运算符 ==================System.out.println("\n关系/比较运算符(返回 boolean 值):");System.out.println("a > b ? " + (a > b)); // 大于System.out.println("a < b ? " + (a < b)); // 小于System.out.println("a == b ? " + (a == b)); // 等于System.out.println("a != b ? " + (a != b)); // 不等于System.out.println("a >= b ? " + (a >= b)); // 大于等于System.out.println("a <= b ? " + (a <= b)); // 小于等于 // ================== 逻辑运算符 ==================System.out.println("\n逻辑运算符(操作 boolean 类型):");boolean x = true, y = false; System.out.println("x && y = " + (x && y)); // 与(AND)System.out.println("x || y = " + (x || y)); // 或(OR)System.out.println("!x = " + (!x)); // 非(NOT) // ================== 自增/自减运算符 ==================System.out.println("\n自增/自减运算符:");int d = 5;System.out.println("d++ = " + (d++)); // 后自增:先使用再加1 → 输出 5System.out.println("现在 d = " + d); // 此时 d 已变成 6System.out.println("++d = " + (++d)); // 前自增:先加1再使用 → 输出 7 int e = 10;System.out.println("e-- = " + (e--)); // 后自减:先使用再减1 → 输出 10System.out.println("现在 e = " + e); // 此时 e = 9System.out.println("--e = " + (--e)); // 前自减:先减1再使用 → 输出 8 } }
八、位运算概述(了解)
1. 什么是位运算?
位运算是指对整型数据进行的按位操作。
操作对象是二进制位(bit),而非整个字节或数值。
常用于底层开发、加密算法、图像处理等领域。
2. Java 中支持的位运算符
运算符 | 含义 | 示例 |
---|---|---|
& | 按位与 | 5 & 3 = 1 |
** | ** | 按位或 | |
^ | 按位异或 | 5 ^ 3 = 6 |
~ | 按位取反 | ~5 = -6 |
<< | 左移 | 5 << 1 = 10 |
>> | 右移(带符号) | 5 >> 1 = 2 |
>>> | 无符号右移 | 5 >>> 1 = 2 |
public class BitwiseOperations { public static void main(String[] args) {// 示例数值int a = 5; // 二进制: 0101int b = 3; // 二进制: 0011 bitwiseDemo(a, b);} /*** 该方法演示 Java 中各种位运算符的使用,并附带详细注释*/public static void bitwiseDemo(int a, int b) {System.out.println("a = " + a + " (二进制: " + Integer.toBinaryString(a) + ")");System.out.println("b = " + b + " (二进制: " + Integer.toBinaryString(b) + ")");System.out.println("========================================"); // 按位与:两个位都为1时结果才是1int andResult = a & b;System.out.println("按位与 (&): " + a + " & " + b + " = " + andResult + " → 二进制: " + Integer.toBinaryString(andResult)); // 按位或:两个位只要有一个为1,结果就是1int orResult = a | b;System.out.println("按位或 (|): " + a + " | " + b + " = " + orResult + " → 二进制: " + Integer.toBinaryString(orResult)); // 按位异或:两个位相同为0,不同为1int xorResult = a ^ b;System.out.println("按位异或 (^): " + a + " ^ " + b + " = " + xorResult + " → 二进制: " + Integer.toBinaryString(xorResult)); // 按位取反:将每个位取反(0变1,1变0)int notResultA = ~a;System.out.println("按位取反 (~): ~" + a + " = " + notResultA + " → 二进制: " + Integer.toBinaryString(notResultA)); // 左移:所有位向左移动n位,右边补0int shiftLeftResult = a << 1;System.out.println("左移 (<< 1): " + a + " << 1 = " + shiftLeftResult + " → 二进制: " + Integer.toBinaryString(shiftLeftResult)); // 右移:所有位向右移动n位,左边补符号位(正数补0,负数补1)int shiftRightResult = a >> 1;System.out.println("右移 (>> 1): " + a + " >> 1 = " + shiftRightResult + " → 二进制: " + Integer.toBinaryString(shiftRightResult)); // 无符号右移:所有位向右移动n位,左边始终补0int unsignedShiftRightResult = -10 >>> 1;System.out.println("无符号右移 (>>> 1): -10 >>> 1 = " + unsignedShiftRightResult + " → 二进制: " + Integer.toBinaryString(unsignedShiftRightResult)); System.out.println("========================================"); // 扩展应用示例:交换两个整数(不使用临时变量)System.out.println("交换前: a = " + a + ", b = " + b);a = a ^ b;b = a ^ b;a = a ^ b;System.out.println("异或交换后: a = " + a + ", b = " + b); // 权限控制示例:使用位掩码管理权限final int READ = 1 << 0; // 0001final int WRITE = 1 << 1; // 0010final int EXECUTE = 1 << 2; // 0100 int permissions = READ | WRITE; // 同时拥有读和写权限 System.out.println("是否有读权限: " + ((permissions & READ) != 0));System.out.println("是否有执行权限: " + ((permissions & EXECUTE) != 0));} }