Demo1,java方法的介绍
/**
* 什么是方法?
* 方法就是把一堆需要反复执行的业务逻辑代码封装起来,如果程序需要使用这段代码的时候,我们直接调用方法即可,
* 就不需要返回的去写重复的代码了
* 好处:
* 提高代码的重用性,维护性,可读性好,执行效率
*
* 可以把方法比喻一个榨汁机
* 材料:水果
* 产出物:果汁
*
* 映射到java程序中:
* 材料(参数):进入方法的数据
* 产出物(返回值):方法根据参数处理后的结果
*
* 怎么定义一个方法?
* 访问修饰符 [static] 方法的返回值类型 方法名(形参列表){
* 逻辑代码块;
* return 返回值;
*
* }
*
* 1.访问修饰符(权限修饰符)
* public:公共的,在当前项目下的任何地方都可以访问
* private:私有的,能在当前类下面访问
* protected:受保护的,在同一个包或者其他派生类中可以访问
* default:缺省,只能在当前包下面进行访问
*
* 2.方法的返回值类型:方法执行完成以后最终产生的结果是什么类型的
* 3.方法名
* 自己定义的名字,首字母小写,驼峰式命名法 getStudentById
* 4.形参列表 :由多个形参组成的列表 (int a,int b)
* 形参:用于接收调用者实际传过来的数据
*
* 5.return:
* (1)把方法最终处理的结果返回给调用者 (2)结束当前方法
* 注意:返回的数据类型必须要和返回值类型一致
*/
public class Demo1 {
//一个静态方法里面只能调用静态方法或者静态变量
public static void main(String[] args) {
//调用方法
//定义一个变量去介绍方法的返回结果
//注意:变量的数据类型必须和方法的返回值类型一致
int result=sum(10,20);//实参
System.out.println("a+b的和为:"+result);
}
/**
* 计算a+b的和
* 返回值类型:int
* 方法名
* 形参: int a int b
*/
public static int sum(int a,int b){//形参
System.out.println("方法执行了");
int result=a+b;
return result;
}
}
Demo2,无返回值的方法
/**
* 无返回值的方法:
* 方法执行一些操作,没有把执行结果返回给调用者,只是执行了方法的方法体
*
* 访问修饰符 [static] void 方法名(形参列表){
* 方法体;
* //return;可写可不写 ,一般不写
* }
*
*/
public class Demo2 {
public static void main(String[] args) {
studyHard();
}
//打印10遍好好学习
public static void studyHard(){
for(int i=1;i<=10;i++){
System.out.println("好好学习"+i);
}
}
}
Demo3,方法中参数传递,基本数据类型(包括String)和引用数据类型(不包括String)的区别
/**
* 参数传递:调用者在调用方法的时候,向方法内传入数据的一系列动作
* 形参:在【定义】方法时候,写在小括号里面的参数,作用接受调用者传递的数据
* public static int sum(int a,int b){//形参
* 实参:在【调用】方法的时候,真正传递到方法的数据
* int result=sum(10,20);//实参
*
* 参数传递,有两种类型
* 基本数据类型(以及String):形参的操作不会影响实际的参数
* 引用数据类型:(除了String以后):形参的操作会影响实际参数
*
*
*/
public class Demo3 {
public static void main(String[] args) {
int a=10;
int b=20;
System.out.println("a="+a);//10
System.out.println("b="+b);//20
//调用方法
change(a, b);
System.out.println("===================");
System.out.println("a="+a);//10
System.out.println("b="+b);//20
}
//定义一个方法,把形参扩大10倍
public static void change(int a,int b){
a*=10;
b*=10;
System.out.println("a="+a);//100
System.out.println("b="+b);//200
}
}
Demo4,参数传递,引用数据类型(String除外)
public class Demo4 {
public static void main(String[] args) {
int[] arr={10,20};
System.out.println(arr[0]);//10
System.out.println(arr[1]);//20
System.out.println("=========");
change(arr);
System.out.println("============");
System.out.println(arr[0]);//100
System.out.println(arr[1]);//200
}
public static void change(int[] arr){
arr[0]*=10;
arr[1]*=10;
System.out.println(arr[0]);//100
System.out.println(arr[1]);//200
}
}
Demo5,Demo6,方法重载
public class Demo5 {
public static void main(String[] args) {
int sum1=sumTwo(10, 20);
int sum2=sumThree(10, 20, 30);
System.out.println("sum1="+sum1);
System.out.println("sum2="+sum2);
}
//计算a+b的和
public static int sumTwo(int a,int b){
return a+b;
}
//计算a+b+c的和
public static int sumThree(int a,int b,int c){
return a+b+c;
}
//...
}
/**
* 对于类似累加的操作,因为我形参列表不同,所以我定义了多个方法名
* 弊端:
* 1.麻烦
* 2.代表调用者需要记住多个方法名,如果方法名过多,有可能出现调用错误的情况
*
* 可不可把这些类似操作起一个一个方法名可以吗,
* 可以,使用方法重载
*
* 什么是方法重载呢?
* 方法名必须相同,参数列表必须不相同
* 什么是参数列表:
* 1.参数列表的个数不同
* 2.参数类型不同
* 3.参数类型的顺序不同
* 注意:方法重载和返回值类型无关
*/
public class Demo6 {
public static void main(String[] args) {
int num1=sum(10,20);
int num2=sum(10,20,30);
System.out.println("num1="+num1);
System.out.println("num2="+num2);
}
//计算a+b的和
public static int sum(int a,int b){
return a+b;
}
// public static int sum(int c,int d){//不是方法重载 和参数名没有任何关系,参数只是一个名字
// return c+d;
// }
// public static double sum(int c,int d){//不是方法重载
// return c+d;
// }
public static double sum(int a,double b){//正确
return a+b;
}
public static double sum(double a,int b){//是
return a+b;
}
// public static double sum(int b,double a){//不是
return a+b;
// }
//计算a+b+c的和
public static int sum(int a,int b,int c){
return a+b+c;
}
}