1 面向过程编程
面向过程编程:面向过程是一种编程思想。是一般性思考解决问题的方法和思路,明显过程编程中很重要的技术支撑就是函数。把一个大的系统拆分成若干子模块,一个模块由多个函数构成,函数就是一组功能代码的封装,在面向过程中叫函数,面向对象中叫方法。面向过程编程,思维方式就是考虑问题实现的细节,关注算法和逻辑。
2 方法的作用
方法的作用就是完成一段功能逻辑的封装,一个方法可以解决特定的一个问题。
总的来说方法可以有以下好处:
- 减少代码冗余
- 提高代码复用性
- 可用性,可扩展性提高
- 上层调用则可以简化代码。
3 定义一个方法
public static 返回值类型 function_name( 参数列表 ){
业务逻辑代码;
[return value ;]
}
说明:
- 返回值类型可以是(基本数据类型 引用数据类型 void)。
- 返回值类型如果是void 表示没有返回值。
- function_name 为方法名,应该体现出方法的作用。
- 参数列表 表示接收的参数,相当于声明变量 例如 int n 可以有多个,使用逗号 , 分隔。
- { } 为方法体,方法体是编写实现方法具体功能代码的地方。
[return value ;]
如果返回值类型不是void 则必须存在,且value 的类型必须和声明的类型一致。
public class TestMethod{
// 定义一个打印符号的方法 n 表示个数 char表示打印的具体符号
public static void printSign( int n , char sign ){ // int n 为形参,就是一个变量的声明(局部变量)
for( int i = 0; i < n ; i++ ){
System.out.print( sign );
}
System.out.println();
}
}
4 方法调用
一个方法编写好后,不会自动运行,需要调用 才会执行。方法调用的本质就是 运行方法内部的代码,所以当调用一个方法,程序会进入方法内部,直到方法执行完毕后退出方法,回到调用的位置,继续向下执行。
public class TestMethod{
// 定义一个打印符号的方法
public static void printSign( int n , char sign ){ // int n 为形参,就是一个变量的声明(局部变量)
for( int i = 0; i < n ; i++ ){
System.out.print( sign );
}
System.out.println();
}
// 入口方法
public static void main(String[] args){
System.out.println("床前明月光");
printSign( 5 , '*' ); // 5 是一个实际参数,就是给形参赋值
System.out.println("疑是地上霜");
printSign( 6 , '*' );
System.out.println("举头望明月");
printSign( 7, '*' );
System.out.println("低头思故乡");
printSign( 8 , '*' );
}
}
5 形参 实参
形参:方法定义时小括号()中声明的变量为形参,形参表示执行方法必要的外界输入条件,没有实际值,形式而已,只有方法执行时,才会的到赋值。
实参:方法调用时小括号( ) 中给定的变量或数据为实参,实参表示正式赋值给形参的数据,传参的本质,就是实参赋值给形参,保证方法在执行过程中形参具有具体的值。
//定义一个检测偶数的方法
public static void isEven( int num ){ // 这里 num 为形参
if( num %2==0 ){
System.out.println(num+"偶数");
}else{
System.out.println(num+"奇数");
}
}
public static void main(String[] args){
//调用方法
isEven( 100 ); // 100 为实参
int ddd = 19;
isEven(ddd); // ddd 为实参
}
注意 :调用方法是,实参的个数和类型要和形参 保持一致,否则编译报错。
5 返回值的方法
如果你期望从一个方法执行完成后得到返回值,那么需要把这个方法设置为有返回值的方法,其方式就是在方法的声明出 确定一个返回值类型,比如:
public static int f1(){ .... }
public static double f2(){....}
这里 f1 方法返回int f2方法返回 double 如果一个方法声明了返回值类型,那么方法体中必须使用return
返回一个与声明一致的数据。
给出几个有返回值的方法定义:
// 编写一个函数, 接收一个范围 , 计算该范围中能被3整除 但不不能被5整除的 数字个数,返回个数。
public static int count( int start , int end ){
int sum =0;
//从start 开始 end结束
for( int i = start; i<=end; i++ ){
//判断
if( i%3==0 && i%5!=0 ){
sum++;
}
}
return sum;
}
// 编写一个抽奖的函数,没有参数 内部随机一个数通过switch 决定一个奖品,并返回(奖品名称),
public static String lucky(){
//随机数
Random rd = new Random();
int luckyNum = rd.nextInt(10);
//定义奖品
String things = "";
switch( luckyNum ){
case 0 : things="Iphone4~";
break;
case 1 : things="电视~";
break;
case 2 : things="电脑";
break;
case 3 : things="洗衣机";
break;
case 4 : things="冰箱";
break;
default : things="谢谢回顾";
break;
}
return things; //返回奖品
}
关于return的几点注意:
- 一个方法只能返回一个值。
- 如果方法中有分支,需要保证每条分支都最终可执行到return。
- return 后不可再跟其他代码,因为后面代码无法执行,类似还有
break continue
。 - 一个返回值类型为 void 方法中也可使用
return
关键字,但是不是表示返回一个值,而是表示立即终止该方法。
6 递归
递归是一种方法调用的特殊用法,是指方法在自己内部调用本身的一种行为。如果设置不当可造成 StackOverFlowError
栈溢出错误,所以必须设置有效的退出条件,来结束递归。正确的使用递归可以简化代码,但是往往可读性受影响。
案例:递归计算阶乘
public static int jc( int n ){
//设置一个退出条件
if( n == 1 ){
return 1;
}
return n * jc(n-1);
}
案例:递归计算斐波拉契数列第n项
public static int fblq2( int n ){
//退出条件
if( n==1 ){
return 0;
}
if( n==2 ){
return 1;
}
// 3项开始的规律
return fblq2(n-1)+ fblq2(n-2);
}