1.方法的概念及使用????????
1.1什么是方法(method)呢????
方法就是一个代码的片段,相当于C语言的"函数"。方法的存在的意义如下????????
1.是能够模块化的组织代码
2.做到代码被重复使用,一份代码可以在多个位置使用
3.让代码更好的理解更简单
4.直接调用现有的方法开发,不重复的造*
1.2方法的定义
【访问修饰限定符】 返回值类型 方法名(形式参数列表){
方法体;
}
示例1????????
写一个函数,判断是否为闰年
public class newSotr {
public static void main(String[] args) {
System.out.println(isLeapYear(2000));
}
public static boolean isLeapYear(int year){
if((year%4==0&&year%100!=0)||(year%400==0)){
return true;
}else {
return false;
}
}
}
注意????????
1.修饰符:现阶段直接使用public static 固定搭配
2.返回值类型:如果方法有返回值,返回值类型必须要与返回的实体类型一致,如果没有返回值,必须写成void
3.方法名:必须采用小驼峰命名
4.参数列表:如果方法没有参数,()中什么都不写,如果有参数,需指定参数类型,多个参数之间使用逗号隔开
5.方法体:方法内部要执行的语句
6.在java中,方法必须写在类当中
7.在java中,方法不能嵌套定义
8.在java中,没有方法声明
1.3方法调用的执行过程
注意????????
1.定义方法的时候,不会执行方法的代码,只有调用的时候才会执行
2.一个方法可以多次调用
示例:计算1!+2!+3!+4!+5!
public class newSotr {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=5;i++){
sum+=fac(i);
}
System.out.println("sum="+sum);
}
public static int fac(int n){
System.out.println("计算n的阶乘中n!="+n);
int result=1;
for(int i=1;i<=n;i++){
result*=i;
}
return result;
}
}
1.4实参和形参的关系????????????
方法的形参相当于数学函数中的自变量
形参的名字可以随意取(形参和实参的作用域不一样),对方法都没有任何影响,形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值
例如
public class newSotr {
public static void main(String[] args) {
System.out.println(add(2,3));
}
public static int add(int a,int b){
return a+b;
}
}
注意????????:在java中,实参的值永远都是拷贝到形参中,形参和实参本质是二个实体
例如:交换变量
public class newSotr {
public static void main(String[] args) {
int a=10;
int b=20;
swap(a,b);
System.out.println("main:a="+a+" b="+b);
}
public static void swap(int x,int y){
int tmp=x;
x=y;
y=tmp;
System.out.println("swap:x="+x+" y="+y);
}
}
由上图可以看到,在函数swap中的变量进行了交换,但是在main方法中a和b的方法没有进行交换成功
原因如下????????
实参a和b是main方法中的二个变量,其空间在main方法的栈(一块特殊的空间)中,而形参x和y是swap方法中的两个变量,x和y的空间在swap方法运行时的栈,因此:实参a和b与形参x和y 是两个没有任何关联性的变量在swap方法调用时,只是将实参a和b中的值拷贝了一份传递给了形参x和y,因此对形参x与y操作不会对实参a和b产生任何的影响。
注意????????:对于基础类型来说,形参相当于实参的拷贝.即传值调用
解决方法:传引用类型的参数????(????参考数组)
public class newSotr {
public static void main(String[] args) {
int[]arr={10,20};
swap(arr);
System.out.println("arr[0]="+arr[0]+" arr[1]="+arr[1]);
}
public static void swap(int[]arr){
int tmp=arr[0];
arr[0]=arr[1];
arr[1]=tmp;
}
}
1.5没有返回值的方法????????
简单介绍
主要看自己的需求,看有返回值方便还是没有返回方便但是,没有返回值的时候,返回值类型必须是void
2.方法重载????????
2.1.方法重载概念
在java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了
public class newSotr {
public static void main(String[] args) {
add(1,2);//调用add(int,int);
add(1.5,1.5);//调用add(double,double);
add(1.5,2.5,3.5);//调用add(double,double,double)
}
public static int add(int x,int y){
return x+y;
}
public static double add (double x,double y){
return x+y;
}
public static double add(double x,double y,double z){
return x+y+z;
}
}
注意????????
1.方法名必须相同
2.参数列表必须不同(参数列表个数不同、参数列表类型不同、参数的次序必须不同)
3.与返回值类型是否相同无关
4.编译器在编译代码时,会对实参类型进行推演,根据推演的结果来确定调用那种方法
2.2方法的签名✨
简单介绍:(简单理解就好,后期介绍)
在同一个作用域中不能定义两个相同名称的标识符。
方法签名即:经过编译器编译修改后方法最终的名字。具体方式:方法全路径名+参数列表+返回值列表,构成方法完整的名字。
方法签名中的一些特殊符号
3.递归☀☀
3.1递归的概念✨✨
一个方法在执行过程中调用自身,就称为“递推”
递归相当于数学上的“数学归纳法”,有一个起始条件,然后有一个递推公式
递归的必要条件????????
1.将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同
2递归出口
示例????????
public class newSotr {
public static void main(String[] args) {
int n=5;
int ret=factor(n);
System.out.println("ret="+ret);
}
public static int factor(int n){
if(n==1){
return 1;
}
return n*factor(n-1);
}
}
3.2递归执行过程分析
递归的程序的的执行过程不容易理解,希望一下分析朋友们可以更好的理解????????
示例:递归求N的阶乘
public class newSotr {
public static void main(String[] args) {
int n=5;
int ret=factor(n);
System.out.println("ret="+ret);
}
public static int factor(int n){
System.out.println("函数开始,n="+n);
if(n==1){
System.out.println("函数结束,n=1 ret=1");
return 1;
}
int ret=n*factor(n-1);
System.out.println("函数结束,n="+n+" ret="+ret);
return ret;
}
}
由上图可以看到,递归是先递再归的过程,你看懂了吗????
3.3递归练习
示例1,顺序打印(1234打印出1 2 3 4)
public class Print {
public static void main(String[] args) {
int num=1234;
print(num);
}
public static void print(int num){
if(num>9){
print(num/10);
}
System.out.print(num%10+" ");
}
}
示例2,输入一个数,打印组成它组成数字之和(1234输出10)
public class Print {
public static void main(String[] args) {
int num=1234;
int ret=sum(num);
System.out.println(ret);
}
public static int sum(int num){
if(num<10){
return num;
}
return num%10+sum(num/10);
}
}
结束????????
方法的概念与使用你学会了吗?????????希望您有所帮助????
欣赏一下美景????????