Java的数据类型
基本数据类型
基本数据类型可以用于声明变量,存储不同类型的数据。每个基本数据类型都有固定的内存大小和范围。基本数据类型是按值传递的,而不是按引用传递。所以当将基本数据类型的值传递给方法或赋给其他变量时,将复制该值,而不是共享同一个内存地址。
整数类型
默认使用int,都是有符号整数类型。
名称 | 大小 | 范围 | |
---|---|---|---|
byte | 1byte(8bit) | -128127(-2^72^7-1) | 一般处理文件字节数据时使用byte[] |
short(短整型) | 2byte(16bit) | -215~215-1(-32768~32767) | 使用很少 |
int(整型) | 4byte(32bit) | -231~231-1 (-2147483648~2147483647) | 整型默认使用的类型 |
long(长整型) | 8byte(64bit) | -263~263-1 | 常用 一般声明毫秒值和序列号 |
浮点型
默认使用double
名称 | 大小 | 范围 | 有效数字 |
---|---|---|---|
float(单精度浮点数) | 4byte(32bit) | -3.4*1038~3.4*1038 | 约6-7位 |
double(双精度浮点数) | 8byte(64bit) | -1.7*10308~1.7*10308 | 约15位 |
字符型
用于表示单个字符的Unicode字符类型。
名称 | 大小 | 范围 |
---|---|---|
char | 2btye(16bit) | ‘\u0000’~‘\uffff’ |
布尔型
名称 | 取值 |
---|---|
true | true |
false | false |
引用数据类型
如类、接口、数组等,它们用于创建复杂的数据结构和对象。
String也是引用数据类型。
数据类型转换
隐式转换(自动类型转换)
自动类型转换是指将一个较小范围的数据类型转换为较大范围的数据类型,而不会导致数据丢失或溢出。在自动类型转换中,Java编译器会自动完成类型转换,无需显式的类型转换操作符。
示例:
int num = 100;
long bigNum = num; // 自动将int类型转换为long类型
显式转换(强制类型转换)
强制类型转换是指将一个较大范围的数据类型转换为较小范围的数据类型,或者将一种数据类型转换为另一种数据类型。在强制类型转换中,需要使用显式的类型转换操作符,并且注意可能会发生精度丢失或内存溢出的情况。
示例:
double d = 3.14;
int num = (int) d; // 强制将double类型转换为int类型
在上述示例中,`double` 类型的变量 `d` 被强制转换为 `int` 类型的变量 `num`。因为 `int` 类型的范围较小,无法容纳 `double` 类型的小数部分,所以小数部分会被截断。
注意:
- 布尔类型(
boolean
)不能与其他数据类型进行直接的类型转换。 - 在将整数类型转换为浮点数类型时,不会发生精度丢失。
- 在将浮点数类型转换为整数类型时,会将小数部分截断。
运算符
赋值运算符
=
:将右侧的值赋给左侧的变量。例如:int x = 5;
+=
、-=
、*=
、/=
、%=
:相当于右侧的值或变量进行相应算术运算后赋值给左侧变量
算术运算符
-
+
:加法运算符,用于相加两个值。例如:int sum = 2 + 3;
-
-
:减法运算符,用于相减两个值。例如:int difference = 5 - 2;
-
*
:乘法运算符,用于相乘两个值。例如:int product = 3 * 4;
-
/
:除法运算符,用于相除两个值。例如:double quotient = 10.0 / 3.0;
-
%
:取模运算符,返回除法的余数。例如:int remainder = 10 % 3;
-
++
、--
:自增自减,包括前置和后置两种,前置时先运算然后返回值;后置时先返回值然后运算。例如:int num6 = 3; System.out.println(num6++ + ++num6); //3++ + ++4 3+5 System.out.println(num6); //5
-
<<
、>>
:移位,
关系运算符
==
:相等运算符,用于检查两个值是否相等。例如:boolean isEqual = (x == y);
!=
:不等运算符,用于检查两个值是否不相等。例如:boolean isNotEqual = (x != y);
>
:大于运算符,用于检查左侧的值是否大于右侧的值。例如:boolean isGreater = (x > y);
<
:小于运算符,用于检查左侧的值是否小于右侧的值。例如:boolean isLess = (x < y);
>=
:大于等于运算符,用于检查左侧的值是否大于或等于右侧的值。例如:boolean isGreaterOrEqual = (x >= y);
<=
:小于等于运算符,用于检查左侧的值是否小于或等于右侧的值。例如:boolean isLessOrEqual = (x <= y);
逻辑运算符
-
&&
:短路逻辑与运算符,用于在两个条件都为真时返回真。例如:boolean result = (x > 0) && (y < 10);
-
||
:短路逻辑或运算符,用于在两个条件中至少有一个为真时返回真。例如:boolean result = (x > 0) || (y < 10);
-
!
:逻辑非运算符,用于取反一个条件的值。例如:boolean result = !(x > 0);
注意:
-
与:全真为真,有假则假;或:全假为假,有真则真
-
当执行短路逻辑与运算时,若前面的表达式为假,则后面的表达式不会执行
int x = 3; boolean b3 = b2 && ++x == 4; //false System.out.println(x);
- 当执行短路逻辑或运算时,若前面的表达式为真,则后面的表达式不会执行
int y = 3; boolean b4 = b1 && ++y == 4; //true System.out.println(x);
-
三元运算符
condition ? value1 : value2
:三目运算符根据条件的真假返回两个值之一。例如:int max = (x > y) ? x : y;
字符串拼接
可以使用加号运算符(+
)来进行字符串拼接,将多个字符串连接成一个新的字符串。这个过程被称为字符串拼接或字符串连接操作。
-
字符串拼接可以包括字符串常量、字符串变量和其他数据类型(会自动转换为字符串)。
-
字符串拼接的结果是一个新的字符串,原始的字符串不会被修改。
方法
将代码模块化,将执行不同功能的代码声明在不同的方法中,要执行方法中的代码时,调用使用即可。
方法分类
- 静态方法:使用static修饰的方法,可以在main中直接使用方法名调用
- 成员方法(非静态方法):不使用static修饰的方法,是属于对象的行为
- 构造方法
- 抽象方法:没有方法体
静态方法
静态方法(static
方法)是属于类本身的方法,而不是类的实例。它们可以直接通过类名来调用,而不需要创建类的对象。静态方法在类加载时就已经存在,可以在任何时候被调用。
特点:
- 静态方法属于类而不属于类的实例。它们不依赖于对象的状态,也不能直接访问非静态成员(实例变量和实例方法)。
- 静态方法可以直接通过类名调用,无需创建类的实例。
- 静态方法可以访问和修改静态成员(静态变量和静态方法)。
静态方法格式
权限修饰符
static
返回值类型
方法名(参数1,参数2,...)
{
方法体
return 放回值;
//表示方法的返回值,如果返回值类型为void,可以不写 表示没有返回值
}
示例:
public class MathUtils {
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int sum = MathUtils.add(5, 3);
System.out.println("Sum: " + sum);
}
}
静态方法调用
- 直接使用
方法名()
调用,适用于在当前类中调用 较常用 - 可以通过
类名.方法名()
调用,适用于在一个class中调用另一个class中的静态方法 对象.方法名()
调用 较少见
方法重载
方法重载(Method Overloading)是指在同一个类中定义多个同名方法,但它们具有不同的参数列表。方法重载允许我们使用相同的方法名来执行不同的操作,根据传递给方法的参数的类型、数量或顺序来决定使用哪个方法。
示例:
public class test {
//声明一个方法
public static void method01(int a,int b) {
System.out.println(a+b);
}
public static void method01(double a,int b) {
System.out.println(a*b);
}
public static void method01(int a,int b,int c) {
System.out.println(a+b-c);
}
public static void main(String[] args) {
method01(1,2,3);
}
}
流程控制
条件
-
if
语句:根据条件的真假执行不同的代码块。if (condition) { // 当条件为真时执行的代码块 } else { // 当条件为假时执行的代码块 }
-
switch
语句:根据不同的情况执行相应的代码块。switch (expression) { case value1: // 当 expression 等于 value1 时执行的代码块 break; case value2: // 当 expression 等于 value2 时执行的代码块 break; default: // 当 expression 不匹配任何 case 时执行的代码块 break; }
循环
-
while
循环:在满足条件的情况下,重复执行一段代码块,通常用于未知迭代次数的循环。格式:
初始化变量
while
(判断语句
(判断变量的值是否满足条件)){
循环体
(循环执行的代码)
步进表达式
(改变变量的值) }
while (condition) { // 循环体中的代码块 }
-
for
循环:在满足条件的情况下,重复执行一段代码块,通常用于已知迭代次数的循环。for (initialization; condition; update) { // 循环体中的代码块 }
-
do-while
循环:先执行一次代码块,然后在满足条件的情况下重复执行,通常用于至少执行一次的循环。do { // 循环体中的代码块 } while (condition);
跳转
-
break
语句:用于终止循环或switch
语句的执行,并跳出对应的代码块。 -
continue
语句:用于跳过当前循环的剩余代码,继续下一次循环的执行。
ASC码对照
ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 | ASCII值 | 控制字符 |
---|---|---|---|---|---|---|---|
0 | NUT | 32 | (space) | 64 | @ | 96 | 、 |
1 | SOH | 33 | ! | 65 | A | 97 | a |
2 | STX | 34 | " | 66 | B | 98 | b |
3 | ETX | 35 | # | 67 | C | 99 | c |
4 | EOT | 36 | $ | 68 | D | 100 | d |
5 | ENQ | 37 | % | 69 | E | 101 | e |
6 | ACK | 38 | & | 70 | F | 102 | f |
7 | BEL | 39 | , | 71 | G | 103 | g |
8 | BS | 40 | ( | 72 | H | 104 | h |
9 | HT | 41 | ) | 73 | I | 105 | i |
10 | LF | 42 | * | 74 | J | 106 | j |
11 | VT | 43 | + | 75 | K | 107 | k |
12 | FF | 44 | , | 76 | L | 108 | l |
13 | CR | 45 | - | 77 | M | 109 | m |
14 | SO | 46 | . | 78 | N | 110 | n |
15 | SI | 47 | / | 79 | O | 111 | o |
16 | DLE | 48 | 0 | 80 | P | 112 | p |
17 | DCI | 49 | 1 | 81 | Q | 113 | q |
18 | DC2 | 50 | 2 | 82 | R | 114 | r |
19 | DC3 | 51 | 3 | 83 | S | 115 | s |
20 | DC4 | 52 | 4 | 84 | T | 116 | t |
21 | NAK | 53 | 5 | 85 | U | 117 | u |
22 | SYN | 54 | 6 | 86 | V | 118 | v |
23 | TB | 55 | 7 | 87 | W | 119 | w |
24 | CAN | 56 | 8 | 88 | X | 120 | x |
25 | EM | 57 | 9 | 89 | Y | 121 | y |
26 | SUB | 58 | : | 90 | Z | 122 | z |
27 | ESC | 59 | ; | 91 | [ | 123 | { |
28 | FS | 60 | < | 92 | \ | 124 | | |
29 | GS | 61 | = | 93 | ] | 125 | } |
30 | RS | 62 | > | 94 | ^ | 126 | ` |
31 | US | 63 | ? | 95 | _ | 127 | DEL |
特殊字符解释
NUL空 | VT 垂直制表 | SYN 空转同步 |
STX 正文开始 | CR 回车 | CAN 作废 |
ETX 正文结束 | SO 移位输出 | EM 纸尽 |
EOY 传输结束 | SI 移位输入 | SUB 换置 |
ENQ 询问字符 | DLE 空格 | ESC 换码 |
ACK 承认 | DC1 设备控制1 | FS 文字分隔符 |
BEL 报警 | DC2 设备控制2 | GS 组分隔符 |
BS 退一格 | DC3 设备控制3 | RS 记录分隔符 |
HT 横向列表 | DC4 设备控制4 | US 单元分隔符 |
LF 换行 | NAK 否定 | DEL 删除 |