目录
Java基础
2020年12月19日,从0开始学习java。
数据类型和变量
基本数据类型
- 整数类型:byte、short、int、long
- 浮点数类型:float、double、
- 字符类型:char
- 布尔类型:boolean
计算机内存的最小存储单元是字节(byte),一个字节就是9位二进制数
java基本数据类型占用的字节数:
- byte 1 ,-128~127
- short 2 ,-32768 ~ 32767
- int 3 ,-2147483648 ~ 2147483647
- long 8 ,-9223372036854775808 ~ 9223372036854775807
- float 4
- double 8
- char 2
变量注意事项
- 创建的变量的名称不可以重复
- 对于float和long类型来说,字母后缀F和L不可以丢掉
- 如何使用byte或者short类型的变量,右侧的数据值不能超过左侧类型的范围
- 没有赋值的变量不能直接使用,一定要赋值之后才能使用
- 变量使用不能超过作用域的范围
- 再给变量进行赋值的时候,如果右侧的表达式当中全都是常量,没有任何变量,那么编译器javac将会直接使用若干个常量表达式计算得到的结果,这称为“ 编译器的常量优化 ”,但是一旦表达式中有变量参与,那么就不会进行这样的优化。
数据类型转换
自动类型转换(隐式)
- 特点:代码不需要进行特殊处理,自动完成
- 规则:数据范围从小到大
- 编译器的优化:如果没有超过左侧的范围,编译器补上强转;如果右侧超过左侧范围,编译器报错
强制类型转换
- 特点:代码需要进行特殊的格式处理,不能自动完成
- 格式:范围小的类型 范围小的变量名 = (范围小的类型)原本范围大的数据
- 注意事项:有可能发生精度损失、数据溢出;byte/short/char(ASCII、Unicode)三种类型都可以发生数学运算,例如加法“ + ”;这三种类型的运算的时候,都会被首先提升为int类型,然后再计算;boolean类型不能发生数据类型转换;
Java 中的内存划分
Java中的内存需要划分为5个部分:
- 栈(stack):存放的都是方法中的局部变量,方法的运行一定要在栈当中运行
局部变量:方法的参数,或者是方法{}内部的变量
作用域:一旦超出作用域,立刻从栈内存当中消失 - 堆(heap):凡是new出来的东西,都在堆当中
堆内存里面的东西都有一个地址之:16进制
堆内存里面的数据,都有默认值,规则:
数据类型 | 默认值 |
---|---|
整数 | 0 |
浮点数 | 0.0 |
字符 | \u0000 |
布尔值 | false |
引用类型 | null |
- 方法区(Method Area):存储calss相关信息,包含方法的信息
- 本地方法栈(Native Method Stack):与操作系统相关
- 寄存器(pc Register):与CPU相关
一个数组的内存图(引用)
其他数据类型
数组
动态初始化(指定长度),在创建数组的时候,直接指定数组当中的数组元素个数。
int[] array1 = new int[100];
double[] array2 = new double[10];
String[] array3 = new String[10];
// 动态初始化标准格式分为两个步骤
int[] array4;
array4 = int[10];
静态初始化(指定内容),在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。
// 标准格式
int[] array1 = new int[] { 1, 2, 3, 4};
String[] array2 = new String[] { "Helo", "World", "!" };
// 省略格式
int[] array3 = { 5, 6, 7, 8 };
// 静态初始化标准格式分为两个步骤
int[] array4;
array4 = int[] { 1, 2, 3, 4 };
注意事项:
- 虽然静态初始化没有直接指定数组长度,会根据内容计算长度
- 静态初始化标准格式分为两个步骤
顺序结构
switch语句注意事项
- 多个case后面的数值不可以重复
- switch后面小括号中只能是下列数据类型:基本数据类型(byte/short/char/int)、引用数据类型(String字符串/enum枚举)
- switch语句格式可以很灵活:前后顺序可以点到,而且break语句还可以省略
方法
方法的重载
方法的重载(Overload):多个方法的名称一样,但参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。
方法重载与下列因素相关:
- 参数的个数不同
- 参数的类型不同
- 参数的多类型顺序不同
注:
- 与参数名称无关
- 与返回值类型无关