java入门(二)
方法
方法的定义
java的方法和python中的方法一样,类似于C的函数。放啊包含一个方法头和一个方法体。下面是一个方法的所有部分:
修饰符 返回值类型 方法名(参数类型 参数){
...
方法体
...
return 返回值;
}
- 修饰符:是可选的,告诉编译器如何调用该方法。定义了该方法的访问类型。
- 返回值类型:不需要返回值时,使用void。
- 方法名:注意小驼峰命名规则。
- 参数类型:在定义的时候需要说明形参类型,调用的时候无需标注,直接赋值实参。
- 方法体:描述功能
方法的调用。
同类直接调用;
跨类调用方法:对象名.方法名(实参列表)
java支持两种调用方法的方式,根据方法是否有返回值来选择。
int larger = max(30,40); //有返回值
System.out.println("Hello,World!"); //无返回值
方法调用还和修饰符相关,后面需要一个单独章节记笔记。
方法的重载
重载就是在一个类中,有相同的函数名称,但形参不同的函数。
方法重载的规则:
- 方法名称必须相同。
- 参数列表必须不同(个数不同,类型不同或参数排列顺序不同等)。
- 方法的返回类型可以相同也可以不同。
- 仅仅返回类型不同不足以成为方法的重载。
实现理论:方法名称相同时,编译器会根据调用方法的参数个数、参数类型等去逐个匹配,以选择对应的方法,如果匹配失败,则编译器报错。
可变参数
这个和python的*args
相似,可传入不定项个参数,定义方法为在最后一个形参前面加...
,多个参数值被当作数组传入。
void foo(String... args);
void foo(String[] args);
注:可变参数只能有一个,并且必须定义在所有形参最后面。
递归
没啥好记的,数据结构里面递归更多。
数组
数组的定义
数组是相同类型数据的有序集合,每一个数据称作一个数组元素,可通过下标进行访问,具有先后顺序。
数组声明创建
首先必须声明数组变量,才能在程序中使用。
dataType[] arrayRefVar; //首选方法
dataType arrayRefVar[]; //效果相同但不是首选方法
实例
int[] nums;
int nums[]; //这种定义方式与C和C++相同
java语言使用new操作符来创建数组,语法如下:
dataType[] arrayRefVar = new dataType[arraySize];
实例
int[] nums = new int[10];
数组索引从0开始,获取数组长度使用数组属性array.length
三种初始化
静态初始化
int[] a = {1,2,3};
动态初始化
int[] a = new int[10];
a[0] = 100;
默认初始化(知道有这个就行)
四个基本特点
- 数组的长度是固定的,被创建后不可改变(python列表可以添加元素)。
- 其元素必须是相同类型,不允许出现混合类型。
- 数组中的元素可以是任意类型,包括基本类型和引用类型。
- 数组变量属引用类型,数组也可以看作对象,数组中的元素相当于对象的成员变量,存放在堆中。
数组边界
下标合法区间:[0, length-1],越界则会报错。
for-each循环
for-each循环是对一个序列中的元素进行迭代,而不使用循环计数器,其语法为:
for (type variable_name:array){
}
实例
int nums[] = {1,2,3};
for (int x:nums){
System.out.println(x);
}
二维数组
记住定义方法 int[][] nums
,用法与C一样。
Arrays类
数组的工具类java.util.Arrays。数组对象本身没有方法可以调用,但API中提供了Arrays类供我们使用。Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用。(注意:是”不用“而不是”不能“)
具有以下常用功能:
- 给数组赋值:通过fill方法。
- 对数组排序:通过sort方法,按升序。
- 比较数组:通过equals方法比较数组中元素值是否相等。
- 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找。