声明:本节内容为本人观看“遇见狂神说”Java教学视频后总结,仅供学习参考。
1.Java中什么叫做方法
- 方法就是实现某一个功能的一堆代码,当我们想要使用这个功能时,直接调用方法即可。而不需要每次都去写那一推代码。
- 方法包含在类或者对象中
- 方法的命名规则:我们命名方法时一般使用首字母小写的驼峰原则。
2.方法的定义及调用
使用方法的注意点:
- 方法中的return语句,不仅仅会返回方法值,还会结束方法。即方法体中return后面的代码不会执行。
public static void main
也是一个方法,不过是Java中定义好的。它是Java程序执行的入口- 形参与实参:形参是在定义方法是设置的,相当于占位符。实参是在调用方法时设置的,会按照定义的顺序去替换掉形参,并参与计算。
package com.oy.methods;
public class Demo1 {
public static void main(String[] args) {
// 调用方法
/**
* 10,20: 调用方法的实际参数:相当于使用10和20替代a和b在方法中的位置。
*/
int max = myMax(10,5);
System.out.println(max);
}
//定义方法:比较两数大小的方法,并返回较大的数。如果两数相等返回0
/**
*
* public static:方法的修饰符
* int:方法的返回值类型。如果无返回值则为void
* myMax:方法名
* int a, int b:方法的形式参数,相当于占位符。表示调用该方法需要传入两个int类型的参数
*/
public static int myMax(int a, int b){
if (a==b){
return 0;
}else if (a>b){
return a;
}else {
return b;
}
}
}
运行结果如下:
10
3.方法的重载
package com.oy.methods;
public class Demo1 {
public static void main(String[] args) {
// 调用方法
/**
* 10,20: 调用方法的实际参数:相当于使用10和20替代a和b在方法中的位置。
*/
double max = myMax(10.5,20.5);
System.out.println(max);
}
//定义方法:比较两数大小的方法,并返回较大的数。如果两数相等返回0
/**
*
* public static:方法的修饰符
* int:方法的返回值类型。如果无返回值则为void
* myMax:方法名
* int a, int b:方法的形式参数,相当于占位符。表示调用该方法需要传入两个int类型的参数
*/
public static int myMax(int a, int b){
if (a==b){
return 0;
}else if (a>b){
return a;
}else {
return b;
}
}
// 重载myMax方法,支持浮点数类型
public static double myMax(double a, double b){
if (a==b){
return 0;
}else if (a>b){
return a;
}else {
return b;
}
}
}
运行结果如下:
20.5
4.命令行传参
5.可变参数
- 可变参数可以接收多个实参,只要满足对应的数据类型即可
- 可变参数在方法中是一个数组。
package com.oy.methods;
public class Demo2 {
public static void main(String[] args) {
//调用方法
myMax(10,30,5,9,45,21,99,58);
}
//定义方法:比较多个数字大小,并输出最大值
public static void myMax(int... num){
if (num.length==0){
System.out.println("No argument passed");
}
int result = num[0];
for (int i = 1; i < num.length; i++) {
if (num[i] > result){
result = num[i];
}
}
System.out.println("Max is "+result);
}
}
运行效果如下:
Max is 99
6.方法的递归
- 递归必须要有递归头,也就是递归结束的边界。否则将会陷入死循环
- 递归要有递归体,也就是调用自身的条件,否则递归就没有意义了
- 递归深度不能太深,否则会占用大量内存资源。也就是Java栈不能堆积太多
package com.oy.methods;
public class Demo3 {
public static void main(String[] args) {
//调用方法
int res = jieCheng(5);
System.out.println(res);
}
//定义一个方法,实现阶乘的计算。
//例如:5!=5*4*3*2*1
public static int jieCheng(int num){
//递归头:结束调用自身
if (num==1){
return 1;
}
//递归体:调用自身的条件
else {
return num * jieCheng(num-1);
}
}
}
运行结果如下:
120
7.静态方法和非静态方法
- 在创建方法时如果有修饰符static,则这个方法是静态方法。否则为非静态方法
- 静态方法:类本身可以直接调用的方法,也可以使用类的实例化对象来调用。
- 非静态方法:类本身不能直接调用,必须使用类的实例化对象来调用。
- 注意:对于类的静态方法,它是类所有对象共有的。最好通过类本身去调用,而不是通过类实例对象去调用
package com.oy.methods;
public class Demo5 {
public static void main(String[] args) {
int result1 = Demo5.add1(2,3); // 可以直接使用类本身来调用静态方法
System.out.println(result1);
int result2 = new Demo5().add1(2,3);// 也可以通过类的实例对象来调用静态方法。不推荐
System.out.println(result2);
int result3 = new Demo5().add2(2,3); // 只能通过类的实例对象来调用非静态方法
System.out.println(result3);
}
// 定义一个静态方法
public static int add1(int a,int b){
return a+b;
}
// 定义一个非静态方法
public int add2(int a, int b){
return a+b;
}
}
运行结果如下:
5
5
5
8.值传递与引用传递
- 值传递:指将变量作为参数传递给方法时,是将变量的值传递给方法,而不是变量的本身。
- 引用传递:指将变量作为参数传递给方法时,是将变量本身传递给方法。
- Java中都是值传递
package com.oy.methods;
public class Demo6 {
public static void main(String[] args) {
int a = 1;
Demo6.change(a);
System.out.println(a); // a的值还是1,因为调用change方法时,只是将变量a的值传递给了change方法,变量a并没有被改变
}
public static void change(int a){
a = 10;
}
}
如果将值为一个对象的变量传递给方法,会怎样呢?
package com.oy.methods;
public class Demo6 {
public static void main(String[] args) {
Person person = new Person();
Demo6.change(person);
System.out.println(person.name); //person.name变为了haha,因为变量person的值就是一个对象。而该对象的name属性在change方法中被改变了
}
public static void change(Person a){
a.name = "haha";
}
}
class Person{
String name = "hehe";
}