2-1/69LectureNotesonObject-OrientedProgramming&Design~lwj/object-oriented/Dr.LIWenjunlnslwj@mail.sysu.edu.cn~lwj/DepartmentofComputerScienceSUNYAT-SENUNIVERSITY,GZ5102752-2/69第二讲Java语言基础•认识Java程序•Java程序的运行与调试★★•Java程序中的单词★★★•Java程序的文档化注释★★★•阅读JDK源程序•Java语言的特点★2-3/692.1认识Java程序•Java程序设计过程•Java程序的组织结构2-4/69Java程序设计也是一个建模过程建模实体概念类∕接口抽象具体现象对象模拟参照系统程序问题空间(ProblemSpace)解空间(SolutionSpace)2-5/69例子程序一:银行帐户管理银行帐户管理•管理张三、李四等多个银行帐户•提供开户、存款、取款、查询余额等功能2-6/69例子程序一的建模应用领域计算机程序银行帐户实体抽象概念类Account属性数据存款余额浮点数据balance行为方法存款方法deposit()取款方法withdraw()查询余额方法getBalance()约束无显式对应(隐式表达)银行帐户实体的具体实例对象张三的帐户对象zhang3李四的帐户对象li42-7/69例子程序一的源程序Account.java//银行帐户管理publicclassAccount{//银行帐户的属性privatedoublebalance=0;//存款余额//向帐户中存款,存款金额为amountpublicvoiddeposit(doubleamount){balance=balance+amount;}//从帐户中取款,取款金额为amountpublicbooleanwithdraw(doubleamount){if(amount=balance){balance=balance-amount;returntrue;}elsereturnfalse;}//查询帐户的当前余额publicdoublegetBalance(){returnbalance;}(未完待续)2-8/69(续上页)//主程序publicstaticvoidmain(String[]args){//为张三开设一个帐户Accountzhang3=newAccount();//张三的帐户存入500元后又取出100元zhang3.deposit(500);if(!zhang3.withdraw(100))System.out.println(取款余额不足!);//为李四开设一个帐户Accountli4=newAccount();//从张三的帐户取出150元存入李四的帐户if(!zhang3.withdraw(150))System.out.println(转帐余额不足!);elseli4.deposit(150);//查询张三和李四的帐户余额System.out.println(张三的帐户余额为+zhang3.getBalance());System.out.println(李四的帐户余额为+li4.getBalance());}}2-9/69•注释、语句、缩进、空行•文件名字类名与文件名相同。•特殊的方法:main()2-10/69例子程序一的另一组织方式Account.java//银行帐户publicclassAccount{//银行帐户的属性privatedoublebalance=0;//存款余额//向帐户中存款,存款金额为amountpublicvoiddeposit(doubleamount){balance=balance+amount;}//从帐户中取款,取款金额为amountpublicbooleanwithdraw(doubleamount){if(amount=balance){balance=balance-amount;returntrue;}elsereturnfalse;}//查询帐户的当前余额publicdoublegetBalance(){returnbalance;}}2-11/69Bank.java//银行帐户管理的演示程序publicclassBank{//主程序publicstaticvoidmain(String[]args){//为张三开设一个帐户Accountzhang3=newAccount();//张三的帐户存入500元后又取出100元zhang3.deposit(500);if(!zhang3.withdraw(100))System.out.println(取款余额不足!);//为李四开设一个帐户Accountli4=newAccount();//从张三的帐户取出150元存入李四的帐户if(!zhang3.withdraw(150))System.out.println(转帐余额不足!);elseli4.deposit(150);//查询张三和李四的帐户余额System.out.println(张三的帐户余额为+zhang3.getBalance());System.out.println(李四的帐户余额为+li4.getBalance());}}2-12/69例子程序二:更简单的Java程序Hello.javapublicclassHello{publicstaticvoidmain(String[]args){System.out.println(大家好!);}}2-13/69Java程序的组织结构•静态地看一个完整的Java程序由一个或多个类组成;其中至少有一个类中包含一个名为main()的方法。•动态地看Java程序从main()开始执行。嵌入式测试将测试代码与测试用例放在源程序中。为每一个类都设计一个main()方法,由命令行决定执行哪一个main()方法。嵌入式测试将测试代码与测试用例放在源程序中。为每一个类都设计一个main()方法,由命令行决定执行哪一个main()方法。2-14/692.2Java程序的运行与调试•Java开发环境与运行环境•Java程序的运行过程•Java程序的调试•典型的集成化开发环境(IDE)•Java程序的性能分析2-15/69Java开发环境与运行环境•JDK-JavaDevelopmentKit编译程序:javac打包工具:jar虚拟机(JVM):java文档工具:javadoc调试工具:jdbApplet工具:appletviewer•JDK的新版本名称J2SE-Java2Platform,StandardEditionJ2EE-Java2Platform,EnterpriseEditionJ2ME-Java2Platform,MicroEdition•JREvsSDKJRE-JavaRuntimeEnvironment•Versions:Java(Language)vsJDK(Environment)Java1.0-JDK1.0Java1.1-JDK1.1.xJava2-JDK1.2,JDK1.3,JDK1.4,JDK1.5,...2-16/69安装Java运行环境•下载JDK版:j2sdk-1_3_1_01a-win.exeJDK1.4版:j2sdk-1_4_0-win.exeJDK1.5版:jdk-1_5_0_04-windows-i586-p.exe•安装JDK并设置环境选择安装路径:例如,1.3版缺省路径为c:\jdk1.3.1_01设置环境变量:PATH、CLASSPATH。可采用启动脚本设置,也可直接在Windows中设置环境变量。AUTOEXEC.BAT(重新启动有效)path=%path%;c:\jdk1.3.1_01\binsetclasspath=.;c:\jdk1.3.1_01\lib注意不要遗漏当前目录!2-17/69Java程序上机过程编辑程序源程序编译程序字节码解释程序运行结果文本编辑器.javajavac.classjava•勿将源程序放在根目录,开设自己专用的文件夹。•不要使用文字处理程序(例如WSP或Word),可选用UltraEdit、EditPlus或集成化Java开发环境等专业文本编辑器。2-18/69•编译例子程序一(第一种组织方式):javacAccount.java•运行例子程序一(第一种组织方式):javaAccount2-19/69•编译例子程序一(第二种组织方式):javacAccount.javaBank.java或javac*.java•运行例子程序一(第二种组织方式):javaBank•注意以下命令会导致错误:javaAccount2-20/69•编译并运行例子程序二:javacHello.javajavaHello2-21/69JavaVirtualMachine(JVM)JVM定义了:•指令集(CPU)•寄存器集•类文件的格式•堆栈•垃圾收集堆•内存区域2-22/69JavaRuntimeEnvironment(JRE)JVM:装入代码+校验代码+执行代码2-23/69Java程序的调试•调试(debugging):程序员自己运行程序以发现、定位和改正错误。很大程度上依赖于程序员的技巧。•测试(testing):由程序员以外的专门小组检查程序是否有错。测试人员只负责检查程序是否有错,不必定位和改正错误。/测试只能证明程序有错,无法保证程序是正确的。•验证(verification):采用数学方法证明程序的正确性,可保证程序是正确的。正确性是一个相对的概念:规格说明vs实现。规格说明必须形式化。2-24/69Java程序的错误•编译错误:漏掉行末的分号、括号不配对、混淆了分号与逗号、标识符未声明、...(语法错误)编译程序会发现并报告所有的这类错误。/编译程序定位错误未必总是正确的!•运行错误:实际输出与预期输出不一致(逻辑错误)区别:Fault(Bug)、Failure。一个Fault可能引起多个Failures。2-25/69集成化开发环境(IDE)•IBMEclipse•BorlandJBuilder•SunNetBeans•WebGainVisualCafé•MicrosoftVisualJ++2-26/69Java程序的性能优化•原则:Firstmakeitwork,thenmakeitfast!•执行性能优化前必须首先探明影响代码性能的瓶颈。Profilingtools:网上搜索“java+optimi”或“java+profile”并下载试用版。使用JDK1.2开始提供的JVMPI(JavaVirtualMachineProfilerInterface)接口。•JVM自带的简单Profiler:java-XrunhprofclassJDK1.2orlater(生成java.hprof.txt)java-profclassJDK1.x(生成java.prof)java-XprofclasswithSun'sHotSpot2-27/69性能分析例子java-Xrunhprof:cpu=samples,thread=yProfileTestCPUSAMPLESBEGIN(total=7)WedAug2813:54:102002rankselfaccumcounttracemethod128.57%28.57%24java.lang.FDBigInt.add214.29%42.86%17java.lang.FDBigInt.quoRemIteration314.29%57.14%13java.lang.FDBigInt.add414.29%71.43%15java.lang