目录
一、前言
前面我们学习了数组的概念和使用,现在我们来学习Java中的方法,这个方法和c语言的
函数十分相似。
二、方法
1.方法的概述
2.方法的定义和调用
3.带参数方法的定义和调用
4.带返回值方法的定义和调用
5.方法的注意事项
6.方法重载
7方法的参数传递
1、方法的概述
方法是具有一定功能的代码段,我们通过这个来解决问题,是一段代码的集合。
(相当于c语言中的函数)
2、方法的定义和调用
方法的定义
格式1:
1 |
public static void 方法名{ //方法的内容 } |
其中static说明这是静态方法。静态成员和静态方法只能访问静态成员和方法,若是要
访问非静态成员或方法,则需要通过创建对象来访问,形如 类名 标识符=new 类名();
而非静态的成员既可以访问静态成员和方法也可以访问非静态成员和方法。
(这是后期的内容,提前涉及一下)
示例图1:
示例图2:
代码1:
1 |
package com.haha; public class test { public static void main(String[] args) { hello();//在同一类下,静态成员之间的访问直接通过 方法名(); } public static void hello(){ System.out.println("好好学习,天天编程"); } } |
代码2:
1 |
package com.haha; public class test1 { public static void main(String[] args) { test1 nb=new test1();//创建对象 nb.hello();//若静态方法想访问非静态方法,则得通过创建对象才能访问 } public void hello(){//没有static表示非静态方法 System.out.println("好好学习,天天编程"); } } |
格式2:
1 |
public 返回类型 方法名(){ //方法定义的实现 } |
1 |
public int haha(){ } |
其实定义方法十分简单,形如c语言的函数即可,只不过在java多了一些修饰符public
、private、protected等之类的修饰符,这些修饰符作用是访问权限。
修饰符访问权限范围:
本章主要内容:
1.带参数方法的定义和调用
2.带返回值的方法定义和调用
3、带参数方法的定义和调用
方法定义:
格式1:(带static的方法定义)
1 |
public static void 方法名(参数){ //方法内容 } |
示例:
1 |
public static void compare(int a,int b){ System.out.println(a>b?a:b); } |
注意:一个程序要想运行则比须要有main方法,程序就是从main方法进入的。所以比较完
整的写法是:
示例图:
代码:
1 |
package com.test; public class 比较 { public static void main(String[] args) { compare(10,20); } public static void compare(int a,int b){ System.out.println(a>b?a:b); } } |
注意:在定义方法时,调用中的参数要和方法中的参数一一对应,以及参数类型也要一一对
应,否则会报错。如上图中的compare(int,int)方法定义了两个int类型的方法,那么在其他方
法中(不一定是main方法)调用也要写两个int类型的参数。其实方法可以重载的,重载就是参
数个数或参数类型至少有一个不同…(下篇细讲)
错误示例1:参数类型不同
错误示例2:参数个数不同
格式2:方法中不带static
这个当main方法调用他时,则需要在main方法中先创建对象(以前讲过)
在同一类中,其他不带static方法可以直接调用其他方法(上篇讲过,不重复了)
方法调用:
格式是:方法名();
是不是超级简单,其中括号里的参数要和定义的参数一致。
如:compare(10,20);也可以通过Scanner数入参数
4、带返回值的参数方法定义和调用
仔细看是不是就只和上面那个多了返回值这三个字,实际上这定义的时候也是多这一个。
方法定义格式:
(也是分带不带static的,和上面一样,所以我就不分开讲了)
1 |
public static 返回类型 方法名(参数){ //方法体 return 数据 } |
如:
1 |
public static int compare(int a,int b){ return a>b?a:b; } |
注:带返回值的方法必须要有return返回一个以上的数据,否则报错,而返回类型为
void的,可以有return,但是return后啥也不跟,直接return;即可。
示例:
代码:
1 |
package com.test; public class 比较 { public static void main(String[] args) { int a=compare(10,20); System.out.println(a); } public static int compare(int a,int b){ return a>b?a:b; } } |
注:调用方法时,必须要有一个变量去接受返回类型(不接收也不会报错的),没有任何
变量去接受返回的值是没有任何意义的
5、嵌套定义和嵌套调用
方法不能嵌套定义,但是可以嵌套调用,
什么是嵌套定义,其实就是一个方法套了另一个方法
什么是嵌套套用,就是各个方法的来往调用,一个方法可以调用一个或多个,
如方法a调用方法b,方法b调用了方法c、d等等。
如
错误写法:
1 |
public static void main(String[] args){ public static void getmax(int a,int b){ } } |
此时就有问题了,main方法嵌套了getmax方法。
正确的写法:
1 |
public static void main(String[] args){ } public static void getmax(int a,int b){ } |
6、方法重载
我们知道方法是java常用的,在我们写代码的过程经常会使用到,但是我们在调用同
功能的方法要传不同类型的数据时如果我们定义很多方法多有不方便,所以java中给
出了方法重载。
什么是方法重载?
重载也叫重写,他满足一下条件:
1、同一方法名
2、数据类型的种类不同或数据个数不同或顺序不同(三个满足一个或多个即可)
3、定义的方法放在同一个类下
如:初始方法的重载
1 |
public static void add(float f,int i) |
以下都属于上面方法的重载:
种类不同:
1 |
public static void add(float f,float i) |
1 |
public static void add(int a,int n) |
数据个数不同:
1 |
public static void add(float f,int i,float v) |
顺序不同:
1 |
public static void add(int i,float f) |
注意:顺序不同必须是两个数据类型换了位置,而不是参数名,参数名的取值是任意的
错误写法:
1 |
public static void add(float i,int f) |
注:方法的重载和返回类型没有关系
如下面这两个属于同一个方法:
1 |
public static int add(float f,int i) |
1 |
public static void add(float f,int i) |
7、方法的参数传递
1、基本数据类型的传递
所谓几本数据类型就是8大基本数据类型(byte char short int boolean float long double)
对于基本数据类型的传递,形参的改变是不会改变实参的值的
这相当于c语言中的传值调用。
如:
代码:
1 |
public class Demo { public static void main(String[] args) { int a=10; play(a); System.out.println("实参的a的值是"+a); } public static void play(int a){ a=100; System.out.println("形参中a的值是"+a); } } |
演示运行图:
2、引用数据类型的传递
除了8大基本数据类型之外其余的是引用数据类型
引用数据类型的概念:
引用类型 就是只变量中存储的不是值而是一个内存中的地址的数据类型也就是说
变量中存储了这个变量的值所在内存中的地址 每次调用这个变量都是引用这个
地址而得到真正的值 所以叫引用类型
引用类型:
是一个对象类型,它的值是指向内存空间的引用,其实就是地址所指向的内存所保存的值
说白了,传引用就是c语言中的传址,传址,实参会随着形参的改变而改变
演示图:
代码:
1 |
public class Demo1 { public static void main(String[] args) { int[]arr={1,2,3,4}; System.out.println("调用前arr[0]:"+arr[0]); arrDemo(arr); System.out.println("调用后arr[0]:"+arr[0]); } public static void arrDemo(int[]arr){ arr[0]=10; } } |