Java基础
Java概述
Java 语言是面向对象的(oop)、有跨平台性(一次编译到处运行)
Java 技术体系平台
- JavaSE(Java Standard Edition)标准版
- Java EE(Java Enterprise Edition)企业版
- Java ME(Java Micro Edition)小型版
Java 语言是解释型的
-
解释性语言:javascript,PHP,java
-
编译性语言
/ c++ - 区别是:解释性语言,编译后的代码。不能直接被机器执行,需要解释器来执行,
编译性语言,编译后的代码,可以直接被机器执行,c/c++
- 区别是:解释性语言,编译后的代码。不能直接被机器执行,需要解释器来执行,
Java 核心机制-Java 虚拟机 [JVM java virtual machine]
基本介绍:JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,包含在JDK 中。对于不同的平台,有不同的虚拟机。Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行“。
什么是JDK,JRE
- JDK = JRE + 开发工具集(例如 Javac,java 编译工具等)
- JRE = JVM+ Java SE 标准类库(java 核心类库)
- 如果只想运行开发好的.class 文件 只需要 JRE
javac :命令对该 java 文件进行编译, 生成 .class 文件。
java : 命令对生成的 class 文件进行运行
Java常用转义字符
| 转义序列 | 含义 | 描述 |
|---|---|---|
| ‘ | 单引号 | 用于在字符常量’ ‘或字符串中包含单引号。 |
| “ | 双引号 | 用于在字符串” “中包含双引号。 |
| \ | 反斜杠 | 表示一个实际的反斜杠字符\。 |
| \n | 换行符 | 将光标移动到下一行的开头(Line Feed)。 |
| \r | 回车符 | 将光标移动到当前行的开头(Carriage Return)。 (注:Windows 换行通常是\r\n,Unix/Linux/macOS 通常是\n) |
| \t | 制表符 | 插入一个水平制表符(Tab),通常相当于 4 或 8 个空格。 |
| \b | 退格符 | 将光标向后移动一格(Backspace)。 |
| \f | 换页符 | 用于打印机控制,表示换页(Form Feed)。 |
| \0 | 空字符 | ASCII 码为 0 的字符(Null),常用于 C 风格字符串结尾,Java 中较少直接使用。 |
初学java易犯错误
- 找不到文件:源文件名不存在或者写错,或者当前路径错误
- 主类名和文件名不一致:声明为public的主类应与文件名一致,否知编译失败
- 缺少分号:编译失败,注意错误出现的行数,再到源代码中指定位置改错。
注释
- 单行注释 //
- 多行注释 /* */
- 文档注释 /** */
变量
变量的注意事项:
- 变量表示内存中的一个存储区域不同的变量,类型不同,占用的空间大小不同
- 变量必须先声明,后使用,即有顺序
- 变量在同一个作用域内不能重名
- 变量=变量名+值+数据类型,这一点请大家注意。变量三要素
数据类型
基本数据类型:
| 类型 | 关键字 | 位数 (bit) | 字节 (byte) | 取值范围 | 默认值 | 说明 |
|---|---|---|---|---|---|---|
| 整数型 | byte | 8 | 1 | -128 ~ 127 | 0 | 最小整数类型,常用于节省内存数组 |
| short | 16 | 2 | -32,768 ~ 32,767 | 0 | 较少使用 | |
| int | 32 | 4 | -2³¹ ~ 2³¹-1 | 0 | 最常用的整数类型 | |
| long | 64 | 8 | -2⁶³ ~ 2⁶³-1 | 0L | 用于大整数,字面量需加L | |
| 浮点型 | float | 32 | 4 | 约 ±3.4E38 (7位有效数字) | 0.0f | 单精度,字面量需加F |
| double | 64 | 8 | 约 ±1.8E308 (15-17位有效数字) | 0.0d | 最常用的浮点类型 | |
| 字符型 | char | 16 | 2 | \u0000~\uffff(0 ~ 65535) | ‘\u0000’ | 存储单个 Unicode 字符 |
| 布尔型 | boolean | - | - | true或false | false | 仅用于逻辑判断,大小由 JVM 决定 |
java数据类型分为两大类基本数据类型,引用类型
- 基本数据类型有8种:
数值型:[byte,short,int,long,float,double]
字符型:char
布尔型:boolean - 引用类型[类,接口,数组]
JavaAPI文档
网站:
基本数据类型转换
自动类型转换
-
规则:byte → short → char → int → long → float → double
-
byte → short → int → long → float → double↘ char ↗
-
细节:
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。
- 当我们把精度(容量)大的数据类型赋值给精度(容量)小的数据类型时,就会报错,反之就会进行自动类型转换。
- (byte,short)和char之间不会相互自动转换。
- byte,short,char 他们三者可以计算,在计算时首先转换为int类型。
- boolean不参与转换
- 自动提升原则:表达式结果的类型自动提升为 操作数中最大的类型
强制类型转换
-
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符(),但可能造成精度降低或溢出,格外要注意。
-
目标类型 变量名 = (目标类型) 原值;
-
细节:当进行数据的大小从大一一>小,就需要使用到强制转换
-
强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
-
char类型可以保存int的常量值,但不能保存int的变量值,需要强转
-
byte和short,char类型在进行运算时,当做int类型处理。
基本数据类型和 String 类型的转换
基本类型转String类型
语法:将基本类型的值+即可
String类型转基本数据类型【体验】
语法:通过基本类型的包装类调用parseXX方法即可
运算符
算术运算符、赋值运算符、关系运算符 [比较运算符]、逻辑运算符、位运算符 [需要二进制基础]、三元运算符
算数运算符
| 运算符 | 运算 | 范围 | 结果 |
|---|---|---|---|
| + | 正号 | +7 | 7 |
| - | 负号 | b=11; -b | -11 |
| + | 加 | 9+9 | 18 |
| - | 减 | 10-8 | 2 |
| * | 乘 | 7*8 | 56 |
| / | 除 | 9/9 | 1 |
| % | 取模(取余) | 11%9 | 2 |
| ++ | 自增(前):先运算后取值 自增(后):先取值后运算 | a=2;b=++a; a=2;b=a++; | a=3;b=3 a=3;b=2 |
| — | 自减(前):先运算后取值 自减(后):先取值后运算 | a=2;b=—a; a=2;b=a—; | a=1;b=1 a=1;b=2 |
| + | 字符串相加 | ”hsp”+“edu" | "hsp edu” |
细节说明:
-
对于除号 ”/“,它的整数除和小数除是有区别的
-
当对一个数取模时,可以等价表示为:a % b = a - (a / b) * b
示例:11 % 9 = 11 - (11/9)9 = 11 - 19 = 2
-
当自增当做一个独立语句使用时,不管是 ++i; 还是 i++; 都是一样的,等价于:→ i = i + 1;
-
当自增当做一个表达式使用时,
j = ++i 等价于:→ i = i + 1; j = i;
j = i++ 等价于:→ j = i; i = i + 1;
关系运算符
| 运算符 | 运算 | 范例 | 结果 |
|---|---|---|---|
| == | 相等于 | 8 == 7 | false |
| != | 不等于 | 8 != 7 | true |
| < | 小于 | 8 < 7 | false |
| > | 大于 | 8 > 7 | true |
| <= | 小于等于 | 8 <= 7 | false |
| >= | 大于等于 | 8 >= 7 | true |
| instanceof | 检查是否是类的对象 | ”hsp” instanceof String | true |
细节说明:
- 关系运算符的结果都是boolean 型,也就是要么是 true,要么是 false。
- 关系运算符组成的表达式,我们称为关系表达式。a>b
- 比较运算符”==“不能误写成”=“
逻辑运算符
| a | b | a & b | a && b | a | b | a | b | !a | a ^ b |
|---|---|---|---|---|---|---|---|
| true | true | true | true | true | true | false | false |
| true | false | false | false | true | true | false | true |
| false | true | false | false | true | true | true | true |
| false | false | false | false | false | false | true | false |
| 运算符 | 名称 | 类型 | 说明 |
|---|---|---|---|
| & | 按位与 / 逻辑与 | 位运算/逻辑 | 两边都为 true 才返回 true;无短路 |
| && | 短路与 | 逻辑运算 | 左边为 false 时右边不执行,直接返回 false |
| | | 按位或 / 逻辑或 | 位运算/逻辑 | 任一边为 true 就返回 true;无短路 |
| | | 短路或 | 逻辑运算 | 左边为 true 时右边不执行,直接返回 true |
| ! | 非 | 逻辑运算 | 取反 |
| ^ | 异或 | 位运算/逻辑 | 两边不同为 true,相同为 false |
💡 注意:
虽然 &, |, ^ 可用于布尔值作逻辑运算,但它们也常用于整数的位运算。
而 &&, || 仅用于布尔逻辑,且具有“短路”特性。
📌 记忆口诀:
“与要全真才为真,或有一真即为真;
非是取反很简单,异或不同才是真;
短路运算效率高,左边决定右不跑!”
赋值运算符
| 运算符 | 名称 |
|---|---|
| = | 基本赋值 |
| += | 加后赋值 |
| -= | 减后赋值 |
| *= | 乘后赋值 |
| /= | 除后赋值 |
| %= | 取模后赋值 |
| &= | 按位与后赋值 |
| |= | 按位或后赋值 |
| ^= | 按位异或后赋值 |
| <<= | 左移后赋值 |
| >>= | 右移后赋值 |
| >>>= | 无符号右移后赋值 |
三元运算符
条件表达式 ? 表达式 1: 表达式 2;
运算规则:
- 如果条件表达式为 true, 运算后的结果是表达式 1;
- 如果条件表达式为 false, 运算后的结果是表达式 2;
运算符优先级(熟悉即可)
| 优先级 | 运算符 | 类型 | 结合性 | 示例 |
|---|---|---|---|---|
| 1 | () [] . | 括号、数组索引、成员访问 | 左 → 右 | obj.method(),arr[0] |
| 2 | expr++ expr— | 后缀自增/自减 | 左 → 右 | i++,count— |
| 3 | ++expr —expr + - ~ ! (type) | 前缀操作符、正负号、按位非、逻辑非、强制类型转换 | 右 → 左 | ++i,-x,!flag,(int)y |
| 4 | * / % | 乘、除、取模 | 左 → 右 | a * b,x % 3 |
| 5 | + - | 加、减 | 左 → 右 | a + b,x - 1 |
| 6 | << >> >>> | 移位运算 | 左 → 右 | x << 2,y >>> 1 |
| 7 | < > <= >= instanceof | 关系运算 | 左 → 右 | a > b,obj instanceof Class |
| 8 | == != | 相等性判断 | 左 → 右 | x == 5,a != b |
| 9 | & | 按位与 | 左 → 右 | a & b |
| 10 | ^ | 按位异或 | 左 → 右 | a ^ b |
| 11 | | | 按位或 | 左 → 右 | a | b |
| 12 | && | 逻辑与 | 左 → 右 | a && b |
| 13 | | | 逻辑或 | 左 → 右 | a | b |
| 14 | ? : | 三元条件运算符 | 右 → 左 | cond ? a : b |
| 15 | = += -= *= /= %= &= ^= |= <<= >>= >>>= | 赋值运算 | 右 → 左 | x = 5,sum += i |
标识符命名规则和规范
标识符概念:
- Java 对各种变量、方法和类等命名时使用的字符序列称为标识符
- 凡是自己可以起名字的地方都叫标识符intnum1=90;
标识符的命名规则(必须遵守)
- 只能包含:字母(A-Z, a-z)、数字(0-9)、下划线(_)和 美元符号($)。
- 不能以数字开头,不可以使用关键字和保留字,但能包含关键字和保留字。
- 标识符不能包含空格。长度没有限制
软性规范(行业最佳实践)
命名风格(驼峰命名法)
- 大驼峰命名法:类名、接口名、枚举名、注解名
- 小驼峰命名法:方法名、变量名、参数名
- 常量名:全大写 + 下划线分隔
- 包名 (Package):全小写 + 点号分隔
特殊场景规范
- 测试类:通常以被测试类名 + Test 结尾
- 异常类:以 Exception 或 Error 结尾
- 实现类:若接口名为 XxxService,实现类通常为 XxxServiceImpl
Java相关基础知识
进制
二进制:0,1,满2进1.以0b 或0B 开头
十进制:0-9,满10进1
八进制:0-7,满8进1.以数字0开头表示
十六进制:0-9 及 A(10)-F(15),满16 进1.以0x或0X开头表示。此处的 A-F 不区分大小写
进制的转换
-
二进制转十进制:
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。
案例:0b1011 → 十进制0b1011 == 1*1 + 1*2 + 0*4 + 1*8= 1 + 2 + 0 + 8 = 11 -
八进制转十进制:
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。
案例:0234 → 十进制0b1011 == 1*1 + 1*2 + 0*4 + 1*8= 1 + 2 + 0 + 8 = 11 -
十六进制转十进制:
规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。
案例:0x1A3 → 十进制0x1A3 == 3×16⁰ + A×16¹ + 1×16²= 3×1 + 10×16 + 1×256 = 3 + 160 + 256 = 419
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
部分内容可能已过时