面向对象之方法篇

1.类的成员之方法(Method)
(1)方法的声明
方法的声明格式:
修饰符 返回值类型 方法名(参数类型 形参1, 参数类型 形参2, ….){
方法体程序代码
return 返回值;

其中:
修饰符:public,缺省,private, protected等
返回值类型:
a. 没有返回值:void。
b. 有返回值,声明出返回值的类型。与方法体中“return 返回值”搭配使用
方法名:属于标识符,命名时遵循标识符命名规则和规范,“见名知意”
形参列表:可以包含零个,一个或多个参数。多个参数时,中间用“,”隔开
返回值:方法在执行完毕后返还给调用它的程序的数据。
如何理解方法返回值类型为void的情况 ?
(2)方法的分类
方法的分类:按照是否有形参及返回值

  • 无形参无返回值 void 方法名(){}
  • 无形参有返回值 返回值的类型 方法名(){}
  • 有形参无返回值 void 方法名(形参列表){}
  • 有形参有返回值 返回值的类型 方法名(形参列表){}

(3)方法的调用
方法通过方法名被调用,且只有被调用才会执行。
(4)方法调用的过程分析

在这里插入图片描述
注 意:
(1)方法被调用一次,就会执行一次
(2)没有具体返回值的情况,返回值类型用关键字void表示,那么方法体中可以不必使用return语句。如果使用,仅用来结束方法。
(3)定义方法时,方法的结果应该返回给调用者,交由调用者处理。
(4)方法中只能调用方法或属性,不可以在方法内部定义方法。
练习:
要求:
(1)创建Person类的对象,设置该对象的name、age和sex属性,调用study方法,输出字符串“studying”,调用showAge()方法显示age值,调用addAge()方法给对象的age属性值增加2岁。
(2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。

main(String[] args) {
	Person p = new Person();
	p.name = "zhangsan";
	p.age = 20;
	p.study();
	p.showAge();
	p.addAge();
}
class Person{
	String name;
	int age;
	int gender;
	public void study(){
		Syso("studying");
}
	public void showAge(){
	   Syso (age);
}
	public void addAge(int i){
		age = age + i;
}

2.再谈方法
(1)方法的重载
(2)可变形参的方法
(3)方法参数的值传递机制
(4)方法重载之参数的类型自动提升
(5)递归方法
2.1 方法的重载
重载的概念:
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
重载的特点:
与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)。调用时,根据方法参数列表的不同来区别。
重载示例:
//返回两个整数的和
int add(int x,int y){return x+y;}
//返回三个整数的和
int add(int x,int y,int z){return x+y+z;}
//返回两个小数的和
double add(double x,double y){return x+y;}
public static void print(int i) {……}
public static void print(float f) {……}
public static void print(String s) {……}
使用重载方法,可以为编程带来方便
练习:
判 断: 与void show(int a,char b,double c){}构成重载的有:
a) void show(int x,char y,double z){} // no
b) int show(int a,double c,char b){} // yes
c) void show(int a,double c,char b){} // yes
d) boolean show(int c,char b){} // yes
e) void show(double c){} // yes
f) double show(int x,char y,double z){} // no
g) void shows(){double c} // no
2.2 可变个数的形参
JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许直接定义能和多个实参相匹配的形参。从而,可以用一种更简单的方式,来传递个数可变的实参。
//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量
public static void test(int a ,String[] books);
//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量
public static void test(int a ,String…books);
说明:
(1)声明格式:方法名(参数的类型名 …参数名)
(2)可变参数:方法参数部分指定类型的参数个数是可变多个:0个,1个或多个
(3)可变个数形参的方法与同名的方法之间,彼此构成重载
(4)可变参数方法的使用与方法参数部分使用数组是一致的
(5) 方法的参数部分有可变形参,需要放在形参声明的最后
(6)在一个方法的形参位置,最多只能声明一个可变个数形参
2.3 方法参数的值传递机制
方法,必须由其所在类或对象调用才有意义。若方法含有参数:
形参:方法声明时的参数
实参:方法调用时实际传给形参的参数值
ava的实参值如何传入方法呢?
Java里方法的参数传递方式只有一种:值传递。 即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。
形参是基本数据类型:将实参基本数据类型变量的“数据值”传递给形参
形参是引用数据类型:将实参引用数据类型变量的“地址值”传递给形参
a. 参数类型为:基本数据类型
b. 参数类型为:引用数据类型

在这里插入图片描述

2.4 方法重载之参数类型的自动提升
提升的路径如下:

  • byte --> short --> int --> long --> float --> double -->对应包装类 -->Object
  • char --> int–>long --> float --> double -->对应包装类 --> Object
    举例:
    如调用方法(假设所有重载方法参数形式都存在)
    int a = 10;
    test(a)
    提升路径为:int --> long --> float --> double --> Integer -->Object
    另外要注意的是:基本类型的提升可以自动进行,但是类型的窄化,则必须强制声明,否则编译器会报错,这主要是因为信息丢失的缘故。
    2.5递归
    递归方法:一个方法体内调用它自身。
    方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
    递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。
    如果是死循环,可能会导致栈内存不足,引发内存泄漏:StackOverflowError。
    例题:
    //计算1-100之间所有自然数的和
public int sum(int num){
	if(num == 1){
		return 1;
	}else{
		return num + sum(num - 1);
	}
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值