方法
方法:Java的方法有点类似于C语言的函数,使用方法可以让代码读起来简单一点、可以直接调用方法不用多次写重复的代码;
方法的定义:修饰符 返回值类型 方法名 (参数类型 参数名){方法体; return 返回值; };
修饰符:public static;
返回值类型:必须和返回值一致,不一致就会报错;如果没有返回值,返回值类型一定是void;
方法名:使用小驼峰命名法,方法名得“知名其义”;
参数:与调用的实参一致;如果没有就不用写;
参数名:没有硬性要求;
重点:方法必须在所调用的类里面;在Java中没有顺序可以写主方法前也可以后;方法不能嵌套定义但是能嵌套调用;没有方法声明这种说法。
方法的执行过程:调用方法--->传递参数--->找到方法地址--->执行被调方法的方法体--->被调方法结束返回--->回到主调方法继续往下执行;
方法的实参和形参:形参不改变实参的值,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。
下面是通过方法交换两个数的值,实参a和b中的值拷贝了一份传递给了形参a和b,形参的数交换不改变实参,最终结果没有交换。
如果想要交换的话可以传引用类型参数(数组),创建一个两个数的数组,将数组作为实参传址给形参,这是形参和实参同时指同一个数组,这样改变形参就能改变实参。
public static void toswap(int a, int b){//这里的a和b是形参 int temp = a; a = b; b = temp; }public static void main(String[] args) { int a = 5; int b = 10; System.out.println("交换前:a = "+a+", b = "+b);//a = 5, b = 10 toswap(a,b);//这里的a和b是实参 System.out.println("交换后:a = "+a+", b = "+b);//a = 5, b = 10}
方法重载
方法重载:方法名相同;参数列表必须不同(个数、类型、次序) ;返回类型无关(只是返回类型不一样会报错);
public static int add(int a, int b){ return a + b;}public static double add(double x, double y){ return x + y;}public static void main(String[] args) { double c = 10.3; double d = 20.7; int a = 5; int b = 10; System.out.println("int类型的两个数相加:"+add(a, b)); System.out.println("double类型的两个数相加:"+add(c, d));}
方法中不能定义两个名字一样的变量,那为什么类中就 可以定义方法名相同的方法呢?
原因是:方法全路径名+参数列表+返回值类型,构成方法完整的名字。
递归
递归:在一个方法中不断的自己调用自己,前提是有一个终止条件不然就成为一个死递归;
public static int fac1(int n){ if (n == 1){ return 1; }else{ return n * fac1(n-1); }}public static void main4(String[] args) { int n = 5; System.out.println("递归求n = "+n+"的阶乘:"+fac1(n));}
数组
数组:数组是存储相同类型的元素,在内存中是顺序连续存放的;数组是有限个类型相同的变量的集合,并通过数组名和索引来引用。
元素:数组中的每个变量称为数组的分量,也称为数组的元素或下标变量。
索引:用于区分数组的各个元素的数字编号称为下标或索引。在大多数编程语言中,数组索引从0开始。
类型:数组中的元素必须具有相同的数据类型,如整数、浮点数、字符等。
数组的创建:
1). 在Java中数组类型是需要带上[](例:int []),后面加数组名,new int[10]意思就是新建一个int类型且长度是10的数组,所以想要什么样的数组就new+类型[长度],这个长度也可以是变量,不一定是常量;
2). 也可以放在创建和数据赋值一起,[]放数组名前后都可以,放前一般是Java,放后一般是C语言;
int[] arr1 = new int[10]; //这样创建的数组元素默认全部为0int[] arr2 = {1, 2, 3, 4, 5, 6, 7, 8, 9};
下面是数组创建的正错示范:
int[] arr1;array1 = new int[10];//可以int[] arr2;array2 = new int[]{10, 20, 30};//可以int[] arr3;array3 = {1, 2, 3};//不可以省略格式new int[]
引用类型
之前讲了基本数据类型没有讲引用数据类型,现在就来说说引用数据类型。它一般称为对象的引用,存储的是对象所在的空间地址的,而不是存储对象本身,但是可以通过引用变量操作对象。
引用变量:就是一个变量存储的数据是地址;当传参是引用变量是,形参就可以改变实参的值;
在说这个引用类型要知道的几个点:
1).局部变量的使用周期是在它使用的方法中进行;
2).如果在堆区的对象不被使用时,JVM就会回收这个对象;
3).对象一定在堆区,但是引用不一定在栈区;
认识null
在Java中null时“空引用”的意思 ,不指向任何对象。所以当定义一个数组却不知道指向哪一个对象时就可以用null(不指向对象);当对null进行访问时则会出现编译错误。
数组的应用场景
保存数组数据
在Java中有特有的将数组转成字符串【Arrays.toString(数组)】 ,在使用这个Arrays类时需要导包才可以使用,这个类使用起来很方便,不用向C语言数组一样for循环输出。
当一个引用变量赋值给另一个引用变量时,赋值是将引用变量的里的指向对象的地址赋值给另一个引用变量,这时两个引用变量都指向同一个对象,所以这两个引用变量都可以改变对象的值。
二维数组
二维数组本质上还是一维数组,画图看看为什么说是一维数组:
二维数组不能省略行(与C语言相反),假如只写行会出现什么问题呢,我们看看: