Java基础(一)
java
编写java程序流程
- 建立文本文档,将扩展名编写为xxx.java;
- 使用记事本/Notepad++的方式打开文件,编写java代码进行保存;
- 启动dos窗口,并切换到.java文件所在的路径中【也可以打开.java文件所在的文件夹位置,在文件夹栏直接输入cmd即可】;
- 输入javac xxx.java 进行编译,生成xxx.class的字节码文件;
- 使用Java xxx进行解释执行,并打印结果
Java跨平台原理
- java字节码可以通过JVM翻译为具体平台能够执行的机器命令。由于sun定义了JVM规范,且不同佛如操作系统大多提供了JVM实现,使得相同的一个字节码文件可以在不同佛如系统上运行,让Java拥有了“一次编译,到处使用”的美名。
数据类型:
-
基本数据类型:byte、short、int、long、float、double、boolean、char
-
引用数据类型:数组、类、接口、枚举、标注
进制转换
-
十进制转二进制
①除2取余法:将十进制整数不断额除以2取出余数,余数逆序排序。
例: 45转二进制 结果为:101101
2|___45 1
2|___22 0
2|___11 1
2|____5 1 ↑
2|____2 0 |
2|____1 1 ↑
0
②拆分法:将十进制整数拆分为若干个二进制权重的和,有权重位的写1,否则为0。
45 = >> 32 + 8 +4 +1 == >> 2⁵ + 2³ + 2² + 2⁰ == >> 1 0 1 1 0 1
-
负十进制转换为二进制的方式
先将十进制的绝对值转换为二进制,再进行按位取反再加1
负数需要补码:按位取反,再加1
按位取反:1101 0010 -45 :1101 0011
再加1 : 1101 0011 45: 0010 1101
- 非负数所能表示的整数范围:0000 0000 ~0111 1111 => 0~127 =>0 ~2⁷-1
- 负数所能表示的整数范围: 1000 0000 ~ 1111 1111 => 1000 0000 =>-128 ~ -1
1000 0000:
【减一:0111 1111】
【按位取反:1000 0000】
【十进制表示:128】
【加上负号:-128】
1111 1111:
【减一:1111 1110】
【按位取反:0000 0001】
【十进制表示:1】
【加上负号:-1】
- 单个字节表示的整数范围是:-128 ~ 127 => -2⁷ ~ 2⁷-1
基本数据类型之间的转换
-
从小类型可以自动转换为大类型
-
强制类型转换,从大类型转小类型:目标类型 变量名 = (目标类型)源类型变量名;【强制转换是有风险的】
如:byte + int 相加 结果是int型,强行byte = int ,int 转 byte 可能会有损失,这时就可以使用强制类型转换,将int 类型转换为byte
byte + byte 相加 结果还是int类型,这是编译器的优化结果
-
笔试考点:byte b1 =10;
b1 += 2;//等价于b1 = (byte)(b1 + 2)
移位运算符
左移运算符:<< ,将数据的二进制位向左移动,右边用0补充
右移运算符: >>,将数据的二进制位向右移动,左边使用符号位补充1、0
逻辑右移运算符(无符号右移):>>>,将数据的二进制位向右移动,左边用0补充
运算符
算数运算符、字符串连接符、关系运算符、自增减运算符、逻辑运算符、条件运算符( ?: )、赋值运算符、移位运算、位运算符
运算符的优先级:()优先级最高, = 优先级极低
Java的分支结构
if分支结构、if else分支结构、if else if else分支结构、switch case分支结构
Java的循环结构
for循环、while循环、do while循环、双重for循环
数组
一维数组:
数组名:记录一维数组在内存空间中的地址信息,便于下次访问
数组元素:指存放在数组中的数据内容
数组长度:指数组中最多可以存放的元素个数,通常可以使用 数组名.length获取
数组下标:指数组元素在数组中的编号,从0开始到长度-1
- 基本类型的数组创建后,其元素的初始值:byte、short、char、int、long为0;float和double为0.0;boolean为false。
语法格式: 如:① 动态方式: 声明数组,但没有初始化数组:
int[ ] arr = new int[长度]
② 静态方式: 数组声明的同时,对数组元素进行初始化:
数据类型[ ] 数组名称 = {初始值1,初始值2,.......}
二维数组
-
二维数组本质上就是由多个一维数组叠起来的数组,二维数组中每个元素都是一维数组,而一维数组中的每个元素才是数据内容。
-
声明: 数据类型[ ] [ ] 数组名称 = new 数据类型 [行数] [列数];
如:int[ ] [ ] arr = new int [长度] [ ];
arr.length代表二维数组arr的长度,就是元素个数(二维数组中每个元素都是一维数组),就是行数;
arr[0].length代表二维数组中第一个元素的长度,即一维数组的长度,就是第一行的列数。
声明一个数组,就是在堆区开辟(new)一块空间,用来存储数组中的元素,再将其地址存储在栈区的变量中。
内存结构之堆区:JVM会在其内存空间中开辟一个称为“堆”的存储空间,这部分空间用于存储使用了new 关键字创建的数组和对象。
内存结构之栈区:用于存放程序运行过程当中所有的局部变量,一个运行的java程序从开始到结束会有多次变量的声明。
数组的优缺点
- 可以直接通过下标(或索引)的方式访问指定位置的元素,速度快。
- 同一数组要求所有元素的类型相同
- 数组要求内存空间连续,并且长度一旦确定就不能修改
- 增加和删除元素时,移动元素量太大,效率低
数组的复制
int[] arr = {11,22,33,44,55,22};
int[] brr = new int[3];
brr = arr;
表示数组名arr的内存空间中存放的是数据在堆区中的内存地址信息,
赋值后让brr变量中存放了arr所指向堆区的内存地址,也就是让brr和arr指向了同一块堆区空间
本质上就是改变指向而已
java的数组工具类
- java.util.Arrays类可以实现对数组中元素的遍历、查找、排序、复制等操作。
- 具体参考jdk11 中文版api【在线api:https://www.runoob.com/manual/jdk11api/index.html 】