方法
-
也称函数,过程,是语句的集合,他们在一起执行一个功能。
-
方法包含于类或对象中
-
方法在程序中被创建,在其他地方被引用
作用
- 用于封装一段特定独立的业务逻辑功能
- 可以反复多次调用
- 减少代码重复,有利于代码维护
方法的设计原则
一个方法只能完成一个功能(原子性)
例子:
现在需要写一个关于计算两数和的方法,那在该方法中只能有a+b之类的东西出现,不可能出现a*b或者a/b之类的东西
方法的命名规则
-
一定要满足标识符的定义(由数字,字母,下划线,$(美元符),不能以数字开头,不能是关键字,区分大小写)
-
首字母小写,驼峰命名(如果一个方法由多个单词组成,则第一个单词为小写,后面每个单词的首字母都大写) 如:addDemo
方法的定义
方法头{
方法体;
}
//即
修饰符 返回类型(当没有返回值类型时,就是void) 方法名 (参数类型){
语句块;
}
//即
public int addNumbers(int num1, int num2) {
int sum = num1 + num2;
return sum;/*当有返回值类型时,则需要在语句块尾中使用return语句返回结果*/
}
/*形式参数(形参):用于接收外界输入的数据(没有实际意义)
实参:调用方法是传递给方法的数*/
方法的调用
自己定义的方法是没有办法直接运行的,需要添加main(程序入口方法中才可以运行),直接在main方法写对象名.方法名(实参列表)
调用方式
- 无返回值(void):方法名(有参传参)
如果方法返回值时void,方法调用一定是一条语句
public class 调用方法 {
public static void main(String[] args) {
y();//调用方法,结果输出:方法01
y1(8,"三国演义");//调用方法,输出结果:这是第12部电影电影名是:三国演义
}
//自定义一个无参无返回值方法
public static void y() {
System.out.println("方法01");
}
//自定义一个有参无返回值方法
public static void y1(int i,String i1){
int b;
b=i+4;
System.out.println("这是第"+b+"部电影"+"电影名是:"+i1);
}
}
- 有返回值:数据类型 变量 = 方法名(有参传参)
当有返回值时,方法调用通常被当作一个值
import java.util.Arrays;
import java.util.Random;
public class 调用方法 {
/*注意:计算机只认识main方法里面的代码,
因此需要让计算机识别自定义的方法则需要进行调用*/
public static void main(String[] args) {
int b=num(3,7);
System.out.println(b);
int []ss=s();
System.out.println(Arrays.toString(ss));//将数组转换为字符串,可以快速的输出数组的内容
}
//自定义一个有参有返回值的方法
public static int num(int d, int d1){
int num1=d+d1;
System.out.println(num1);
return num1;
//当自定义的方法为有返回值时,必须用return返回一个值,且返回值类型必须一致
}
//自定义一个无参有返回值的方法
public static int[] s(){
Random s1=new Random();
int s2[]=new int[5];
for (int i=0;i<s2.length;i++){
s2[i]=s1.nextInt(100);
}
return s2;
}
}
形参和实参
是函数调用时涉及的两个概念,主要用于传递参数值
**形参:**形式参数,定义方法时的参数为形参
**实参:**实际参数,调用方法时的参数为实参
方法的重载(overloading)
规则
- 发生在同一个类中,方法名相同,参数列表不同(个数不同、类型不同、参数列表顺序不同等只需要满足至少一个条件即可构成方法的重载)
- 编译器在编译时会根据方法的签名自动绑定方法
- 注意:返回值并不影响方法的重载
- 重载也是同一个类中多态的体现
好处
让代码根据灵活性,某些时候我们的形式参数无法满足当前运行条件
package day06;
import java.util.Arrays;
import java.util.Random;
//发生在同一个类中,方法名相同,参数列表不同
public class 方法的重载 {
public static void y1(int i,String i1){
int b;
b=i+4;
System.out.println("这是第"+b+"部电影"+"电影名是:"+i1);
}
public static int y1(int d, int d1){
int num1=d+d1;
System.out.println(num1);
return num1;
}
public static int[] y1(){
Random s1=new Random();
int s2[]=new int[5];
for (int i=0;i<s2.length;i++){
s2[i]=s1.nextInt(100);
}
return s2;
}
//以上方法名都是y1,参数列表不同
//注意:重载与返回值的类型无关
public static void main(String[] args) {
y1(8,"三国演义");
int b=y1(3,7);
System.out.println(b);
int []ss=y1();
System.out.println(Arrays.toString(ss));
}
}
public static void main(String[] args) {
acc(27.532,33);//调用自定义方法重载
acc(261,165.267,27726);//调用方法重载1
acc(43.23,324.23);//调用方法重载2
acc(36,374.32);//调用方法重载3
}
public static double acc (double a,double b){
double c=a+b;
System.out\.println(c);
return c;
}
//方法重载1:方法名相同,参数个数不同
public static double acc (double a,double b,double d){
double c=a+b;
System.out.println(c);
return c;
}
//方法重载2:方法名相同,数据类型不同
public static double acc (double a,int b){
double c=a+b;
System.out.println(c);
return c;//返回类型和自定义方法不同,但是也不影响重载
}
//方法重载3:方法名相同,参数顺序不同,相对于方法2来看,唯一不同就在于double a变成了int a,int b变成了double b
public static double acc (int a,double b) {
double c = a + b;
System.out.println(c);
return c;
}
}
Debug调试工具
-
添加断点:点击你想添加断点那行的前面
-
Debug运行程序,程序会自动进入第1个断点处,暂停
-
F7:逐步调试(会进入到方法中)
F8:逐过程调试(不会进入到方法中)
F9:直接跳到下一个断点处,若后面没有断点了,则调试结束
单词
1)Student:学生
2)className:班级名称
3)stuId:学号
4)study:学习
5)play:玩
6)another:另一个
7)Car:小汽车
8)brand:品牌
9)color:颜色
10)price:价格
11)start:开始、启动
12)run:跑
13)stop:停止