方法/函数
任务:
1、理解和回顾方法的作用
2、掌握方法的基本语法
3、掌握方法的分类
一.方法的定义和作用
1.1方法的定义和作用
方法(函数):能够实现某种功能的代码集合,即用定义函数用来实现一个项目的某个功能。
变量可以存储我们单一的数据,而方法则可以存储我们的功能代码段。
百度百科上的定义为:
函数是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。在C语言中,子程序的是由一个主函数和若干个函数构成。由主函数调用其他函数,其他函数也可以互相调用。同一个函数可以被一个或多个函数调用任意多次。
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。要善于利用函数,以减少重复编写程序段的工作量。
我们以前使用的方法:
main 方法:程序的入口,如果没有此方法程序无法运行。
random()方法:帮助生成一个随机数[0.0,1.0)的随机数;
double ranDouble=Math.random();
int num = (int)(Math.random(max-min))+min //获取一个整数范围的随机数
-
nextInt()、nextDouble()、next()方法:用于帮助我们在控制台上输入对应的数据 帮你把值可以存到变量中。
String inputStr = input.next(); int inputInt = input.nextInt();
-
Arrays:
- toString(数组)方法: 将数组转换为字符串
- sort(数组) 方法: 将数组进行升序排序
- equals(数组1,数组2) 方法:将两个数组的元素进行比较 比较内容
- …
1.2 面向过程/函数/方法(函数式编程)-POP
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显不同的是封装、继承、类即面向对象。
面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。 当程序规模不是很大时 ,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。 比如拿学生早上起来这件事说明面向过程,粗略的可以将过程拟为:
(1)起床 (2)穿衣 (3)洗脸刷牙 (4)去学校
这 4 步就是一步一步地完成,按着顺序,一个一个地实现。
2. 掌握方法的基本语法
// 方法声明
[访问修饰符] 返回值类型 方法名([参数列表]){
// 方法体
[return 返回值;]
}
// 用方法实现此功能:输出10次好好学习,天天向上
public void DayDayUp() {
//建立printDayDayUp方法
for(int i = 0; i < 10; i++) {
System.out.println("第"+(i+1)+"遍:
梦想路上你我他!");
}
}
完成方法的建立后还需要在主程序中调用此方法,才能实现此功能。
方法调用注意事项:
-
同一个类中:
-
如果调用者(方法)不是特殊的方法(没有static),那么可以直接以要调用的方法名()来进行调用即可。
public void xx() { // 在同一个类中 ,如果不是特殊的方法(static)直接调用 printDayDayUp(); }
-
如果调用者(方法)是特殊的方法(有static),那么需要先对此类进行对象创建,然后才能进行调用此方法。
public static void main(String[] args) { Demo1 demo1 = new Demo1(); // 创建对象; demo1.printDayDayUp(); //调用方法; }
-
-
不同类中(同包package):
-
不同类中进行方法调用,都需要先进行对应类的对象创建,然后才能调用此类中的方法。(与同类中static形式一致)
public class Demo2 { public static void main(String[] args) { Demo1 demo1 = new Demo1(); demo1.printDayDayUp(); } public void xx() { Demo1 demo1 = new Demo1(); demo1.printDayDayUp(); } }
-
-
不同包,如:
-
import java.util.Scanner;//导入java.util中的Scanner类; Scanner input = new Scanner(System.in);//创建对象 input.next();//才可以调用方法;
3. 掌握方法的分类
-
无参无返方法:单纯的存储了一个功能 独立完成处理
语法:访问修饰符 void 方法名(){ // 方法体 }
-
无参有返方法:存储了一个功能,并且将功能运行后的结果进行了返回(原因:调用者可能需要此结果进行处理)
语法:访问修饰符 数据类型 方法名(){ // 方法体 return 返回值; //返回的值类型为访问修饰符后的数据类型 }
例子:
public class Demo3 {
public static void main(String[] args) {
// 创建对象
Demo3 demo3 = new Demo3();
// 带返回值的方法一般都需要按照返回值的类型接收一下此值 否则无法使用得到的结果
int randInt = demo3.genRandInt();
System.out.println(randInt);// 或者用 System.out.println(demo3.genRandInt());
}
// 无参有返方法
// 实现的功能为生成一个4位的随机整数
public int genRandInt() {
// (int)(Math.random() * (max - min)) + min
// [1000,10000)
/*int randInt = (int)(Math.random() * (10000 - 1000)) + 1000;
return randInt;*/
return (int)(Math.random() * (10000 - 1000)) + 1000;
}
}
- 有参无返方法:我们如果希望对一个独立处理的功能增加一些灵活性或者独立处理的功能需要一些额外因素才能进行处理。
语法:访问修饰符 void 方法名(参数列表){ // 方法体 }
例子:
public class Demo4 {
public static void main(String[] args) {
Demo4 xx = new Demo4();
// xx.printDayDayUp();
// 调用方法时需要传递被称为【实参/实际参数】而方法中定义的参数为形参。
/*int num = 10;
xx.printDayDayUp(num);*/
// 只要保证传递的参数类型一致即可
// xx.printDayDayUp(10);
// xx.printDayDayUp(20);
// xx.printDayDayUp(30);
}
// 有参数的方法:将方法变得更加灵活
// 方法参数被我们称为【形参/形式参数】 用于在定义方法时可以先进行使用的
/*public void printDayDayUp(int count) {
for (int i = 1; i <= count; i++) {
System.out.println("第"+i+"遍:好好学习!天天向上!");
}
}*/
// 经验:在软件开发中 一些功能可能由于时间而产生需求变化
// 新功能:100遍梦想路上你我他
// 遇到新需求,先考虑老的方法是否还可以重复使用 不要直接更改原有的实现
public void printDayDayUpIncr() {
for(int i = 1; i <= 10; i++) {
// printDayDayUp();
}
}
// 老功能:输出10遍梦想路上你我他
public void printDayDayUp() {
for (int i = 1; i <= 10; i++) {
System.out.println("第"+i+"遍:梦想路上你我他!");
}
}
}
-
有参有返方法:方法内需要额外因素进行处理,并且处理完调用者需要结果进行使用。
访问修饰符 数据类型 方法名(参数列表){ // 方法体 return 返回值; }
public class Demo5 { public static void main(String[] args) { Demo5 demo5 = new Demo5(); String zhaZhi = demo5.zhaZhi("梨"); System.out.println(zhaZhi); } // 模拟实现一个榨汁机功能:放入水果 得到对应的果汁 public String zhaZhi(String fruit) { return fruit+"汁"; } }