变量的基本概念
- 声明的本质就是在内存中申请一个存储单元。
- 数据类型
- 变量名
变量的声明和使用
数据类型 变量名 = 初始值;
变量使用的注意事项
标识符的命名规则
- 由数字、字母、下划线以及$等组成,其中数字不能开头(后面讲到)。
通常用字母表示标识符。
- 不能使用Java中的关键字,所谓关键字就是Java语言用已被使用表示特殊含义的单词。
- 区分大小写,长度没有限制但是不宜过长。
- 尽量要做到见名知意,支持中文但是不支持使用.
变量输入输出案例的优化和手册介绍
- 变量随使用随声明
尽可能减少重复的代码
/*
编程实现变量的输入输出
*/
//导入java目录中util目录的Scanner类
//C:/Program Files/Java/jdk-11.0.2/lib/src/java.base/java/util/Scanner.java
import java.util.Scanner;
public class VarIOTest {
public static void main(String[] args) {
//1. 声明两个变量,用于记录姓名和年龄信息
//String name;
//int age;
//2. 提示用户从键盘输入姓名等信息并放入到变量中 变量随使用随声明
System.out.println("请输入您的姓名和年龄信息:");
//创建一个扫描器来扫描键盘输入的信息
Scanner sc = new Scanner(System.in);
//通过扫描器读取一个字符串数据放入变量name中
//String name = sc.next();
//通过扫描器读取一个字符串数据放入变量age中
//int age = sc.nextInt();
//3. 打印输入的信息 尽可能减少重复的代码
//System.out.println("name = "+name+" age = "+age );
System.out.println("name = "+sc.next()+", age = "+sc.nextInt());
}
}
数据类型分类
(1) 基本数据类型
byte short int long float double boolean char
(2) 引用数据类型
数组、类、接口、枚举、标注
常用的进制
- 相关概念
十进制、逢十进一、权重
123 = 1 100 + 2 10 + 3 1
= 110^2 + 210^1 + 310^0
正十进制转换为二进制的方法
除二取余法
二进制的前缀: 0b/0B
八进制前缀: 0
十六进制前缀: 0x
拆分方法
45 = 32+8+4+1 = 101101
正二进制转换为十进制的方式
负十进制转换为二进制的方式
单个字节所能表示的整数范围
[-128, 127]
整数类型
推荐使用int类型 基本能满足日常使用
/*
编程实现整数类型的使用
*/
public class IntTest {
public static void main(String[] args) {
//1. 声明一个Byte类型的变量并初始化
byte b1 = 25;
//byte b1 = 250; // > 128 错误: 不兼容的类型: 从int转换到byte可能会有损失 250这样直接写出的数据我们叫做直接量/常量/字面值 默认为int 类型
//2. 打印变量的数值
System.out.println("b1 = "+b1);
System.out.println("===================");
//3. 声明一个short类型变量并初始化
short s1 = 250;
//short s1 = 250250; // > 32768 错误: 不兼容的类型: 从int转换到short可能会有损失
System.out.println("s1 = "+s1);
System.out.println("===================");
//4. 声明一个int类型变量并初始化
int i1 = 250250;
//int i1 = 2502508129; // > 2147483648 错误: 整数太大 默认为int类型,这个数据自身已经出错,还没有到赋值阶段
//int i1 = 2502508129L; //错误: 不兼容的类型: 从long转换到int可能会有损失
System.out.println("i1 = "+i1);
System.out.println("===================");
// 5.声明一个long类型变量并初始化,若描述比long型还大的数据使用java.math.BigInteger类型
long g1 = 2502508129L;
//long g1 = 2502508129; //错误: 整数太大
System.out.println("g1 = "+g1);
}
}
整数类型的笔数考点
- 数字不能开头 —> 2502508129L 这个是标识符还是直接量.
//6. 请问下面的代码是否有错误,若有请指出并说明.
int i2 = 25;
byte b2 = i2; //错误: 不兼容的类型: 从int转换到byte可能会有损失
//直接量在编译时就可以检查,但是变量不在编译时检查, 为确保转换的安全性, 所以报错
System.out.println("b2 = "+b2);
浮点类型
float跟int所占字节数相等,但是表示类型相差很多的原因.
二进制表示方式不一样,浮点类型包含指数值 参考文章:
浮点数推荐使用double类型
/*
编程实现浮点类型的使用
*/
public class DoubleTest {
public static void main(String[] args) {
//1. 声明一个float类型的变量并初始化
//float f1 = 3.1415926; //错误: 不兼容的类型: 从double转换到float可能会有损失 小数数据叫做直接量,默认就是double类型
float f1 = 3.1415926f; //打印结果f1 = 3.1415925,最后一位数字不一样, 原因是单精度浮点数7位有效数字
//2. 打印变量的值
System.out.println("f1 = "+f1); //f1 = 3.1415926
System.out.println("==========================");
//3. 声明一个double类型的变量并初始化
double d1 = 3.1415926;
System.out.println("d1 = "+d1); //d1 = 3.1415926 一般是15位有效数字
System.out.println("==========================");
// 4.笔试考点
System.out.println(0.1+0.2); //0.30000000000000004 运算时可能会有误差,若希望实现精确运算,则应借助java.math.BigDecimal类型
}
}
布尔类型
ArithmeticException 异常
NaN,是Not a Number的缩写。
NaN 用于处理计算中出现的错误情况,比如 0.0 除以 0.0 或者求负数的平方根。
Infinity,是指无穷大
typeof(NaN)和typeof(Infinity)都返回number 。
NaN参与任何数值计算的结构都是NaN,
而且 NaN != NaN 。
Infinity / Infinity = NaN 。
当运算中遇到除以0的情况时,基本类型中的整数类型和BigDecimal
会直接抛出ArithmeticException
。而基本类型中的浮点数类型时会返回Infinity
。