黑马程序员_方法

------- android培训java培训、期待与您交流! ----------

1 java方法概述

方法就是完成特定功能的代码块,很多编程语言将其称之为函数,不过在java中,我们将其称之为方法。

 1.1 方法的作用 

假设有一个游戏程序,程序在运行过程中,要不断地发射炮弹(如植物大战僵尸)。发射炮弹的动作需要编写200行的代码,在每次实现发射炮弹的地方都需要重复地编写这200行代码,这样程序会变得很臃肿,阅读起来十分的不方便。为了解决代码重复编写的问题,可以将发射炮弹的代码提取出来放在一个{}中,并为这段代码起个名字,这样在每次发射炮弹的地方通过这个名字来调用发射炮弹的代码就可以了。上述过程中,所提取出来的代码可以被看作是程序中定义的一个方法,程序在需要发射炮弹时调用该方法即可。 所以说,方法提高了代码的复用性,使程序阅读起来更加方便。

 2 方法的书写格式 

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2 ....){

  方法体; 

return 返回值; 

1 修饰符 常见的修饰符有: public 可以从所用的类访问; protected 可以被同一包中的所有类访问可以被所有子类访问,如果子类没有在同一包中也可访问; private 只能在本类中访问; 缺省无访问修饰符 在同一个包中可以访问。

2 static 可写可不写,如写了就将方法声明为静态方法。

3 返回值类型 用于限定返回值的数据类型,如果没用返回值用void 

4 方法名 就是一个名称,它的存在是为了方便我们调用方法,一般方法名如果就一个单词,则全部字母都用小写,如果由多个单词组成,从第二个单词起,每个单词首字母大写,其余都为小写。 

5 参数类型 限定调用方法时传入参数的数据类型,没有传递参数时,括号为空。

6 参数名 是一个变量,接收调用方法时传入的参数 通常称之为形式参数,它的作用是用来接收实际参数的。 

7 方法体 完成功能的代码 

8 return 结束方法以及返回方法指定类型的值 吗,如果没有返回值,可以不写。 

9 返回值 就是功能的结果,由return带回,带回给调用者。

3 方法的注意事项

1. 方法不调用不执行;
2. 方法与方法是平级关系,不能嵌套定义;
3. 方法定义的时候,参数用逗号隔开;

4. 方法调用时不用在传递数据类型;

5.如果方法有声明返回值类型,一定要用return语句返回一个与返回值类型相符的值。

4 方法的重载和覆盖

重载:在同一个类中,允许存在一个以上的同名方法,只要他们的参数列表不同,既是重载,与返回值类型无关。
重载时需要注意一下几点:
1.在使用重载时,只有通过定义不同的参数列表才能算重载,如不同的参数类型,不同的参数个数,不同的参数顺序(一般不建议);
2.修饰符不同,返回值类型不同不算重载;
3.如果父类中的同名方法为私有的,子类中如果也定义了同名的方法,也不能算重载,因为子类访问不到父类中的同名方法,相当于在子类中定义了一个新的方法。
覆盖:是指子类重写一个从父类继承来的同名方法
覆盖要注意以下几点:
1.子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖;
2.静态方法只能覆盖静态方法;
3.覆盖的方法的返回值和参数列表要与父类的方法一致才能算覆盖
4.父类中的方法如果是private,则不会覆盖。

5. 关于方法的形式参数的值传递的思考

public static void main(String[] args) {
		int a = 2;		//定义一个int类型的变量a
		add(a);			//调用add方法
		System.out.println("main方法中的a:"+a);//打印a的值
	}

	public static void add(int a) {
		a = a + 1;		//将a+1的值赋给a
		System.out.println("add方法中的a:"+a);//打印a的值
	}
上一段代码运行的结果是
add方法中的a:3
main方法中的a:2
结果在main方法中,a的值仍然为2并没有发生改变:
public static void main(String[] args) {
		int[] arr = {2,3};		//定义一个int数组arr
		change(arr);			//调用change方法
		
		System.out.println("输出main方法中的数组");
		
		for(int i:arr) {
			System.out.print(i+" ");	//打印a的值
		}
		System.out.println();
	}
	//更改数组中元素的位置
	public static void change(int[] arr) {
		int temp=arr[0];
		arr[0]=arr[1];
		arr[1]=temp;
		
		System.out.println("输出change方法中的数组");
		
		for(int i:arr) {
			System.out.print(i+" ");	//打印a的值
		}
		System.out.println();
	}
上一段代码中,我们将数组arr传递到change方法中,程序运行的结果如下:
输出change方法中的数组
3 2 
输出main方法中的数组
3 2 
可以看出,main方法中的数组也发生了改变。
从上面两段代码的结果可以得出:
当形式参数为基本数据类型的时候,调用方法时,是将变量的值传递给了方法,相当于在方法中又多了一份值,然后执行方法,方法中的值发生了改变,但是在main方法中的值不过随之改变;形式参数为引用数据类型时,方法调用时,是将数组的地址值传递到了方法中,此时方法中的变量arr和main方法中的变量arr同时指向了堆内存中的同一个数组,因此在方法中对数组进行操作后,main方法中的数组也发生了改变,因为他们其实都是同一数组实体。
简单的说,方法形式参数的值传递,如果传递的是基本数据类型,则其传递的的值,而如果是引用数据类型,传递的是地址值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值