• 1. 面向对象程序设计 1彭鹏 IBM Learning & Knowledge2018/10/15
  • 2. Agenda函数 类 对象2018/10/152面向对象程序设计 1
  • 3. 函数(子程序)的概念与作用。 定义一个函数的格式 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,….) { 程序代码 return 返回值; } 其中: 形式参数:在方法被调用时用于接收外部传入的数据的变量。 参数类型:就是该形式参数的数据类型。 返回值:方法在执行完毕后返还给调用它的程序的数据。 返回值类型:函数要返回的结果的数据类型。 实参:调用函数时实际传给函数形式参数的数据。 如何理解函数返回值类型为void的情况 函数(方法)2018/10/153面向对象程序设计 1
  • 4. Practice 0编写打印三个矩形的程序(用流水帐的方式与用函数的方式进行对比分析)。 2018/10/154面向对象程序设计 1
  • 5. 函数调用的格式 在函数中使用return提前返回 函数调用的过程分析 函数的调用2018/10/155面向对象程序设计 1
  • 6. 函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只要它们的参数个数或类型不同即可。 如: public class Test { public static void main(String [] args){ int isum; double fsum; isum=add(3,5); isum=add(3,5,6); fsum=add(3.2,6.5); } public static int add(int x,int y) { reutrn x+y; } public static int add(int x,int y,int z) { return x+y+z; } public static double add(double x,double y) { return x+y; } }函数的重载2018/10/156面向对象程序设计 1
  • 7. Practice 1编写一个类ETPTest2_1,使他具有一个方法为: public int getArea(int i, int j) 并返回i * j的值。 再从外部调用这个方法 传入相应,并打印出结果值2018/10/157面向对象程序设计 1
  • 8. Practice 2求下面代码输出结果 public class ETPTest2_2 { private void change(int x) { x = 3; System.out.println(x); } public static void main(String[] args) { int x = 5; ETPTest2_2 test2_2 = new ETPTest2_2(); test2_2.change(x); System.out.println(x); } }2018/10/158面向对象程序设计 1
  • 9. Practice 3求下面代码输入结果 public class Main { public void change(Obj obj) { obj.x = 3; } public static void main(String[] args) { Main main = new Main(); Obj obj = new Obj(); System.out.println(obj.x); main.change(obj); System.out.println(obj.x); } } class Obj { int x = 5; }2018/10/159面向对象程序设计 1
  • 10. Practice 4private float getVar(){return x;} 以下哪些可以重载上面这条语句 A.float getVar() B.public float getVar() C.public double getVar() D.protected float getVar() E.public float getVar(float f)2018/10/1510面向对象程序设计 1
  • 11. 函数的参数传递 —基本数据类型的参数传递 2018/10/1511面向对象程序设计 1
  • 12. 函数的参数传递 —引用数据类型的参数传递2018/10/1512面向对象程序设计 1
  • 13. 下一章节对象和类2018/10/1513面向对象程序设计 1
  • 14. JAVA中类的声明类说明语法: [ 类修饰符] class 类名 [ extends 超类名 ] [ implements 接口名 ] { 成员变量定义; 方法定义; }类体2018/10/1514面向对象程序设计 1
  • 15. JAVA中类的声明(续)类修饰符(Modifier): public:允许其他类(没有限制)访问本类,一个源文件仅可以有一个public类 abstract:没有实例的抽象概念类 final:不能再被扩展,不包含子类的类;易于安全性的实现,或用于创建固定功能的类 缺省:可被当前包中的其他类访问 父类继承声明:extends 父类名 实现接口(interface):implements 接口名 2018/10/1515面向对象程序设计 1
  • 16. JAVA中类的声明(续)例: public abstract class shape{…………} class rectangle extends shape{…………} final class roundrect extends rectangle {………………….} ?? final可以与abstract一起使用吗?2018/10/1516面向对象程序设计 1
  • 17. 类的成员变量的声明声明成员变量〔member〕的语法 [修饰符] 数据类型 变量名; 引用:对象名.变量 2018/10/1517面向对象程序设计 1
  • 18. 成员变量的声明(续)修饰符 访问控制符 public:可被所有其他类引用 private:仅可被该类自身引用和修改,不能被其他任何类(包括子类)引用 protected:该类自身、子类、同一包中的其他类 缺省:本包中的类 static:类成员变量,对所有的实例一致,引用是前缀可使用类名或对象名 final:数值不变常量,定义同时应对其进行初始化2018/10/1518面向对象程序设计 1
  • 19. 成员变量的声明(续)例: class shape{    private int x;    private int y;    static final float MaxArea=100.0f; …………………….. }2018/10/1519面向对象程序设计 1
  • 20. 方法的声明定义对类内成员变量(数据)的操作 方法的声明语法: [修饰符] 返回类型 方法名(参数列表) [ throws 例外名 ] { 方法体; } 谁可以调用方法、接受哪些参数、如何返回信息 2018/10/1520面向对象程序设计 1
  • 21. 方法的声明(续)修饰符(Modifier): 访问控制符: public、private、protected static:静态方法,又称类方法 使用类名或对象名作为前缀,建议使用类名 在方法体中只能使用static变量和static方法 abstract:只有接口没有语句,要在子类中通过重新定义(override)来实现 final:不能被重新定义(override)2018/10/1521面向对象程序设计 1
  • 22. 方法的声明(续)返回类型:void、return 参数列表:值传递 throws: 通告本方法中会产生的例外(异常)类型,提醒调用者要对相应的可能例外进行处理。当执行此方法并发生了例外时,程序会转入调用者编制的例外处理程序段。2018/10/1522面向对象程序设计 1
  • 23. 方法的声明(续)例: class shape{    private int x;    static float MaxArea=100.0f;    public void setx(int newx){x=newx;}    public static void setMA(float newMA){         MaxArea=newMA;    }    public final getx( ){return x} } 2018/10/1523面向对象程序设计 1
  • 24. 下一章节对象2018/10/1524面向对象程序设计 1
  • 25. 对象的产生Person p1 = new Person();执行完后的内存状态2018/10/1525面向对象程序设计 1
  • 26. 对象的产生当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的都是变量类型都是引用类型,如上面的Person及前面讲过的数组。 2018/10/1526面向对象程序设计 1
  • 27. 对象的使用创建新的对象之后,我们就可以使用“ 对象名.对象成员 ”的格式,来访问对象的成员(包括属性和方法) class TestPerson { public static void main(String[] args) { Person p1 = new Person(); Person p2 =new Person(); p1.age = -30; p1.shout(); p2.shout(); } } 程序运行的内存布局如下图 2018/10/1527面向对象程序设计 1
  • 28. 对象的生命周期 与基本类型的 生命周期一样2018/10/1528面向对象程序设计 1
  • 29. 对象的比较 “==”运算符与equals()方法的区别 怎样比较两个数组对象的内容是否相等 2018/10/1529面向对象程序设计 1
  • 30. Practice 6比较两个数组是否相等 1. 声明两个数组,并使他们各个元素相同 2. 调用Arrays.equals(a1, a2)方法 3. 打印出结果值2018/10/1530面向对象程序设计 1
  • 31. 实现类的封装性 如果外面的程序可以随意修改一个类的成员变量,会造成不可预料的程序错误,就象一个人的身高,不能被外部随意修改,只能通过各种摄取营养的方法去修改这个属性。 在定义一个类的成员(包括变量和方法)时,使用private关键字说明这个成员的访问权限,这个成员成了类的私有成员,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调用。 2018/10/1531面向对象程序设计 1
  • 32. 实现类的封装性 为了实现良好的封装性,我们通常将类的成员变量声明为private,再通过public的方法来对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作,我们分别定义两个方法来实现这两种操作,一个是getXxx()(Xxx表示要访问的成员变量的名字),用来读取这个成员变量操作,另外一个是setXxx()用来对这个成员变量赋值。 一个类通常就是一个小的模块,我们应该让模块仅仅公开必须要让外界知道的内容,而隐藏其它一切内容。我们在进行程序的详细设计时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供给外部尽量少的方法调用)。用总统指挥一支军队的例子来说明这种效果。 2018/10/1532面向对象程序设计 1
  • 33. 类的封装所带来的优点 隐藏类的实现细节; 让使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作; 便于修改,增强代码的可维护性; 2018/10/1533面向对象程序设计 1
  • 34. Assignment 1银行业务的程序结构 银行帐户类BankAccount 数据:余额、利率 操作:查询余额、存款、取款 查询利率、设置利率(选做) 主类UseAccount main()方法,创建BankAccount 类的对象,并完成相应操作2018/10/1534面向对象程序设计 1