文章目录
- 一、初始Java
- 二、数据类型与变量
- 三、运算符
- 四、关系运算符
- 五、逻辑控制
- 六、方法的使用
- 七、数组的定义和使用
- 数据类型未初始化时的默认值
- 八、内存的划分
- 数组的简单堆栈图
- 九、常用的数组操作方法
一、初始Java
JDK (Java Development Kit):Java开发工具包。不提供具体的开发软件,而是提供编写代码时都会用到的类库 和 Java语言规范。
JDK是整个Java开发的核心,其主要组成部分包括:
- Java编译器(javac):
用于将Java源代码(.java)编译成字节码文件(.class文件) - Java运行工具(JRE):
包含了java虚拟机(JVM),用于执行编译之后的字节码文件(.class文件) - Java文档生成器(javadoc):
用于生成Java程序的API文档 - Java打包工具
idea是集成开发环境,配合JDK来编写、编译、运行和调试程序
二、数据类型与变量
基本数据类型 && 引用数据类型
基本数据类型:
- 整数型:byte、short、long、int
- 浮点型:float、double
- 字符型:char
- 布尔型:boolean
引用数据类型:
- String
- 数组
- 类
- 接口
- …
没有讨论在32位下还是64位下
不管是多少位操作系统下,都是这个字节数
三、运算符
以下这些操作符,全部基于二进制进行相应操作
这里右移操作符分为 算数右移 和 逻辑右移 ,但是大多数编译器都是使用算数右移
实际运用:
要求不创建临时变量,交换两个整形变量的值:
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;
a = a ^ b;
原理: a ^ a = 0; a ^ a ^ b = b; b ^ b ^ a = a;
什么是表达式?----> 变量和 运算符 结合起来的式子就是表达式
四、关系运算符
逻辑与 &&
表达式1 && 表达式2 表达式1 和 表达式2 都必须是布尔表达式,返回值为true或false
逻辑或 ||
表达式1 || 表达式2 表达式1 和表达式2 都必须是布尔表达式,返回值为true或false
注意:发生短路的逻辑与和逻辑或,发生短路 ,之后的表达式不计算
五、逻辑控制
顺序结构、选择结构、循环结构
- 顺序结构
按照程序的定义顺序去执行 - 选择结构(switch && if)
- 循环结构 (while && for && do-while)
switch语句
switch(表达式) {
case 常量值:
break;
case 常量值:
break;
case 常量值:
break;
default:
break;
}
注意事项:
- 多个case后的常量值不可以重复
- switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是long类型
引用类型:String常量串、枚举类型
- 不能做Switch参数的数据类型有哪些?
float、double、long、boolean
但是 int 、String 、 char 可以作为参数类型
六、方法的使用
方法的组成:修饰符 + 返回值类型 + 方法名 + 参数类型 + 方法体
public static int add(int a, int b) {
return a + b;
}
注意:
- 在java当中,方法必须写在类当中
- 在java当中,方法不能嵌套定义
- 在java当中,没有方法声明一说
- 方法的命名采用小驼峰的形式
- 类的命名采用大驼峰的形式
实参和形参的关系
实参名和形参名可以相同,也可以不同,但必须一一对应。传值调用时,实参值传递给形参,形参只是实参的一份临时拷贝,改变形参的值并不会影响实参的值。
方法的重载
重载条件:
- 方法名称相同
- 返回值可以一样,可以不一样 (与返回值类型无关)
- 参数列表不同【参数数据类型、参数个数、顺序】
方法的重写
重写条件:
4. 方法名称相同
5. 返回值相同,如果返回值是父子关系,也可以认为是重写的
6. 参数列表相同【 参数数据类型、参数个数、顺序】
7. 父类被static、private修饰的方法、构造方法都不能被重写
重载与重写的区别
相同点:方法名一定相同,不能修改
七、数组的定义和使用
什么是数组?------ 储存相同数据类型元素的一个连续的集合
数组的定义
int[] array = {1,2,3,4,5};//静态初始化,省略了int[]
int[] array = new int[5];//动态初始化,"[]"中必须确定大小
int[] array = new int[]{1,2,3,4,5};//静态初始化,"[]"中不能写任何的数字
数据类型未初始化时的默认值
遍历数组
- f o r for for循环遍历
int[] array = {1,2,3,4,5,6,7};
for(int i = 0; i < array.length; i++) {
System.out.print(x + " ");
}
- f o r − e a c h for-each for−each循环遍历
int[] array = {1,2,3,4,5,6,7};
for(int x : array) {
System.out.print(x);
}
f o r − e a c h for-each for−each循环 没有下标的参与,只是单纯的完整打印,不能根据下标进行选择性部分打印
数组是引用数据类型
八、内存的划分
现在只简单关心 Java虚拟机栈 和 堆 这两块空间
数组的简单堆栈图
变量
a
a
a 和 变量
a
r
r
a
y
array
array 都是局部变量,都在栈上开辟内存空间
分析下面这串代码,得出数组array1 和 array2 的内部元素的最终数值
public static void main(String[] args) {
int[] array1 = new int[3];
array1[0] = 10;
array1[1] = 20;
array1[2] = 30;
int[] array2 = new int[]{1,2,3,4,5};
array2[0] = 100;
array2[1] = 200;
array1 = array2;
array1[2] = 300;
array1[3] = 400;
array2[4] = 500;
}
堆栈图
分析下面这串代码,分别调用func1 和 func2 最终结果为?
public static void main(String[] args) {
int[] array = {10,20,30};
func1(array);
//func2(array);
System.out.println(array);
}
public static void func1(int[] array) {
array = new int[]{1,2,3};
}
public static void func2(int[] array) {
array[0] = 199;
}
调用func1 的堆栈图
调用func2 的堆栈图
九、常用的数组操作方法
- 获取数组长度
int len = array.length;
- 数组转为字符串
int[] array = {1,2,3,4};
int ret = Arrays.toString(array);
转为字符串后的输出形式:
[1,2,3,4]
-
数组排序
import java.until.Arrays;
Arrays.sort(array);
注意是升序
-
数组拷贝
把array1 从0下标开始,复制给array2, array2 从 0下标 开始接收,复制长度为4。
System.arraycopy(array1, 0, array2, 0, 4);
- 数组填充
Arrays.fill(数组名,值) 作用:将值全部填充到数组
Array.fill(数组名,开始下标,结束下标,值) 作用:从 开始下标 到 结束下标 将值部分填入数组
int[] array1 = new int[5];
Arrays.fill(array1, 3);
//5个元素全为3
int[] array2 = new int[5];
Arrays.fill(array2, 1, 3, 6);
//下标1 到 下标2 的值全部填充为6,其余值为0;
注意这里的下标部分填充为前闭后开,[1,3)
- 数组比较
Arrays.equals(数组1, 数组2)
Arrays.equals(array1, array2);
注意此方法的返回值为boolean 类型,比较的是数组是否相等,并不是比较大小,返回值为true/false
- 数组查找
该方法用于查找一个数组中是否存在某个元素,语法如下:
Arrays.binarySearch(数组,指定元素)
Arrays.binarySearch(数组,开始位置,结束位置,指定元素) 【在指定下标位置内查找指定元素】
注意:该方法要求数组是有序的;返回值为int类型,返回的是该指定元素所在的下标