JAVA方法
一、什么是方法?
方法是语句的集合,执行某种功能
用来解决一类问题的有步骤排序的语句组合
方法包含于类和对象中
在程序里创建方法,用于在其他地方被引用
二、方法的定义
方法相当于一个函数,一段用来实现特定功能的片段
方法的语法结构:
public static void main(String[] args){};
第一段:修饰符 用来告诉程序如何调用该方法 声明了该方法的访问类型
第二段:返回值类型 有些方法会返回数据 有些方法没有返回值 则为void
第三段:方法名 与参数列表共同称为方法签名
圆括号内:形式参数 包括参数的类型 执行顺序以及参数的个数 是用来被调用的
花括号内:方法体 包含具体的语句 定义方法的功能
return 方法体最后的结束语句 加上存储数据的变量 返回给主方法执行
三、方法的调用
调用方法的基本语法:
对象名.方法名(实参列表)
例:method.method(a : 1,b : 2);
方法的类型:
-
静态方法
-
非静态方法
静态方法:
方法的修饰符中含有static 可直接在main方法内调用
使用语法:类名.方法名调用即可
可以直接调用的原因:含static修饰符的方法是和类一起加载的,所以在同一片段中可以直接调用方法
非静态方法:
方法没有修饰符在需要调用时 必须先创建一个对象 才能调用
不可以直接调用的原因:
非静态的方法是针对与对象的 必须先创建类的对象名以此作为调用非静态方法的入口才能进行调用
四、方法的参数传递
在调用方法时,向形参传递参数的过程称为参数传递。
编程语言传递数据的方式有两种:值传递和引用传递。
值传递:在Java中,基本数据类型创建变量时,直接将变量的值存在了内存当中。当使用基本类型作为方法的实参时,即使将实参传递给方法的形参也不会改变实参的数据。
引用传递:在Java中,当方法内创建引用变量指向方法外变量的地址时,方法内的变量则会改变方法外的变量。
方法返回值类型的两种情况:
-
当方法有返回值时 输入每个实参的值代入方法
int number = method(a:1,b:2);
-
当方法的返回值为void时 只需调用输出语句
System.out.println("Hello world!");
五、命令行传递参数
在IDEA编程中调用方法来实现某些算法时,需要通过main方法向方法传递参数实现。
如果不从IDEA内部传递也可以从命令标识符进行传递
案例代码:
传递main方法内的字符串数组类型
用命令行指令传参 不从程序内进行传递
在案例Demo4类文件的路径下打开命令行窗口
找到程序用命令行编译成源代码
运行程序的步骤:
-
切换到IDEA项目根目录下,直接运行程序会找不到类文件
-
必须要输入完整的路径一直到.Java文件
-
运行程序
传递参数:
六、方法的重载
在一个程序里,可以使方法名相同,参数列表不同的函数存在,便可以实现传递数量不同类型不同的参数
满足下列条件才是重载,某些条件不满足则会报错:
1.方法名相同
2.形参的个数、类型和顺序不相同
3.返回值不同
在两个相同的方法中,程序会根据参数的类型、数量和排列顺序自动匹配适合的方法运行,一个程序里可以拥有多个相同结构的方法。
举例:
主方法内的输出语句为:
则会自动匹配含有两个参数的方法
public static int max(int a,int b){};
若输出语句为:
就会运行形参有三个参数的方法
public static double max(int a,int b,int c){};
七、可变参数
当遇到需要传递任意数量的参数时,使用重载方法会使程序变得繁琐复杂
便可以用到可变参数
语法格式:
public static int Method(int... a){};
语法规范:
-
一个方法只能写一个可变参数
-
调用可变参数的类型只能定义一种
-
可变参数只能写在普通参数的最后
六、递归
在常规程序中若需要调用一个方法是在主方法内调用方法,当需要解决一些复杂的运算,便可以使用递归的原理来编写。
前提条件为计算基数较小的值,传递值过大会影响程序的性能或导致计算机的内存崩溃
递归的原理:一个方法内返回值为方法本身,若没有终止运行的条件,方法将会循环调用自己,就像for循环不写布尔表达式一样
递归的结构:
-
递归头:在什么时候不调用自身,边界条件
-
递归体:什么时候调用自身,递归公式
若没有定义条件,程序进入死循环直到内存崩溃
递归案例:计算1加到1000的结果是多少
编程思路:
1 + 2 + 3 + …… + 1000 = ?
把1000放在最前面 1放在最后
1000 + 999 + 998 + …… + 1
当加到1时,程序结束
设传递值为n,当n = 1000
得出1000 + (1000 - 1)
当n = 999 得999 + (999 - 1)
找到规律后便可以推导出程序
return n + f(n - 1);
这段递归语句并没有在程序里呈现计算过程
通过以下简易的内存分析图解释: