视频链接:Java零基础教程
Java语言概述
Java语言特性
特点一:面向对象
特点二:健壮性
特点三:跨平台性
单行注释与多行注释、文档注释
注释了的内容不参与编译
文档注释生成文档:javadoc -d outputPath -author -version javaFileName
基本语法
cmd启动快捷方式:在文件夹地址栏输入cmd可以直接在此路径打开cmd
标识符的命名规范
java采用unicode字符集,因此标识符也可以使用汉字声明,但是不建议使用
变量的分类
- 基本数据类型
-
- 整型:byte(1),shot(2),int(4),long(8)
-
- 浮点型:float(4),double(8)
-
- 字符型:char(2)
char c = '' // 编译报错
- 字符型:char(2)
-
- 布尔型:boolean(boolean类型单独使用占4个字节(int),在数组中占1个字节(byte))
- 引用数据类型
-
- 类:class
-
- 接口:interface
-
- 数组:array
java中内码(运行内存)中的char使用UTF16的方式编码,一个char占用两个字节,但是某些字符需要两个char来表示。所以,一个字符会占用2个或4个字节。
java中外码中char使用UTF8的方式编码,一个字符占用1~6个字节。
UTF16编码中,英文字符占两个字节;绝大多数汉字(尤其是常用汉字)占用两个字节,个别汉字(在后期加入unicode编码的汉字,一般是极少用到的生僻字)占用四个字节。
UTF8编码中,英文字符占用一个字节;绝大多数汉字占用三个字节,个别汉字占用四个字节。
《Java虚拟机规范》: 虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位
自动类型提升运算
byte、char、short三种类型的变量做运算时,结果为int型
String类型无法强制转化为数值型,可以使用包装类转化
算术运算符
% 取余运算,结果的符号与被模数的符号相同
+=不会改变结果数据类型
int i = 1;
i *= 0.1; // 编译通过,i结果为0
逻辑运算符
&(与)、&&(短路与)
| (或)、||(短路或)
位运算符(整型操作)
<< 左移
>> 右移
>>> 无符号右移(最高位无论是0或者是1,空缺为都补0)
& 与运算
| 或运算
^ 异或运算
~ 取反运算
交换两个变量
// 方式一:定义临时变量
int temp = num1;
num1 = num2;
num2 = temp;
// 方式二:加减法
num1 = num1 + num2;
num2 = num1 - num2;
num1 = num1 - num2;
// 方式三:^运算
num1 = num1 ^ num2;
num2 = num1 ^ num2;
num1 = num1 ^ num2;
使用Scanner从键盘获取数据
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
String.charAt() 获取指定索引位置的字符
if-else练习
获取一个随机数:10 - 99
公式:[a, b] : (int)(Math.random() * (b - a + 1) + a)
switch-case结构
switch结构中的表达式,只能是如下的6中数据类型之一:byte、short、char、int、枚举类型、String类型
case之后只能声明常量,不能声明范围
for循环结构
for(①;②;③):①、②、③可以是多条语句,使用”,“隔开
break和continue的基本使用
break使用范围 switch-case、循环结构中,结束当次循环,可以加标签
continue使用范围循环结构中,结束当次循环,可以加标签
return结束方法
数组
数组的概念
数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用类型
数组的长度一旦确定,就不能修改
数组声明和初始化
int[] ids; //声明
ids = new int[]{1001, 1002, 1003, 1004}; // 静态初始化,数组的初始化和数组元素的赋值操作同时进行
String[] names = new String[5]; // 动态初始化,数组的初始化和数组元素的赋值操作分开进行
String names[] = new String[5];
// 错误写法
// int[] arr1 = new int[];
// int[5] arr2 = new int[5];
// int[] arr3 = new int[3]{1, 2, 3};
// 也是正确的写法
int[] arr4 = {1,2,3,4,5}; // 类型推断
int[][] arr = new int[][]{{1,2,3}, {4,5}, {6,7,8}}; // 静态初始化
String[][] arr2 = new String[3][2]; // 动态初始化1
String[][] arr3 = new String[3][]; // 动态初始化2
// 错误写法
// String[][] arr4 = new String[][4];
// String[4][3] arr5 = new String[][];
// int[][] arr6 = new int[4][3]{{1,2,3}, {4,5}, {6,7,8}};
// 正确
int [][]arr4 = new int[][]{{1,2,3}, {4,5}, {6,7,8}};
int []arr4[] = new int[][]{{1,2,3}, {4,5}, {6,7,8}};
int []arr4[] = {{1,2,3}, {4,5}, {6,7,8}}; // 类型推断
数组元素的初始化值
- 数组元素是整型:0
- 数组元素是浮点型:0.0
- 数组元素是字符型:0或’\u0000’,而非‘0’
- 数组元素是boolean型:false
- 数组元素是引用数据类型:null
- 二维数组的外层元素:外层为地址值,内层与一维数组相同
- 二维数组只定义一维长度,未定义二维长度,外层为null,内层调用空指针异常
数据结构
- 数据与数据之间的逻辑关系:集合、一对一、一对多、多对多
- 数据的存储结构
线性表:顺序表(比如:集合)、链表、栈、队列
树形结构:二叉树
图形结构
算法
- 排序算法
- 搜索算法
数组中涉及的常见算法
- 数组元素的赋值(杨辉三角、回形数)
- 求数值型数组中元素的最大值、最小值、平均值、总和等
- 数组的复制、反转、查找(线性查找、二分法查找)
- 数组元素的排序算法
十大内部排序算法
- 选择排序
直接选择排序、堆排序 - 交换排序
冒泡排序、快速排序(速度最快) - 插入排序
直接插入排序、折半插入排序、Shell排序 - 归并排序
- 桶式排序
- 基数排序
// 冒泡排序
for(int i = 0; i < arr.length - 1; i ++) {
for(int j = 0; j < arr.length - i - 1; j ++) {
if(arr[j] > arr[j + 1]) {
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
Arrays工具类
Arrays.sort(arr); // 底层使用快排算法