一、函数
(1)定义:定义在类中,有特定功能的一段小程序。
(2)函数的格式:
修饰符 返回值类型 函数名(形参类型 形式参数1,形参类型 形式参数2...)
{
函数体;
reutrn 返回值;
}
A:修饰符public static
B:返回值类型程序最终结果的数据类型
C:函数名其实就是函数的名称,方便我们调用。
D:参数
形参类型数据类型
形式参数就是接收实际参数的变量
实际参数就是实际参与操作的变量(常量)
E:函数体就是按照正常的逻辑完成功能的代码。
F:返回值就是程序的最终结果
G:reutrn 返回值哪里调用程序,return就把结果返回到哪里。
(3)函数的特点:
A:函数与函数之间是平级关系。不能在函数中定义函数。
B:运行特点函数只有被调用才执行。
(4)函数的调用
A:有明确返回值
a:单独调用 一般没有意义。
b:输出调用 但是如果想拿结果继续操作,就有问题了。所以,不好。
c:赋值调用 推荐方式。
B:void类型
单独调用
下面是例子说明:
public class HanShuDemo {
//默认被jvm调用
public static void main(String[] args) {
int x=3;
int y=7;
//函数调用
show(x,y); //单独调用
System.out.println(show(x,y)); //输出调用
int z=show(x,y); //复制调用
System.out.println(z);
}
//写一个函数,求两个数的和 (函数之间是平级关系)
public static int show(int a,int b){
int c=a+b;
//返回值
return c;
}
}
下面是示例应用:求两个整数的最大值
public class HanShuDemo
//默认被jvm调用
public static void main(String[] args) {
int x=3;
int y=7;
//函数调用
System.out.println("最大值是"+max(x,y)); //输出调用
}
//写一个函数,求两个数的最大值 (函数之间是平级关系)
public static int max(int a,int b){
if(a>b){
return a;
}
else{
return b;
}
}
}
(5)函数的重
载A:函数名相同,参数列表不同(个数不同,对应的类型不同)。
与返回值类型无关。
B:举例:
public static int sum(int a,int b){...}
public static int sum(int a,int b,int c){...}
public static int sum(float a,float b){...}
二、数组
(1)概念
(1)数组是存储同一种类型的多个元素的容器。
(2)好处:数组中的元素会被自动从0开始编号,方便我们获取。
(2)一维数组的格式
格式:
A:int[] arr = new int[3];
B:int arr[] = new int[3];
C:int[] arr = new int[]{1,2,3};
D:int[] arr = {1,2,3};
其中:new是用来在堆内存中产生一个容器实体。
数组也被称为引用数据类型。在内存中的分配如下图:
注:1、System.out.println(arr);得到的结果是一个哈希值,也叫地址值。
2、数组在堆内存开辟空间后,就有默认的初始化值。如:int默认0;boolean默认false。
内存小知识:
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:1、数组和对象,通过new建立的实例都存放在堆内存中。
2、每一个实体都有内存地址值。
3、实体中的变量都有默认初始化值。
4、实体不在被使用,会在不确定的时间内被垃圾回收器回收。
(3)数组操作常见问题
1、数组脚标越界异常(ArrayIndexOutOfBoundsException)。例:
int[] arr = new int[2];
System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。
2、空指针异常(NullPointerException)。例:
int[]arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。
(4)数组中的数组(多维数组)
下面主要讲二维数组。
格式:A:int[][] arr = new int[3][2];
B:int[][] arr = new int[3][];
C:int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
二维数组在内存中的分配情况示例:
(5)数组常见操作
1、数组遍历:
获取数组中的所有元素
下面是数组遍历求和的应用
public class ShuZuDemo {
public static void main(String[] args) {
int[] in={34,54,32,56};
int sum=0;
//下面实现数组的遍历
for (int i : in) { //增强for
//求和
sum+=i;
}
System.out.println(sum);
}
}
2、数组的查找
下面是查找的实现程序
public class ShuZuDemo {
public static void main(String[] args) {
int[] in={34,54,32,56};
int ii=564;
int sum=-1;
//遍历数组
for(int x=0;x<in.length;x++){
//判断并输出
if(in[x]==ii){
sum=x;
System.out.println(sum);
}
}
if(sum==-1){
System.out.println("要查找的数据不存在");
}
}
}
3、 数组排序:
常见的排序方式:冒泡排序和选择排序。在Java已经定义好了一种排序方式,在开发使用中,直接调用即可。排序的方式有很多,其中最快的排序方式为希尔排序。
下面是选择和冒泡两种排序方式的程序:
选择排序:
public class ShuZuDemo {
public static void main(String[] args) {
int[] in={34,54,32,56,54};
int sum=-1;
//遍历数组
for(int x=0;x<in.length;x++){
for(int y=0;y<in.length;y++){
//元素比较,大的放后面
if(in[x]<in[y]){
sum=in[x];
in[x]=in[y];
in[y]=sum;
}
}
}
//遍历数组
for (int i : in) {
System.out.println(i);
}
}
}
冒泡排序:
public class ShuZuDemo {
public static void main(String[] args) {
int[] in={34,54,32,56,54};
int sum=-1;
//遍历数组
for(int x=0;x<in.length-1;x++){
for(int y=0;y<in.length-1-x;y++){
//元素比较,大的放后面
if(in[y]>in[y+1]){
sum=in[y];
in[y]=in[y+1];
in[y+1]=sum;
}
}
}
//遍历数组
for (int i : in) {
System.out.println(i);
}
}
}