基本介绍 在某些情况下,我们要需要定义成员方法(简称方法)。比如人类: 除了有一些属性外( 年龄,姓名…),我们人类还有一些行为比如:可以说话、跑步…,通过学习,还可以做算术题。这时就要用成员方法才能完成。现在要求对 Person 类完善。 成员方法的定义
public 返回数据类型 方法名(形参列表..){//方法体
语句;
return 返回值;
}
- 参数列表: 表示成员方法输入cal(int n) 数据类型(返回类型): 表示成员方法输出,void表示没有返回值 方法主体: 表示为了实现某一功能代码块 return语句不是必须的
- 一个方法最多有一个返回值,如果返回多个结果,用返回数组的方法.
package Hsp;
public class Method {
public static void main(String[] args) {
AA a = new AA();
int[] res = a.getSumAndSub(1,4);
System.out.println("和=" + res[0]);
System.out.println("差=" + res[1]);
}
}
class AA{
//方法,接收一个二维数组
public int[] getSumAndSub(int n1,int n2){
int[] resarr = new int[2];//创建一个数组
resarr[0] = n1 + n2;
resarr[1] = n1 - n2;
return resarr;
}
}
返回类型可以为任何类型,包含基本类型或引用类型(数组,对象) 如果方法要求有返回数据类型, 则方法体中最后的执行语句必须为return值,而且要求返回值类型必须和return的值类型一致或兼容 若方法体内有void, 则方法体中可以没有return语句,或者只写return 一个方法可以有0个参数,也可以有多个参数,之间用逗号隔开,比如getSum(int n1,int n2) 参数列表可以为任意类型, 包含基本类型或引用类型,比如printArr(int[][] [] [] map) 调用带参数的方法时,一定对应着参数列表传入相同类型或兼容类型的参数 方法定义时的参数称为形式参数,简称形参; 方法调用时的参数称为实际参数,简称实参,实参和形参的类型一定要一致或兼容,个数,顺序必须一致 方法体: 里面写完成功能的具体语句, 可以为输入,输出,变量,运算,分支,循环,方法调用,但里面不能再定义方法! 即: 方法不能嵌套定义 方法调用细节: 同一个类中的方法调用,直接调用即可. 比如print(参数) package Hsp;
public class Method {
public static void main(String[] args) {
A a = new A();
a.sayOk();
}
}
class A{
public void print(int n) {
System.out.println("print()方法被调用 n=" + n);
}
public void sayOk(){
print(19);
System.out.println("继续执行sayOk" );
}
}
跨类中的方法a类调用b类方法: 需要通过对象名调用 package Hsp;
public class Method {
public static void main(String[] args) {
A a = new A();
a.m1();
}
}
class A{
public void print(int n) {
System.out.println("print()方法被调用 n=" + n);
}
public void sayOk(){
print(19);
System.out.println("继续执行sayOk" );
}
public void m1(){
//创建B对象,然后再调用方法
System.out.println("m1()方法被调用");
B b = new B();
b.hi();
System.out.println("m1()方法继续执行:");
}
}
class B{
public void hi() {
System.out.println("B类中的hi()被执行");
}
}
跨类的方法调用和方法的访问符相关,先暂时这么提一下,后面我们讲到访问修饰符时,还要再细说 添加 speak 成员方法,输出 “我是一个好人”
public class Method01 {
public static void main(String[] args) {
//方法使用
//1. 方法写好后,如果不去调用(使用),不会输出
//2. 先创建对象 ,然后调用方法即可
Person p1 = new Person();
p1.speak(); //调用方法
}
}
class Person {
String name;
int age;
//方法(成员方法)
//添加speak 成员方法,输出 “我是一个好人”
//1. public 表示方法是公开
//2. void : 表示方法没有返回值
//3. speak() : speak是方法名, () 形参列表
//4. {} 方法体,可以写我们要执行的代码
//5. System.out.println("我是一个好人"); 表示我们的方法就是输出一句话
public void speak() {
System.out.println("我是一个好人");
}
}
package Hsp;
public class Method {
public static void main(String[] args) {
//测试
B p1 = new B();
p1.speak();
p1.age(2);
}
}
//添加 `speak` 成员方法,输出 “我是一个好人”
class B{
String name;
int age;
public void speak(){
System.out.println("我是一个好人");
}
public void age(int i) {
System.out.println(i);
}
}
添加 cal01 成员方法,可以计算从 1+..+1000 的结果 public class Method01 {
public static void main(String[] args) {
//方法使用
//1. 方法写好后,如果不去调用(使用),不会输出
//2. 先创建对象 ,然后调用方法即可
Person p1 = new Person();
p1.cal01(); //调用cal01方法
}
}
//添加cal01 成员方法,可以计算从 1+..+1000的结果
class Person {
public void cal01() {
int res = 0;
for(int i = 1; i <= 1000; i++) {
res += i;
}
System.out.println("cal01方法 计算结果=" + res);
}
}
添加 cal02 成员方法,该方法可以接收一个数 n,计算从 1+..+n 的结果 public class Method01 {
public static void main(String[] args) {
Person p1 = new Person();
p1.cal02(5); //调用cal02方法,同时给n = 5
p1.cal02(10); //调用cal02方法,同时给n = 10
}
}
//添加cal02 成员方法,该方法可以接收一个数n,计算从 1+..+n 的结果
//1. (int n) 形参列表, 表示当前有一个形参 n, 可以接收用户输入
class Person {
public void cal02(int n) {
int res = 0;
for(int i = 1; i <= n; i++) {
res += i;
}
System.out.println("计算结果=" + res);
}
}
添加 getSum 成员方法,可以计算两个数的和 public class Method01 {
public static void main(String[] args) {
Person p1 = new Person();
//调用getSum方法,同时num1=10, num2=20
//把 方法 getSum 返回的值,赋给 变量 returnRes
int returnRes = p1.getSum(10, 20);
System.out.println("getSum方法返回的值=" + returnRes);
}
}
class Person {
public int getSum(int num1, int num2) {
int res = num1 + num2;
return res;
}
}
//添加getSum成员方法,可以计算两个数的和
//解读
//1. public 表示方法是公开的
//2. int :表示方法执行后,返回一个 int 值
//3. getSum 方法名
//4. (int num1, int num2) 形参列表,2个形参,可以接收用户传入的两个数
//5. return res; 表示把 res 的值, 返回
方法的调用机制原理 


