目录
解释:例如main方法,求和方法等等。可以重复使用。
方法的作用:
1、提高代码的复用性。可以将一个大的项目进行拆分,然后将整体功能拆分成各个小功能部分,单独负责该部分的方法功能的实现即可。
2、程序的逻辑更加清晰。
案例:
创造一个求和的功能。
代码如下:
public class MethodTest1 {
public static void main(String[] args){
//调用sum函数使用
int c1 = sum(10,20);
System.out.println(c1);
int c2 = sum(30,40);
System.out.println(c2);
}
//创造求和的功能,注意创建的新的功能不能方法main方法里面,两者是相互冲突的。
public static int sum(int a , int b){
int c = a + b;
return c;
}
}
结果:
注意:
1、新创建的是个新的方法,和main方法两者是相互冲突的,所以需要放到main方法外面。放在main方法里面会出现下面的错误。
2、注意在main中需要调用 所新创建的方法,按照自己定义的格式进行调用。
学习流程:
一、方法定义、调用
1.1方法完整的定义形式、调用
以下为方法的两种格式:
第一种是常规的有参数有返回值的格式。
1.2方法其他的定义形式、调用
第二种是无参数无返回值的格式。
需要注意的是:如果是void的返回值类型的方法定义,此时创建的新的方法内部不需要有return返回值的。
public class MethodTest2 {
public static void main(String[] args){
print();
System.out.println("------------");
print();
}
public static void print(){
for (int i = 0; i < 3; i++) {
System.out.println("Hello World!");
}
}
}
二、方法使用的常见问题
1、方法编写顺序无所谓。
自己新创建的方法,放在main的上面和下面的位置没有影响。
2、方法与方法之间是平级关系,不能嵌套定义。即不能在一个方法的内部又有另外的一个方法的存在。
3、方法的返回值类型为void(无返回值),方法内测不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部使用return返回对应的数据类型。
具体的例子看上面一中的情况。
4、return语句下面,不能编写代码,因为永远执行不到,属于无效的代码。
5、方法不调用就不执行,调用时必须严格和方法设定的参数匹配,即内部的参数情况。例如:有参数、参数的数据类型对应:整型对整型,浮点型对浮点型等等、无参数等。
6、
6-1、有返回值的方法调用时可以选择定义变量接收返回的结果。
例如:
该部分sum方法的结果,可以用rs这个变量来接收返回的结果。
6-2、直接输出调用,甚至直接调用。例如:返回值直接作为输出的结果。
有返回结果,但是没有定义新的变量接收,会导致结果不能用显示。
6-3、无返回值方法的只能直接调用一下。
总结:
三、方法案例
3.1定义方法的技巧、计算1-n的和返回
注意:关注的这两点很重要。是否有返回值,以及其的类型 ;是否接收形参。
案例:
分析:
参考案例代码:
个人敲写代码:
public class Methodexample {
public static void main(String[] args){
System.out.println("1-10的和:" + sum(10));
print();
System.out.println("1-100的和:" + sum(100));
}
public static int sum(int n){
int sum = 0;
for (int i = 1; i <=n ; i++) {
sum += i;
}
return sum;
}
public static void print(){
System.out.println("---------------------");
}
}
3.2判断整数是奇数还是偶数
案例:
案例分析:
注意:根据实际的情况判断方法的编写方式很重要。例如:是否有形参以及是否有返回值的返回,以及返回值的类型。
参考代码:
个人代码参考:
public class Methodexample2 {
public static void main(String[] args){
check(100);
print();
check(101);
}
//根据实际的情况判断是选取是否有形参和是否有返回值(返回值类型)
public static void check(int number){
if(number %2 == 0){
System.out.println(number + "是偶数");
}
else {
System.out.println(number + "是奇数");
}
}
public static void print(){
System.out.println("-------------------");
}
}
结果:
3.3数组求最值案例改写方法形式
案例:
案例分析:根据需要查看的两点分析。是否有返回值及其类型;是否有形参输入。
参考代码:
个人代码如下:
public class Methodexample3 {
public static void main(String[] args){
int[] arry = {88,22,33,44,55,66,77};
//接收最大值的返回数据
int maxi = Getarray(arry);
System.out.println(maxi);
}
//需要返回数据值,并且参数是数组,参数位置定义数组如下所示。
public static int Getarray(int[] arr){
int max =arr[0];
for (int i = 1; i < arr.length; i++) {
if(arr[i] > max){
max = arr[i];
}
}
return max;
}
}
四、方法调用的内存图
方法区运行区域在:栈内存里面。比如我们在main方法中定义的变量,也是在栈内存当中。
具体的分析:
第一步:class文件放在方法区。void main和int add
第二步:提取main中的内容放到栈内存当中,然后接着读取int add中的内容进行
第三步:在栈内存中进行int add函数的调用,将结果的内容反馈到main中的sum处理后的结果当中。
第四步:main中的int sum使用完之后,会退出栈内存。
总结:实际上内存的分配也就是根据main方法进行处理运行,一步一步的向下进行。每个方法都在方法区,其他的内容在栈内存当中,使用时占用内存,使用结束后退出。
五、 方法的参数传递机制
5.1基本类型的参数传递
解释:实参传递给形参的是真实的值。 如果在调用的方法比如说上面的change方法中对a进行数值变化,a的实际结果并不会发生改变。结合下列所示:对于下面的例子中a的值在change方法中进行了a值变化处理,但是在main中的a值并不会发生改变,change方法只针对调用的哪一个语句有效。
5.2引用类型的参数传递
该部分是涉及到数组的传递。该部分实参传递给形参的是地址,地址前后不会发生变化。如果此时发生5.1上述的情况,变量的值是会发生改变的。具体的例子如下面所示:传递的是地址,是直接将地址上对应的数据进行了改变,所以对于原来的数组就会发生了改变。和数值之间的传递变换是不一样的。
5.3两部分的总结
六、方法的参数传递案例
6.1打印数组内容
案例:
案例分析:
1、需要有输入的参数,返回值类型不需要设置,因为案例要求我们能够将数组的内容进行输出就好了,并不需要有值进行返回输出。
个人代码如下:
public class Test1 {
public static void main(String[] args){
int[] datas = {11,22,33,44};
GetArray(datas);
print();
int[] scores = {66,77,88,99};
GetArray(scores);
print();
int[] name = {};
GetArray(name);
print();
}
public static void GetArray(int[] arr){
System.out.print("[");
for (int i = 0; i <arr.length ; i++) {
if(arr != null && arr.length > 0){
if(i == arr.length-1){
System.out.print(arr[i]);
}
else{
System.out.print(arr[i] + ",");
}
}
}
System.out.println("]");
}
public static void print(){
System.out.println("----------------------");
}
}
参考代码:
6.2从数组中查询元素的索引返回
案例:
分析:
代码如下:
public class Test2 {
public static void main(String[] args){
int[] arr ={11,22,33,44,55,66,77,88,99};
//接收来自创建的方法的返回值
int Index =searchIndex(arr,66);
//将返回值进行输入
System.out.println("输入的索引:" + Index);
}
public static int searchIndex(int[] arr,int data){
for (int i = 0; i < arr.length; i++) {
if(arr[i] == data){
return i;
}
}
return -1;
}
}
参考代码:
6.3比较两个数组内容是否一样
案例:
案列分析:
代码如下:
public class Test3 {
public static void main(String[] args){
int[] arr1 = {111,22,33};
int[] arr2 = {11,22,33};
System.out.println(compare(arr1,arr2));
}
public static boolean compare(int[] arr1,int[] arr2){
//判断数组的长度来决定数组之间是否相等
if(arr1.length ==arr2.length){
//数组内容进行二次判断,出现不相等则是有问题返回数组值为false
for (int i = 0; i < arr1.length; i++) {
if(arr1[i] !=arr2[i]){
return false;
}
//数组内容进行二次判断,出现相等则是有问题返回数组值为true
}
return true;
}
//数组长度不相等则返回的数组类型为false。
else{
return false;
}
}
}
结果:
参考代码:
七、方法重载
7.1方法重载的形式、作用
方法重载的含义:
用途:
对于方法重载的例子如下:
同一个方法名称相同,但是其形参的内容可以不同,就可以造成方法重载的作用。
public class MethodDemo1 {
public static void main(String[] args){
fire();
fire("米国");
fire("岛国",1000);
}
public static void fire(){
System.out.println("发生一枚导弹!");
}
public static void fire(String location){
System.out.println("发射一枚导弹飞向" + location);
}
public static void fire(String location,int data){
System.out.println("发射" + data +"枚导弹飞向" + location);
}
}
参考代码如下:
方法重载+方法嵌套:
方法重载的好处作用:
7.2方法重载的识别形式
练习判断那些是方法重载:
八、补充知识:单独使用return关键字
作用:就是从新创建的方法当中,跳出来。中断该方法继续向后执行,但不影响main函数后面的程序内容。