方法概念
1.方法的概念:
方法(method)是将具有独立功能的代码组织成一个整体,使其具有特殊功能的代码集.
注意: 方法必须先创建后使用,该过程就是方法的定义
方法创建后并不是直接可以运行的,需要主动调用才执行,这一过程就是方法的调用
方法的定义和调用
1.方法定义
方法的格式: []在笔记中表示可以有,可以没有
访问修饰符 [其他修饰符] 返回值类型 方法名(参数列表){
方法体;
[return 数据;]
}
说明: 访问修饰符: public公共的 private私有的 protected受保护的 默认
返回值类型: 当该方法执行后,需要返回一个结果,这时候就需要设置一个返回值类型,规定方法返回数据的类型
返回值类型可以是任意类型, void表示无返回值类型(不需要返回数据)
return: 当有返回值类型的时候,需要使用return返回一个对应类型的数据,同时方法结束
参数列表: 参数列表中所有的参数都叫做形参,参数的个数0--n个
形参: 形式参数,只需要声明变量即可,用于等待方法被调用的时候,接收传递进来的实际参数(真实数据)
实参:调用方法时,为形参传递的真实数据,且数据的类型要与形参类型保持一致
访问修饰符
Java中访问修饰符 public protected 默认 private设定程序被访问的范围
修饰符 | 本类 | 同一个包 | 不同包子类 | 任何地方 |
---|---|---|---|---|
private | √ | |||
默认(可以不写) | √ | √ | ||
protected | √ | √ | √ | |
public | √ | √ | √ | √ |
public class Person {
String name;
String sex;
int age;
String address;
//无参无返回值方法
public void eat() {
System.out.println(name+"在食堂吃了一顿大餐");
}
//带参无返回值方法
public void he(String drink) {
System.out.println("今天天气太热"+name+"喝了一瓶冰镇"+drink);
}
//带参带返回值方法
public String print(String job) {
return "我的姓名叫:"+name+", 性别为:"+sex+", 年龄为:"+age+", 出生地址:"+address+", 现在的职业为:"+job;
}
}
2.方法的调用
public class PersonDemo {
public static void main(String[] args) {
Person npy = new Person();
//初始化
npy.name = "陈慧敏";
npy.sex = "男";
npy.age = 26;
npy.address = "香港";
//调用无参无返回值方法
npy.eat();
//调用带参无返回值方法
//旺仔牛奶为String类型的实际参数,赋值给调用方法he的形参,类型保持一致
npy.he("旺仔牛奶");
//调用带参带返回值方法
//该方法已调用,但方法中没有输出语句,是返回字符串
//带返回值的方法一般需要使用对应类型的变量接收返回的结果
String str = npy.print("明星");
System.out.println(str);
}
}
3.方法的参数传递
方法的参数传递,采用的是值传递方式
将实际参数的副本复制给形式参数,本身不受影响.
值传递过程中分为: 基本数据类型传递, 引用数据类型传递
使用基本数据类型传递
public class SiZeOpratorDemo {
/*
* 请输入第一个数,请输入第二个数,输入运算符 多个形参之间使用逗号隔开 做4个带参,带返回值的方法,进行四则运算
*/
public static void main(String[] args) {
// 因为main是static,只能调用static修饰的方法
Scanner in = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = in.nextInt();
System.out.println("请输入第二个数:");
int num2 = in.nextInt();
int result = 0,flag=0;
String oper = "";
do {
flag=0;
System.out.println("请输入运算符");
oper = in.next();
switch (oper) {
case "+":
result = jia(num1, num2);
break;
case "-":
result = jian(num1,num2);
break;
case "*":
result = cheng(num1, num2);
break;
case "/":
result = chu(num1, num2);
break;
default:
System.out.println("对不起,您的运算符有误,请重新输入!");
flag = 1;
}
}while(flag!=0);
System.out.println(num1+ oper+ num2 +" = " +result );
}
public static int jia(int num1,int num2) {
return num1 + num2;
}
public static int jian(int num1,int num2) {
return num1 - num2;
}
public static int cheng(int num1,int num2) {
return num1 * num2;
}
//方法调用参数传递为值传递,将基本数据类型的值,复制给了形参,所以该方法对形参做任何操作,实际参数不受影响
public static int chu(int num1,int num2) {
Scanner in = new Scanner(System.in);
do {
if(num2==0) {
System.out.println("除数不能为0,请重新输入:");
num2 = in.nextInt();
}else {
break;
}
}while(true);
return num1 / num2;
}
}
引用数据类型传递
public class Operator {
int num1;
int num2;
String oper; //运算符
int result;
}
public class SiZeOpratorDemo1 {
/*
* 请输入第一个数,请输入第二个数,输入运算符 多个形参之间使用逗号隔开 做4个带参,带返回值的方法,进行四则运算
*/
public static void main(String[] args) {
// 因为main是static,只能调用static修饰的方法
Scanner in = new Scanner(System.in);
System.out.println("请输入第一个数:");
int num1 = in.nextInt();
System.out.println("请输入第二个数:");
int num2 = in.nextInt();
System.out.println("请输入运算符");
String op = in.next();
int flag=0;
Operator oper = new Operator();
oper.num1 = num1;
oper.num2 = num2;
oper.oper = op;
yunSuan(oper);
System.out.println(oper.num1+ oper.oper+ oper.num2 +" = " +oper.result );
}
/*方法调用参数传递为值传递,引用数据传递的是地址值,实际两个对象,指向的同一空间
当形参被改变时,实际操作的还是原空间数据
*/
public static void yunSuan(Operator oper) {
Scanner in = new Scanner(System.in);
//调用Operator对象中的oper运算符属性
switch (oper.oper) {
case "+":
oper.result = oper.num1 + oper.num2;
break;
case "-":
oper.result = oper.num1 - oper.num2;
break;
case "*":
oper.result = oper.num1 * oper.num2;
break;
case "/":
do {
if(oper.num2==0) {
System.out.println("除数不能为0,请重新输入:");
oper.num2 = in.nextInt();
}else {
break;
}
}while(true);
oper.result = oper.num1 / oper.num2;
break;
}
}
}
方法设计的应用场景
在何时需要使用形参?在何时需要返回方法结果?
在方法设计时,如果方法执行体中,有不确定数据,这些数据通过参数传递的方式从外部进入到方法, 也就是说形参是方法入口
在设计方法时,如果该方法执行后,需要返回结果,那么这时候就需要设置返回值类型,并给出返回值.
方法重载
概念:在一个类中,多个方法,方法名相同,参数列表不同(参数的类型,个数),与返回值无关
public class Person {
String name;
String sex;
int age;
String job;
//方法重载: 同一个类中,方法名相同参数列表不同,与返回值无关
public void eat() {
System.out.println(name+"在食堂吃了一顿大餐..");
}
//同名同参数方法是不允许存在
public void eat(String food) {
System.out.println(name+"今天有钱了,在食堂点了一个小炒"+food);
}
//参数列表中的形参,跟名称没关系,只对应类型和个数
public void eat(String address,String food) {
System.out.println(name+"今天心情不错,去"+address+"点了一个"+food);
}
public void eat(String food,int weight) {
System.out.println(name+"今天发财了,去711点了"+food+"重量为:"+weight+"斤");
}
public void drink(String fruit) {
System.out.println("将"+fruit+"榨汁,榨出了"+fruit+"汁");
}
public void read() {
System.out.println("好好学习,天天向上");
}
}