1. 变量
-
当需要在程序中记录单个数据内容时,则声明一个变量即可,而声明变 量的本质就是在内存中申请一个存储单元
-
由于存放的数据内容大小不一样,导致所需存储单元的大小不一样,在 Java语言中使用数据类型加以描述,为了便于下次访问还需要给该变量指 定一个名字,用于记录该变量对应的存储单元。
1.1 变量的声明方式
-
数据类型 变量名 = 初始值;
- 初始值可以省略不写。
-
注意点
- Java是强类型语言,变量在使用前必须声明来指明其数据类型。
- 变量在使用之前必须初始化。
- 变量不能重复声明
package task01.day02;
public class C01Var {
public static void main(String[] args) {
// 1.声明变量并初始化
int age = 18;
// + 用于并接字符串
System.out.println("age = " + age);
// 2. 注意点
// 变量必须声明才能使用
// System.out.println(height); // java: 找不到符号
// 变量必须赋值才能使用
int height;
// System.out.println(height); // 可能尚未初始化变量height
height = 180;
System.out.println("height = " + height);
// 变量的值可以变化
height = 175;
System.out.println("height = " + height);
// 变量不能重复声明
// int height = 163; // 已在方法 main(java.lang.String[])中定义了变量 height
// 变量区分大小写
int aGe = 120;
System.out.println("aGe = " + aGe);
}
}
2. 标示符
-
由数字、字母、下划线以及$等组成,其中数字不能开头
-
不能使用java的关键字和保留字
- 关键字就是Java语言用于表示特殊含义 的单词。
-
区分大小写,长度没有限制但不宜过长。
-
尽量做到见名知意,支持中文但不推荐使用
3. 练习
- 输入和输出
package task01.day02;
import java.util.Scanner;
public class C02Input {
public static void main(String[] args) {
// 提示用户从键盘输入自己的姓名和年龄信息并打印出来。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入姓名: ");
String name = scanner.next();
System.out.println("请输入年龄: ");
int age = scanner.nextInt();
System.out.println("姓名: " + name + ", 年龄: " + age);
scanner.close();
}
}
4. 进制
4.1 进制
-
十进制,逢十进一
-
二进制
- 计算机使用的是二进制,用0和1表示,也就是逢二进一。
- 计算机使用的是二进制,用0和1表示,也就是逢二进一。
-
八进制
- 逢八进一,用 0~ 7 表示数据 。
- 每三位二进制合成一位八进制
-
十六进制
- 使用数字0 ~ 9及英文字母A ~ F表示,逢十六进一
- 每四位二进制转换一个十六进制
4.2 十进制转换为十进制
- 不断除2取余数的倒序
- 我们通过除以 2 取余的方法将 10 转换为二进制。以下是竖式计算过程:
- 将余数从下到上排列,得到 10 的二进制表示为:
1010
4.3 负数的二进制
-
先求绝对值的二进制
-
逐位取反
-
再加1
- -10 的二进制表示过程
-
- 首先,求 10 的二进制表示: 通过除 2 取余法,计算 10 的二进制表示:
- 余数从下到上排列,得到 10 的二进制表示为
1010
-
- 计算 -10 的二进制表示(补码): 假设我们使用 8 位二进制表示:
- 10 的二进制表示:
00001010 - 反码(取反):
11110101 - 补码(反码 + 1):
11110110
-
3.-10 的二进制表示为:
11110110
-
- -10 的二进制表示过程
5. 数据类型
5.1 分类
- 在Java语言中数据类型主要分为两大类:
- (1)基本数据类型 (8个)
- byte、short、int、long、float、double、boolean、char
- (2)引用数据类型
- 数组、类、接口、枚举、标注
- (1)基本数据类型 (8个)
5.2 整数类型 4个
-
byte、short、int、long
-
byte类型在内存空间中占1个字节,表示范围是:.
-
short类型在内存空间中占2个字节,表示范围是:.
-
int类型在内存空间中占4个字节,表示范围是::
-
long类型在内存空间中占8个字节,表示范围是::.
-
默认为int类型。若希望表达更大的直接量,则在直接量的后面加上l或者L,推荐L
package task01.day02;
public class C03Integer {
public static void main(String[] args) {
// byte - c语言中的 char
byte b = -128;
System.out.println("b = " + b);
// short
short s = 32767;
System.out.println("s = " + s);
// int
int i = 65550;
System.out.println("i = " + i);
// long
long l = 25025025000L;
System.out.print("l = " + l);
// int num = 255;
// byte b2 = num; // 编译错误
}
}
5.3 浮点类型 2个
-
Java语言中用于描述小数数据的类型:float 和 double,推荐double类型
- float类型在内存空间占4个字节,叫做单精度浮点数,可以表示7位
- 有效数字,范围:-3.403E38~3.403E38。
- double类型在内存空间占8个字节,叫做双精度浮点数,可以表示15位有效数字,范围:-1.798E308~1.798E308。
- float类型在内存空间占4个字节,叫做单精度浮点数,可以表示7位
-
Java程序中直接写出的小数数据叫做直接量,默认为double类型,若希望 表达float类型的直接量,则需要在直接量的后面加上f或者F.
package task01.day02;
public class C04Double {
public static void main(String[] args) {
// 浮点有 float double ,默认double
float pi = 3.14159265F;
System.out.println("pi = " + pi); // 7位小数
// double
double d = 1.7320000000000000000000000000000002;
System.out.println("d = " + d); // 15位小数
// 运算时可能会有误差,若希望实现精确运算则借助java.math.BigDecimal类型
System.out.println(0.1 + 0.2);
}
}
5.4 布尔类型 1个
-
Java语言中用于描述真假信息类型有:boolean,数值只有:true 和 false。
-
布尔类型在内存空间中所占大小没有明确的规定,可以认为是1个字节。
-
JAVA中没有非零即真的概念
package task01.day02;
public class C05Bool {
public static void main(String[] args) {
// 只有两个值, true false
boolean b = true;
System.out.println("b = " + b);
b = false;
System.out.println("b = " + b);
// 不存在非零即真
// b = 100;
}
}
5.5 字符类型 1个
-
Java语言中用于描述单个字符的数据类型:char类型。如:'a'、'中'等。
-
其中char类型在内存空间中占2个字节并且没有符号位,表示的范围是:0 ~ 65535
- 类似于C/C++中的unsigned short
-
常用的字符ASCII码 :'0' - 48 'A' - 65 'a' - 97 空格 - 32 换行符 - 10
-
常用的转义字符 :
- " - "
- ' - '
- \ - \
- \t - 制表符
- \n - 换行
package task01.day02;
public class C06Char {
public static void main(String[] args) {
char ch = 'A';
System.out.println("ch = " + ch);
ch = 98;
System.out.println("ch = " + ch);
ch = '\u5397';
System.out.println("ch = " + ch);
ch = '好';
System.out.println("ch = " + ch);
// 转义字符
System.out.println("abc"def\thello\nH\F");
}
}
6. 类型转换
-
Java的类型转换两两种
- 自动类型转换(隐式转换)和强制类型转换
-
java虽然算强类型的语言,但不像Swift哪样绝对不允许隐式转换的语言,它还有有隐式转换的
- 自动类型转换主要指从小类型到大类型之间的转换
- 强制类型转换
- 目标类型 变量名 = (目标类型)源类型变量名;
- 注意强制类型转换是有风险的,可能造成数据的丢失
类型转换并不会改变原数据,只是创造了一个临时数据
package task01.day02;
public class C07Cast {
public static void main(String[] args) {
// 隐式类型转换
byte b = 100;
short s = 200;
// byte -> short
s = b;
// b = s; // 不可以
int i = b;
i = s;
char ch = 0;
// ch = s; // 不可以
// s = ch; // 不可以
long l = i;
// i = l; // 不可以
float f = l; // 可以
// l = f; // 不可以
double d = f;
// f = d; // 不可以
// 强制类型转换 (int)目标 C语言风格
int i2 = 128;
byte b2 = (byte)i2;
System.out.println("b2 = " + b2); // -128
// 注意:类型转换并不会改变原数据,只是创造了一个临时数据
System.out.println("i2 = " + i2); // 128
}
}