一. 函数(方法)
-
定义
- java中的运行代码除极个别情况外,必须写在方法中, 方法就是代码的载体
- 我们平时写代码的main方法也是一个方法,只是比较特殊而已, 可以被jvm识别
- 因为要适应不同的需求, 我们的方法也是千变万化的. 一个main方法显然是无法达到我们的要求的
- 当我们用代码定义了一个功能, 想要将功能保存下来沿用,就必须要以方法为载体
- 方法的出现提升了代码的复用性
-
格式
权限修饰符 静态/非静态 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2...) { //方法体语句; return 返回值; }
-
格式详解
- 修饰符 : 设定方法的作用范围, 现阶段只要用public就可以了
- 静态/非静态 : static关键字表示静态 , 出现static , 这个方法就是静态方法,没有就是非静态
- 返回值类型 : 就是代码运行的结果的数据类型
- 方法名 : 这个方法的名称, 调用的时候我们使用的就是方法名
- 参数 :
- 实际参数 : 就是实际参加运算的值 , 基本数据类型就是值, 引用数据类型是地址值
- 形式参数 : 定在在方法上, 用来表示接收的数据的类型
- 参数名 : 就是变量名
- 方法体语句 : 方法中的功能代码, 也是我们实际运行的代码
- return : 关键字, 表示结束方法, 同时可以返回一个值
- 返回值 : 就是功能的运行的结果, 由return带给调用者
-
演示
public static void main(String[] args) { //调用计算两个数乘积的方法 int c = multipy(14, 15); System.out.println(c); } //定义方法,计算两个数的乘积 public static int multipy(int a, int b){ int count = a * b; return count; }
-
测试题
- 定义方法,根据数字打印对应行数等腰三角形
二. 方法的分类和调用
-
方法的分类
- 有参方法
- 无参方法
- 有返回值
- 无返回值
//无参无返回值的方法 public static void method1(){ System.out.println("我就是自娱自乐"); } //有参无返回值的方法 public static void method2(int a){ //计算a平方 System.out.println(a*a); } //无参有返回值的方法 public static long method3(){ //获取当前时间 long time = System.currentTimeMillis(); return time; } //有参有返回值 public static int method4(int a,int b){ //返回a,b中数值较大的那个 return a>b?a:b; }
-
调用方式
- 单独调用 方法独立于其他代码, 独立执行功能
- 多用检测维护型的方法
- 输出调用 只做结果输出, 这种调用对我们来说没有任何意义
- 赋值调用 有返回值结果, 可以进一步操作返回值
public static void main(String[] args) { //赋值调用 int c = multipy(14, 15); System.out.println(c); //输出调用 print(); //单独调用 clear(); } //定义方法,计算两个数的乘积 public static int multipy(int a, int b){ int count = a * b; return count; } //打印语句功能 public static void print(){ System.out.println("哇,有美女...."); } //清理系统垃圾功能 public static void clear(){ for (int i = 0; i < 1000; i++) { System.out.println("系统清理中...."); } }
- 单独调用 方法独立于其他代码, 独立执行功能
-
测试题
- 定义一个获取整数绝对值的方法, 并调用
- 定义一个计算一定范围内整数和的方法, 并调用
-
参数传递
- 调用方法时,传递一个实参,就相当于将这个实参赋值给形参
三. 方法的重载(overloading)
-
定义
- 一个类里面出现多个方法名相同 , 参数列表不同的多个方法 , 我们叫这种现象为方法重载
- 方法重载是为了提高方法名的使用率 , 毕竟意思相同的单词就那么几个 , 而且 我们的方法功能也类似 , 这种情况下如果使用不用的方法名 , 很可能造成意义混 乱 , 所以就出现了方法重载
- 在我们的程序中绝对不允许出现两个一模一样的方法, 如果我们能想办法让jvm区别每个方法,那么这个方法就可以使用
-
参数列表
- 参数个数不同
- 参数类型不同
- 参数的顺序不同(也算是重载,但是一般开发中不用, 没有意义)
-
案例演示
public static void method(int i,double d){ } //和第一个方法的参数个数不同 public static void method(int i){ } //和第一个方法的参数的类型不同 public static void method(String str,float f){ } //和第一个方法的参数的顺序不同 public static void method(double d,int i){ }
-
测试题
- 定义两个重载方法, 一个方法是计算两个的和, 一个方法是计算三个整数的和
- 定义两个重载方法, 比较两个int型和double型是否相等
四. 方法间相互调用的内存图
-
栈的定义
- 运行方法和存储局部变量
- 栈是一个一端开口的筒子,类似于羽毛球筒
-
执行流程
- 当jvm执行某个方法时,会将这个方法放入到栈中执行,当这个方法中又调用了其他方式时,jvm就会将新的方法也放入栈中已有的方法的上面执行,当方法执行完毕后,方法就会被jvm从栈中移除,我们称之为弹栈
五. 可变参数
-
定义
- 在方法声明上使用...表示多个相同类型的参数
-
注意事项
- 在实际调用中,我们已经在方法内传入多个实参, 虚拟机会自动帮我们填充到可变参数上,形成一个数组
-
示例
public void method(String... strs){ for (int i = 0; i < strs.length; i++) { System.out.println(strs[i]); } } public static void main(String[] args) { Class class1 = new Class(); class1.method("小明","小红","小时"); }
总结:
- 方法
- 将一段代码圈起来,便于重复使用(提高代码的复用性)
- 方法名 : 别的方法要调用当前方法,需要方法名
- 参数列表:当前方法运行的原材料
- 返回值类型: 检测或者是规定当前返回出去的结果的类型
- 方法的分类和调用
- 有参有返回值
- 有参无返回值
- 无参有返回值
- 无参无返回值
- 赋值调用
- 单独调用
- 输出调用
- 方法的重载
- 类中出现了方法名相同,参数列表不同的方法,这种现象我们称之为重载
- 参数列表不同的表现:
- 类型不同
- 长度不同
- 顺序不同(无意义)
- 方法间调用的内存原理
- 虚拟机开启,只会执行main方法, 其他的方法都必须由main方法调用才能引出来
- 栈 : 一端开口, 方法的运行区域
- 栈只会执行最顶端的方法
- 压栈, 弹栈
- 可变参数
- ...
- 优点 : 既可以接收数组, 也可以接收散装数据
- 缺点 : 必须是参数列表的最后一个参数
作业
-
第一题
- 定义计算从1到某个数以内所有奇数的和
-
第二题
- 定义方法计算1到某个数以内能被7整除但不是偶数的数的个数
-
第三题
- 定义方法计算从1到某个数以内所有能被3或者17整除的数的和。
-
第四题
- 从键盘输入一个数n,定义方法判断是不是一个质数(质数是只能被1和它自身整除的数)
-
扩展提
- 求2〜某个数之内的质数
网友评论