目录
1.方法概念
方法是用来执行特定功能的代码片段。
方法作用:代码变简洁,代码可以复用
public class Test01_Method{
public static void main(String[] args){
/*
//需求1:计算100+200的和。
int a=100;
int b=200;
int sum=a+b;
System.out.println(sum);
//需求2:计算150+250的和。
int a1=150;
int b1=250;
int sum1=a1+b1;
System.out.println(sum1);
//需求3:计算650+450的和。
int a2=150;
int b2=250;
int sum2=a2+b2;
System.out.println(sum2);
*/
/*
缺点:代码高度重复了---》复用性差,不够简洁,
*/
//需求3:计算23+45的和。 68
add(23,45);
add(100,200);
add(150,250);
add(650,450);
}
//定义方法:功能就是实现两个整数的和
public static void add(int x,int y){
int a=x;
int b=y;
int sum=a+b;
System.out.println(sum);
}
}
2.语法结构
[修饰符列表] 返回值类型 方法名([形参列表]){
方法体;//是由代码块组成的。
}
说明:
1.[]里面的内容的不是必须,目前修饰符列表的内容先默认写成public static
2.返回值类型
返回值--》返回的结果
1)有返回值
基本数据类型byte shrot int long float double boolean char
引用数据类型(String))
2)没有返回值
void--->空的--
3.方法名---》首字母小写,后面遵循驼峰标志
4.形参列表:形式参数列表
(int a,int b,boolean b.....)
5.方法体:----》返回值类型联系起来
return 返回
1)对于有返回值:方法体的最后一定要有一个带数据的返回语句: return 数值;
return 数值;---》这里面数值的类型一定要和你返回值类型匹配的。
public static int add(){
....
byte a;
return "a";
}
2)没有有返回值:方法体的最后一定可以有一个返回语句: return;(可以省略不写)
return 数值;---》这里面数值的类型一定要和你返回值类型匹配的。
public static void add(){
....
byte a;
return;
}
//定义方法:功能就是实现两个整数的和
public static void add(int x,int y){
int a=x;
int b=y;
int sum=a+b;
System.out.println(sum);
}
2.1注意点
方法定义在哪?---》定义类体里面
方法不能嵌套,方法和方法永远都是并列的关系(main方法也是方法是程序的入口)--->方法内部可以继续来调其它方法
main方法是特殊的方法,是专门有JVM来调用
方法不会自动执行的--》要想执行,只能去调用
2.2如何来调用方法
public static void add(int x,int y)
Test02_Method.add(3,4);//方法调用
int x,int y--->形参列表
3,4--------》实参列表
public class Test02_Method{
//定义方法:功能就是实现两个整数的和
public static void add(int x,int y){
int a=x;
int b=y;
int sum=a+b;
//int c=11/0;//Exception in thread "main" java.lang.ArithmeticException: / by zero
System.out.println(sum);
}
//特殊的方法,是程序的入口---》main方法是JVM调
public static void main(String[] args){
System.out.println("main进来了,开始执行");
//方法的调用
Test02_Method.add(3,4);
add(3,40);//当调用的add方法就在当前类下的时候,类名可以省略。
}
/*错误-->方法不能嵌套
public static void m1(){
public static void m2()
}
*/
}
3.方法的调用
1.定义方法打印3行四列的长方形。
2.定义方法判断一个数的奇偶性,在屏幕上打印奇数还是偶数
public static void pdJiOu(int num)
3.定义一个方法,求两个数小数的和并打印。
定义一个方法,求两个数小数的和并返回。
4.定义一个方法判断一个数是否为素数,如果是素数返回true ,不是素数返回false
public class Test03_Method{
public static void main(String[] args){
//无参无返回值
Test03_Method.printLX();
//有参无返回值
//pdJiOu(3.14);//不兼容的类型: 从double转换到int可能会有损失
pdJiOu(23);
addXiaoshu(3.14,3.5f);//错误: 不兼容的类型: 从double转换到float可能会有损失
//System.out.println(addXiaoshu(3.14,3.5f));// 错误: 此处不允许使用 '空' 类型
//有参有返回值的
double dd=addXiaoshu1(3.14,3.5f);
System.out.println("调用有参有返回值的==1="+dd);
System.out.println("调用有参有返回值的==2="+addXiaoshu1(3.14,3.5f));
isSu(97);
boolean b=isSu(97);
System.out.println("调用有参有返回值的==3="+b);
}
//定义一个方法判断一个整数是否为素数,如果是素数返回true ,不是素数返回false
public static boolean isSu(int x){
boolean b=true;
for(int i=2;i<x/2;i++){
if(x%i==0){
b=false;
}
}
return b;
}
//求两个数小数的和并并返回。
public static double addXiaoshu1(double x,float y){
System.out.println(x+y);//错误: 无法访问的语句
return x+y;
}
//求两个数小数的和并打印。
public static void addXiaoshu(double x,float y){
System.out.println(x+y);
}
//定义菱形 有参无返回值
public static void pdJiOu(int num){
if(num%2==0){
System.out.println(num+"是偶数");
}else{
System.out.println(num+"是奇数");
}
}
//定义菱形 有参无返回值
public static void printLX(){
for(int i=0;i<3;i++){
for(int j=0;j<4;j++){
System.out.print("*");
}
System.out.println();
}
}
}
4.定义方法来实现两个数的交换。
public class Test04_Method{
public static void main(String[] args){
int a=10;
int b=20;
System.out.println("a="+a+";b="+b);//a=10;b=20
jiaohuan(a,b);
System.out.println("a="+a+";b="+b);//a=10;b=20
}
//定义方法来实现两个数的交换
public static void jiaohuan(int a,int b){
int tem=a;
a=b;
b=tem;
System.out.println("方法内的a="+a+";b="+b);//a=20;b=10
m1();
}
public static void m1(){
}
}
5.方法的重载
5.1方法的重载需要满足的条件
1.都在同一个类里面
2.方法名相同
3.形参列表不同
形参的个数不同
形参的类型不同
形参的顺序不同
5.2编译器如何来识别方法是不是同一个?
1)方法名
2)形参列表
3)和返回值类型没有任何关系
重载--》调用过程中关注就是: 方法名([实参列表])
******重载可以理解编译时的多态
5.3重载应用
有类似功能的时候用方法的重载
调用方法的时候不需要记里面的具体形参,只需要记住一个方法名就可以了
面积周长 Mian
public class Test05_Method{
public static void main(String[] args){
add(3,4);
add(5,7);
add(3.14,3.14);
add();
add(4,5,6);
add(4,5.6);
add(4.7,5);
}
//两个整数相加方法
public static void add(){
System.out.println("调用的是无参的add方法");
}
public static void add(int a,int b){
System.out.println("两个整数相加和"+(a+b));
}
public static void add(int a,int b,int c){
System.out.println("三个整数相加和"+(a+b+c));
}
public static void add(double a,double b){
System.out.println("两个小数相加和"+(a+b));
}
public static void add(int a,double b){
System.out.println("整数和小数相加和"+(a+b));
}
public static void add(double a,int b){
System.out.println("小数和整数相加和"+(a+b));
}
/*编译的时候错误: 已在类 Test05_Method中定义了方法 add(double,int)*/
/*public static void add(double x,int y){
System.out.println("小数和整数相加和"+(a+b));
}*/
/*错误: 已在类 Test05_Method中定义了方法 add(double,int)*/
public static int add(double a,int b){
System.out.println("小数和整数相加和"+(a+b));
return (int)(a+b);
}
}
6.方法的递归
方法:实现6!=6*5*4*3*2*1累积
方法一:
//方法:实现6!=6*5*4*3*2*1累积 1+2+3+....+6累加
public static int JieCheng1(int n){
int sum=1;
for(int i=1;i<=n;i++){
sum*=i;
}
return sum;
}
方法二:递归
6!=1*2*3*4*5*6
6!=5!*6=f(5)*6
5!=4!*5=f(4)*5
.....
2!=f(2-1)*2
n!=f(n)=f(n-1)*n=
public static int JieCheng(int n){
System.out.println("jiecheng方法进来了");
if(n==1){
return 1;
}
int res=JieCheng(n-1)*n;
System.out.println("jiecheng方法出来了");
return res;
}
递归:自己调自己,但有结束方法的条件,否则造成死循环--》内存溢出,程序崩了
写递归的时候的bug
Exception in thread "main" java.lang.StackOverflowError
--StackOverflowError栈内存溢出错误