4、面向对象程序设计之类设计基础(方法)

4.1类

类是对某一个事物的抽象描述,比如学生类,就可以对某一类学生进行描述。对象就是对某一个类中一个或多个具体的事物,比如学生类中的一个或多个学生。

类和对象在定义之前必须先定义后使用,如同变量的定义和使用。类包括若干方法(行为),表示为某一类对象的共同行为,比如学生类中学生会吃饭、学习和打篮球等;对象也是变量,但它也不是简单的变量,而是多个变量的集合体,对象本身还有若干行为(方法)。

4.1.1封装和隐藏

封装就是将对象的属性和行为(方法)定义在一起,形成一个集合。封装的结果就是得到一个类。

//定义一个学生类
class Student{
 //属性
 private String id;//学号
 private String name;//姓名
 private char gender;//性别
 private int age;//年龄
 private float score;//成绩
//方法(行为):show方法:显示学生信息
 public void show(){
  //方法体
 }
}

封装并不是简单的将对象的属性和行为定义在一起,而是要对属性和行为起到一定的保护作用,这种保护称为隐藏。使用关键字private就可以做到隐藏。
不同类的对象封装的结果不同,即使是同一类的对象在不同环境(系统)中封装结果也会不同。
比如描述人,在户籍管理系统中,要描述人的身份证号、姓名、性别、年龄、婚否、家庭住址等信息;而在某一健康管理系统中,除了描述人的基本信息外,还要描述入的各项生理指标,如脉搏、血压、身高和体重等。
在对对象进行封装时,应该针对问题的需要进行恰当的封装,所封装的属性和行为不能有冗余,更不能缺少。

4.1.2类的定义

//类的定义如下:

class 类名{

//域定义列表

//方法定义列表

}

"class"为关键字,表示定义类。“类名”是类的标识,是一个合法的标识符。“ { } ”中是类中的具体定义。在类中有两种成员:一种是“ 域 ”,一种是“ 方法 ”。“ 域 ”是对象的属性;类中还可以定义若干方法,方法是对象的行为。

4.1.3 域的定义

域的最基本定义方法与变量定义一样。基本定义形式为:

数据类型 域名1[ =初始值1], 域名2[ =初始值2], 域名3[ =初始值3].....域名n[ =初始值n];

数据库类可以是基本数据类型,也可以是自定义(类或接口)类型,还可以是系统类类型。“ 域名 ”是合法的标识符。

域的定义形式与一般变量的定义基本相同。但是域定义在类中,是类的成员,可以称为成员变量;一般变量是定义在方法中,称为局部变量。
局部变量只在它所定义的方法中有效,而成员变量在整个类中都起作用。

如果成员变量与局部变量同名,则在方法中只能访问局部变量,也就是局部变量覆盖了成员变量。

4.1.4 方法的定义

方法就是函数,基本定义形式为:

方法类型 方法名([形式参数列表]){

方法体;

}

1. 方法类型
     方法是对象的行为,也是对数据进行处理的功能。一般地,数据处理完成后应将处理的结果数据返回、如果返回数据,该数据一定有类型,这个类型就是定义方法时声明的“方法 类型”。所以, 方法类型”是方法返回值的类型。
 2. return语句
     可以定 return语句用在方法中。当执行到returm语句时,这个方法执行结束并返回到上一个方法的调用处,不论 return语句后面还有多少条语句都不执行了。
方法的返回值可用return语句实现。return语句的使用方法:
                                                          return 表达式;
执行return语句时先计算“表达式”的值,然后return语句将该值返回。“表达式”值的类型应该与“方法类型”一致,如果不一致,则会将表达式的值的类型自动转换为“方法类型”。高精度数转换为低精度数时会出现运行错误。 
方法也可以不返回值。如果方法不返回值,则定义方法时应该将“方法类型”声明为“void”,明确表示该方法不返回值。
在前面看到的例子中都有 main() 方法,而 main() 方法的“方法类型”是“void”,表示 main() 执行结束后不返回值。
如果方法的类型为“void”,则在方法中一定不能有语句“return表达式”,但是可以使用语句 return;

使得方法结束。

3.方法名
方法名”是方法的标识,执行一个方法是通过“方法名”完成的。“方法名”是一个合法的标识符。
在给方法起名时,应该使方法名尽可能表示一定的含义,以便于对方法的理解和使用。


4. 形式参数列表
如果执行一个方法时,需要给方法一些原始数据,则可以通过“形式参数列表”来完成。将参数说明为“形式参数”,是因为这个参数并不是真正的数据,只有当方法执行时才会给方法真正的、实际的参数。相对地,当执行方法时给出的参数称为“实际”参数。
“形式参数列表”的形式:
数据类型1 形式参数1,数据类型2 形式参数2,…,数据类型n 形式参数n“数据类型;

