目录
1.3.scan.nextLine()和scan.next()的区别
[4.3深入理解int[ ] arr = {1, 2, 3, 4}](#4.3深入理解int[ ] arr = {1, 2, 3, 4})
1.输入输出
1.1输出
int a = 10;
String arr = "hello bit";
//输出并换行
System.out.println(a);
System.out.println(arr);
System.out.println(arr + a);
//输出不换行
System.out.print(a);
//格式化输出
System.out.printf("%d\n", a);
1.2.输入
Scanner scan = new Scanner(System.in);
int a = scan.nextInt();
double b = scan.nextDouble();
1.3.scan.nextLine()和scan.next()的区别
Scanner scan = new Scanner(System.in);
String arr1 = scan.nextLine();
String arr = scan.next();
1.scan.next():读取字符串,遇到空格即停
2.scan.nextLine():读取一行字符串,但会读取上一个输入的回车,所以当你输入的数据有很多不同类型的时候,优先去处理字符串的输入,或在使用前加:scan.next();
3.Scanner scan = new Scanner(System.in);
String arr1 = scan.nextLine();
4.Scanner:类型 scan:变量名(任取) = new Scanner(System.in);
String arr1 = scan(已取好的变量名).nextLine();
2.方法的使用
2.1.方法的定义
public static void func(int a) {
//方法体
}
public static:固定搭配+void:函数返回值+func:函数名(参数列表){函数体
}
2.1.1.方法的命名采用小驼峰,类名采用大驼峰
2.1.2.Java没有方法声明这一说,方法定义在main函数的前面后面都可以
2.2.形参和实参的关系
形参是实参的临时拷贝,形参的改变不会影响实参,Java不能获取栈上的地址
2.3.方法的重载
①:方法名必须一样 ②:参数列表必须不一样(参数个数,参数类型,顺序)③:与返回值无关(若仅返回值不同,编译报错)
好处:不用记那么多的方法名
2.4.方法签名
2.4.1.方法签名即经编译器修改后方法最终的名字,正是因为方法签名,所以在同一个类中可以定义多个方法名相同的方法
2.4.2.方法签名的方法:方法全名路径+参数列表+返回值类型
3.递归
3.1.递归有递和归两个部分组成
3.2.特点:①.每次递的时候这个方法只执行了一部分 ②:归的时候,会把当前方法未执行的部分执行完毕 ③:递的次数和归的次数一样
3.3.如何递归:①.寻找递推公式 ②:找起始条件(终止条件)
4.数组
4.1.数组的定义
数组的三种定义方法:
javaint[] arr = {1, 2, 3}; int[] arr1 = new int[]{1, 2, 3};//静态初始化 //动态初始化,没有本质上的区别,只有写法上的不同,内存分配位置都为堆区 int[] arr2 = new int[5];//没有赋初始值,Java默认为0 arr2 = new int[]{1, 2, 3, 4, 5}; int[] arr3 = new int[5]; //错误 arr3 = {1, 2, 3, 4, 5}; //正确 arr3 = new int[]{1, 2, 3, 4, 5};
4.1.1.若数组未初始化时,默认值即为初始值,int类型默认值是0,boolen默认值是false
4.1.2.数组是在堆区保存的
javaint a = 10; double b = 5.2; int[] arr = {1, 2, 3}
a,b是基本数据类型定义的变量,因此其空间中保存的就是其初始化的值
arr是引用数据类型定义的变量/数组类型的引用变量,其内部保存的是对象在堆空间中的地址
4.2.将数组转化为字符串
java
int[] arr = {1, 2, 3, 4};
String array = Arrays.toString(arr);
System.out.println(array);
4.3深入理解int[ ] arr = {1, 2, 3, 4}
javaint[] arr1 = {1, 2, 3 4}; int[] arr2 = {1, 2, 3, 4, 5}; arr2 = arr1;//此时arr2也指向arr1指向的对象{1,2,3,4} //{1, 2, 3, 4, 5}没有人指向了,此时就被JVM自动回收了,虽在堆区,但无需手动free
1.一个引用不能同时指向多个对象
2.一个对象可以同时被多个引用指向
3.int[ ] arr = null,代表这个引用不指向任何对象,null在Java中表示空引用,和0号地址没有任何关系
4.若一个数组没有引用变量指向了,此时就被JVM自动回收了,虽在堆区,但无需手动free
4.4.总结
所谓的引用,本质上只是存了一个地址,Java将数组设定为引用类型这样的话后续数组传参只是将数组的地址传入到函数形参中,避免对整个数组的拷贝(若数组较长,拷贝开销大)
4.5.数组的传参与返回
4.5.1.数组的传参
1.Java中,数组传参实际穿的是地址(即数组的引用),通过修改形参可以达到改变实参的效果
java
public static void fun(int[] arr) {
arr[0] = 99;//arr = {99, 2, 3}
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
fun(arr);
System.out.println(Arrays.toString(arr));
}
java
public static void fun(int[] arr) {
arr = new int[]{4, 5, 6};
}
public static void main(String[] args) {
int[] arr = {1, 2, 3};
fun(arr);
System.out.println(Arrays.toString(arr));
}
此时,修改形参arr = new int[ ] = {4, 5, 6}并不会修改实参的值,而是相当于在堆区重新开辟了一块空间来保存4,5,6,,并将地址给arr保存
2.Java中数组可以作为返回值,实际返回的是数组在堆区的地址
4.6.数组的销毁
1.在Java中,堆空间的数据是自动销毁的,当没有变量引用对象时,这个对象就会被自动释放
2.堆是随着程序开始时而创建,不一定随着程序的退出而销毁,堆中的数据只要有变量引用,就不会被销毁
5.二维数组
5.1.二维数组的定义
java
int[][] arr = {{1,2,3},{4,5,6}};
int[][] arr1 = new int[][]{{1,2,3},{4,5,6}};
int[][] arr3;
arr3 = new int[][]{{1,2,3},{4,5,6}};
行:arr.lenth 列:arr[1].lenth
5.2.深度理解arr[2][3]
5.3.不规则数组
不规则的数组:列可以省略,行不能省略
java
int[][] arr = new int[2][];
arr[0] = new int[3];
arr[1] = new int[4];
//可以指定每一行几个元素