Methods(方法) 方法是语句的结合,方法中的语句可以访问 和修改类或类的对象中域,也可以使用域存 放的数据进行复杂的计算 方法体现了OOP中严格区分“做什么”和 “怎么做”的思想 方法(特别是 public方法)又被看作是类的设 计者和类的使用者之间的契约( contract
Methods (方法) • 方法是语句的结合,方法中的语句可以访问 和修改类或类的对象中域,也可以使用域存 放的数据进行复杂的计算 • 方法体现了OOP中严格区分“做什么”和 “怎么做”的思想 • 方法(特别是public方法)又被看作是类的设 计者和类的使用者之间的契约(contract)
Declaring Methods(声明方法 class BodyPrinti public static void main(Stringl args)←方法头 Body sun= new Body(“Sun”); Body earth= new Body(“ Earth”); earth orbits=sun System. out. printIn(“Body”+ earth. name+ “ orbits”+ earth. orbits. name) Java Body print 方法体 Body earth orbits Sun
Declaring Methods (声明方法) • 方法位于类体中,方法声明由方法头和方法 体两部分构成,方法头中要声明方法的返回 类型和方法可能跑出的异常列表 () { /*…方法体…*/ } • 如果方法头中声明的返回类型不是void,则方 法体结束时必须通过return语言返回执行结果 class BodyPrint{ public static void main(String[] args) { Body sun=new Body(“Sun”); Body earth=new Body(“Earth”); earth.orbits=sun; System.out.println(“Body ”+earth.name+ “orbits ”+earth.orbits.name) } } java BodyPrint Body Earth orbits Sun 方法头 方法体
Method modifiers(方法的修饰符) 方法可使用一下修饰符 访问控制修饰符一与域相同 bstra一声明为 abstract的方法没有方法体,一般定义在抽象 类中,被子类实现 statie一声明为 static的方法是类的方法,否则为对象的方法 n-声明为fnal的方法不能被子类覆盖 overridden synchronized一当方法可能被多个线程、为了保持对象状态的 致性,可以通过 synchronized来控制线程对方法的访问 native一声明为 native的方法,又称为本地方法,这种方法通 常由其它语言实现 stricti一与类相同
Method Modifiers (方法的修饰符) • 方法可使用一下修饰符: 访问控制修饰符— 与域相同 abstract — 声明为abstract的方法没有方法体,一般定义在抽象 类中,被子类实现 static — 声明为static的方法是类的方法,否则为对象的方法 final — 声明为final的方法不能被子类覆盖(overridden) synchronized — 当方法可能被多个线程,为了保持对象状态的 一致性,可以通过synchronized来控制线程对方法的访问 native — 声明为native的方法,又称为本地方法,这种方法通 常由其它语言实现 strictfp — 与类相同
Access control(法的问挥制 通过访问控制修饰符( access modifiers可以限制方 法在类或对象外部的可见性 pube一共有的,方法在任何地方都可以通过 类或类的对象调用 protected—受保护的,方法仅在类体中、子类 类体中或同包的其它类类体中可调用 rite一私有的,方法仅在类体中可调用 package—默认的,没有任何访问修饰符修饰的 方法,仅在类体中、同包的其它类类体中可调用
Access Control (方法的访问控制) • 通过访问控制修饰符 (access modifiers)可以限制方 法在类或对象外部的可见性 public — 共有的,方法在任何地方都可以通过 类或类的对象调用 protected — 受保护的,方法仅在类体中、子类 类体中或同包的其它类类体中可调用 private — 私有的,方法仅在类体中可调用 package — 默认的,没有任何访问修饰符修饰的 方法,仅在类体中、同包的其它类类体中可调用
Invoking Methods(调用方法 class Body e00 public String toString return“Body”+name; public static void main(Stringl args t Body earth= new Body(“ Earth”); System. out. printIn(earth); java body Body earth
Invoking Methods (调用方法) • 对于static方法,可以通过“类名.方法”调 用 System.gc() • 对于对象的方法,在对象被创建后,可以通 过“对象的引用.方法”调用 System.out.println(…); class Body{ …… public String toString(){ return “Body ”+name; } public static void main(String[] args){ Body earth=new Body(“Earth”); System.out.println(earth); } } java Body Body Earth
public class Permissions( A public boolean canDeposit, can Withdraw, can Close, public class BankAccount private long number, private long balance; public Permissions permissions For(Person who)t Permissions perm=new Permissions; perm can Deposit=can Deposit(who); perm can Withdraw=can Withdraw(who); perm can Close=can Close(who) return perm;
Method Execution (方法的执行) • 方法被调用后,执行的结果可能有以下几种: (1) 通过return语句返回结果 (2) 执行到最后一条语句,自动结束 (3) 抛出未捕获的异常 public class Permissions{ public boolean canDeposit,canWithdraw,canClose; } public class BankAccount{ private long number; private long balance; public Permissions permissionsFor(Person who){ Permissions perm=new Permissions(); perm.canDeposit=canDeposit(who); perm.canWithdraw=canWithdraw(who); perm.canClose=canClose(who); return perm; } …… }
ass passe public static void main(Stringl args t Body sirius= new Body(“ Sirius”);/天狼星 System. out. printIn("before:"+sirius. name); commonName(sirius); System. out. printIn("before:"+sirius. name); public static void common Name(Body bodyreft bodyRef. name=“ Dog Star”; bodyRef=null Java PassRef before: sirius after: Dog Star
方法的参数传递 • 方法调用时参数值的传递可以分为“值传递” 和“引用传递”两种 • 值传递 — 当方法的参数为基本数据类型时, 实参的值被复制给形参,改变形参不会影响 实参的值 • 引用传递— 当方法的参数为对象引用时, 实参和形参都同时引用了同一对象,通过形 参修改对象的状态后会影响对象的其它引用 class PassByValue{ public static void main(String[] args){ double one=1.0; System.out.println(“before: one=”+one); halveIt(one); System.out.println(“after: one=”+one); } public static void halveIt(double arg){ arg=arg/2.0; System.out.println(“havled: arg=”+arg); } } java PassByValue before one=1.0 halved arg=0.5 after one=1.0 class PassRef{ public static void main(String[] args){ Body sirius=new Body(“Sirius”); //天狼星 System.out.println(“before: ”+sirius.name); commonName(sirius); System.out.println(“before: ”+sirius.name); } public static void commonName(Body bodyRef){ bodyRef.name=“Dog Star”; bodyRef=null; } } java PassRef before: Sirius after: Dog Star
Overloading Methods(方法重载) 方法的签名 (signature):声明方法的方法头 中方法名加上方法的参数列表 类体中不能声明签名完全相同的两个方 当两个方法具有相同的方法名,但有不同数 量或类型的参数,而导致不同的方法签名时 称这两个方法互相重载 System,out. println(earth) System, out. printIn(100)5 System, out printIn(new Body( Sun)
Overloading Methods (方法重载) • 方法的签名(signature):声明方法的方法头 中方法名加上方法的参数列表 • 类体中不能声明签名完全相同的两个方法 • 当两个方法具有相同的方法名,但有不同数 量或类型的参数,而导致不同的方法签名时, 称这两个方法互相重载 System.out.println(“earth”); System.out.println(100); System.out.println(new Body(“Sun”));
main方法 main方法必须声明为以下格式: publie static void main (stringll args).) main方法是程序执行时第一个被执行的 方法 以main方法作为执行起点的程序又 称为 Java Application
main方法 • main方法必须声明为以下格式: public static void main(String[] args){…} • main方法是程序执行时第一个被执行的 方法 • 以main方法作为执行起点的Java程序又 称为Java Application
△ aSsignments(作业 完成课本第二章的下列习题 P51练习2.9P54练习2.10P59练习2.12 P59练习2.14P61练习2.16P62练习217 (下周一之前上传) 阅读课本第六章6165小节写阅读报告 (周日前上传)
Assignments (作业) • 完成课本第二章的下列习题 P51 练习2.9 P54 练习2.10 P59 练习2.12 P59 练习2.14 P61 练习2.16 P62 练习2.17 (下周一之前上传) • 阅读课本第六章6.1、6.5小节,写阅读报告 (周日前上传)