可以是程序中任何已经存在的数据类型,每个“形式参数”(简称形参)都要单独说明“数据类型”
根据需要,“形式参数列表”可以有也可以没有。如果定义方法时没有“形式参数列表”,则执行方法不需要给出实际数据;否则,一定要给出相应的实际数据。
实际数据又称“实际参数”(简称实参),实参可以是常量、变量或表达式,但形参一定是变量。

5. 方法体
方法用来执行一定的功能,完成相应数据的处理,所以,“方法体”是方法的具体实现。想让方法完成什么样的运算,就可以在方法体中定义相应的语句。所有语句都可以写在方法体中。
任何一个Java Application都有一个main()方法,它是程序的入口,也就是从main()方法开始执行程序。
main()的“方法类型”是void,表示方法不返回值。它有一个参数“args”,是一个String类的对象数组。 main()方法的声明形式是固定的,不能改变。
6.方法执行
执行一个方法称为方法的调用
如果方法A在执行过程中调用了方法B,则称方法A是主调方法方法B是被调方法。主调方法与被调方法具有相对性,因为主调方法也可能被其他方法调用,被调方法也可能调用其他方法。

public class Main{
    //main()方法
    public static void main(String args[]){
//属性
        int x,y,z;
        x=10;
        y=5;
        z=add(x,y);//调用时也可以直接给出实际数据:add(10,5)
        System.out.println(add(x,y));

        int m= (int) max(x,y,z);
        System.out.printf("%d、%d和%d 的最大值为:%d\n",x,y,z,m);
    }
    //方法
    private static int add(int a,int b){
        int c=a+b;
        return c;//或者return a+b;
    }
    private static double max(int a,int b,int c){
        int max;
        max= (a>b?a:b);
        max=max>c?max:c;
        return max;
    }
}

4.1.5 方法的重载

在一个作用域(如一个类)内定义的多个同名方法称为方法的重载,方法重载时要求方法的形式参数互不相同,如形个数互不相同,或者形参个数相同,只要有一对对应的形参类型不同部可构成方法的重载。 
方法重载不能靠“方法类型”来区分。

当方法调用时,只要给出实际参数,运行时系统就会自动调用相应的方法而不需程序判断。一般地,具有相似性质或功能的运算使用重载方法。

说明:

①可变个数形参的方法在调用时,针对于可变的形参赋的实参的个数可以为:0个、1个或多个

②可变个数形参的方法与同一个类中,同名的多个方法之间可以构成重载

③特例:可变个数形参的方法与同一个类中方法名相同,且与可变个数形参的类型相同的数组参数不构成重载。

④可变个数的形参必须声明在形参列表的最后

⑤可变个数的形参最多在一个方法的形参列表中出现一次

总结为:"两同一不同"

两同:同一个类、相同的方法名

一不同:参数列表不同。①参数个数不同        ②参数类型不同

如:定义三个重载方法max():

public int max(int i,int j){
方法体

}

public double max(double a, double b){
方法体

}

public int max(int x, int y, int z){
方法体

}

4.1.6 方法的递归

方法的调用有两种形式,一个是嵌套调用,另一个是递归调用。

嵌套调用在执行过程中调用了另外的方法 而这个另外还可以再调用其他方法,其他方法还可以再调用其他方法。
递归调用是一个方法在执行过程中直接或间接调用了自身、通过递归调用,可以将问题简化为规模较小的同类问题的子问题。
使用方法递归调用时,应满足3点:

(1)每一次的週用都会使问题得到简化
(2)前后调用应该有一定的关系,通常是前一次调用要为启一次调用准备好条件
(3)在问题规模极小时应该终止递归调用,以避免无限递归调用,也就是应该有递归结束的条件

4.1.7 方法的传递机制

1.对于方法内声明的局部变量来说:如果出现赋值操作

-->如果是基本数据类型的变量,则将此变量保存的数据值传递出去。

-->如果是引用数据类型的变量,则将此变量保存的地址值传递出去。

如:求arr1[0]的值

int[] arr1 = new int[]{1,2,3,4,5,6};
int[] arr2 = arr1;
arr2[0] = 10;
System.out.println(arr1[0]);

结果为 10 ;因为arr1 传递给arr2的是它的地址值,所以arr2与arr1指向同一个地址值,当arr2值改变时,arr1也会改变

2.方法的参数的传递机制:值传递机制

4.2将详细讲解对象、对象的声明、创建和使用,还有关键字this和static等,等更新,谢谢支持,继续加油!
 

  • 29
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

╭⌒心岛初晴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值