当前位置: 首页 > news >正文

Java基础篇

十、变量与运算符

[!NOTE]

大驼峰命名:每个单词首字母大写,适用于类名起名

public static void methodNumber(){String getName = "张三";
}

小驼峰命名:第一个单词全部小写,第二个单词起每个单词首字母大写,如变量,常量,方法名等

class ControllerServlet{}
10.1标识符命名规则
1. 定义
  • 标识符是程序员为类、方法、变量等命名的符号

  • 合理命名有助于提高代码可读性和维护性。

2. 命名规则
规则说明
由字母、数字、下划线 _ 和美元符号 $ 组成可以包含但不限于 a-z, A-Z, 0-9, _, $
首字符不能是数字int 1number = 5; 是非法的
区分大小写myVariablemyvariable 是不同的标识符
不允许使用关键字或保留字作为标识符如不能用 class 作为变量名
  • 保留字是指虽然当前版本未被使用为关键字,但未来可能会被使用的词语。

  • 目前 Java 中没有严格意义上的“保留字”,但在某些上下文中会有一些特殊的保留用途,比如模块化系统中的 modulerequires 等在特定场景下具有特殊意义。

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字节存储

注意:

  1. 布尔类型在不同JVM实现中占用空间可能不同

  2. 长整型(long)和浮点型(float)需分别用LF后缀显式声明

除基本类型外还有引用数据类型,如类,数组,接口,枚举,注解,记录等

四、数据类型转换
1. 自动类型提升(隐式转换)
  • 小范围 → 大范围自动转换

  • 提升顺序:byte → short → int → long → float → double

特别注意:

  • char 不参与自动提升到 int 以上

  • byteshortchar 在表达式中会自动转为 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));}
}
http://www.dtcms.com/a/286349.html

相关文章:

  • Triton Inference Server 使用详解与常见问题汇总
  • 数据库模型异常问题深度解析:冗余与操作异常
  • 《在亚马逊平台运营:从专利困境到功能利用全指南》
  • 【数据结构】堆(下)+ 二叉树
  • 深度学习笔记002-引言--日常生活总的机器学习、训练模型的过程、关键组件、各种机器学习问题
  • 如何在服务器上获取Linux目录大小
  • 使用python读取json数据,简单的处理成元组数组
  • 验证大语言模型不会算数但可以编写算数的程序
  • 【数据结构初阶】--双向链表(一)
  • 机器学习17-Mamba
  • C语言—如何生成随机数+原理详细分析
  • Linux服务器端口被占用?
  • 无刷电机控制 - 基于STM32F405+CubeMX+HAL库+SimpleFOC04,完成霍尔传感器的驱动代码
  • @Scheduled的作用分析
  • 赛道观察:AI智能自习室哪家强?深挖深度逻辑与价值锚点
  • 链表算法之【链表的中间节点】
  • 【CMake】CMake 项目打包与 find_package 使用流程:从 A 到 B 的完整范例
  • 基于MATLAB的朴素贝叶斯NB的数据分类预测方法应用
  • 一种新颖的可解释人工智能框架,用于整合统计、视觉和基于规则的方法进行医学图像分类|文献速递-医学影像算法文献分享
  • Flutter ScaffoldMessenger 详细介绍
  • P1205 [USACO1.2] 方块转换 Transformations
  • 《通信原理》学习笔记——第四章
  • 【论文阅读】BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework
  • Redis——BigKey
  • Radix-4 Booth乘法器计算步骤
  • 【AI论文】CLiFT:面向计算高效与自适应神经渲染的压缩光场标记
  • vue2 面试题及详细答案150道(41 - 60)
  • Node.js链接MySql
  • Vue常见指令
  • Java大厂面试实录:从Spring Boot到AI微服务架构的深度解析