Java从菜鸟到高手②

目录

1.输入输出

1.1输出

1.2.输入

1.3.scan.nextLine()和scan.next()的区别

2.方法的使用

2.1.方法的定义

2.2.形参和实参的关系

2.3.方法的重载

2.4.方法签名

3.递归

3.1.递归有递和归两个部分组成

4.数组

4.1.数组的定义

4.2.将数组转化为字符串

[4.3深入理解int[ ] arr = {1, 2, 3, 4}](#4.3深入理解int[ ] arr = {1, 2, 3, 4})

4.4.总结

4.5.数组的传参与返回

4.6.数组的销毁

5.二维数组

5.1.二维数组的定义

5.2.深度理解arr[2][3]

5.3.不规则数组


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.数组的定义

数组的三种定义方法:

java 复制代码
int[] 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.数组是在堆区保存的

java 复制代码
int 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}
java 复制代码
int[] 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];

//可以指定每一行几个元素
相关推荐
Theodore_10223 小时前
4 设计模式原则之接口隔离原则
java·开发语言·设计模式·java-ee·接口隔离原则·javaee
冰帝海岸4 小时前
01-spring security认证笔记
java·笔记·spring
世间万物皆对象5 小时前
Spring Boot核心概念:日志管理
java·spring boot·单元测试
没书读了5 小时前
ssm框架-spring-spring声明式事务
java·数据库·spring
小二·6 小时前
java基础面试题笔记(基础篇)
java·笔记·python
开心工作室_kaic6 小时前
ssm161基于web的资源共享平台的共享与开发+jsp(论文+源码)_kaic
java·开发语言·前端
懒洋洋大魔王6 小时前
RocketMQ的使⽤
java·rocketmq·java-rocketmq
武子康6 小时前
Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据仓库·sql·mybatis·springboot·springcloud
转世成为计算机大神7 小时前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_327342737 小时前
Java实现离线身份证号码OCR识别
java·开发语言