java课程2010内容串讲a.ppt

上传人:本田雅阁 文档编号:2201882 上传时间:2019-03-03 格式:PPT 页数:47 大小:173.01KB
返回 下载 相关 举报
java课程2010内容串讲a.ppt_第1页
第1页 / 共47页
java课程2010内容串讲a.ppt_第2页
第2页 / 共47页
java课程2010内容串讲a.ppt_第3页
第3页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《java课程2010内容串讲a.ppt》由会员分享,可在线阅读,更多相关《java课程2010内容串讲a.ppt(47页珍藏版)》请在三一文库上搜索。

1、1,Chapter01 计算机系统概述,熟悉java编译的过程: 源文件(文件名.java) 目标文件(文件名.class) 通过JVM/解释器 运行 了解: 运行java程序的基本过程(在Eclipse环境下) Types of Errors: Syntax, Run-Time, Logic error. 能否举出实际例子?(了解) 文件名.class为后缀名的文件是什么?在什么阶段产生的?是可直接运行的二进制可执行文件吗? (此处是byte code, 而只有.com和.exe是在PC上可直接运行的二进制可执行文件,需要另外单独转换) 如果一个系统想运行Java程序,必须安装JDK吗? S

2、yntax Rules for Identifiers (见下页或原先课件),2,Chapter02 数据与表达式,原型/基本/原生类型: (变量分为原型类型和类类型) 原型类型强调: 小写开头 (习惯. 又例如: 变量Can11是否合法?) 包装类: 大写 (规定) 自己写的类: 大写(习惯) 例如: Boolean类型和boolean类型的区别, Int的写法和int类型的区别 Java中的简单数据类型一般是指原型类型 赋值语句与表达式: 赋值的含义, 原型类型赋值与类类型变量赋值的区别 标识符的命名规则: 1.字母和下划线_开头, 含字母,数字,下划线; 2.不能用关键字; 3.$可以开

3、头或在标识符内,但慎用. 4.符号”-”可以吗? 5。eclipse是保留字吗? Java区分大小写: 例如: Return是关键字吗? 可做变量吗?,3,原型类型讨论: 原型类型占用的内存字节数量, 其变量的取值范围? 例如: byte、char和short类型各占用多少内存? 取值范围? 专用赋值运算符:a +=b;a +=b-;含义? 简单输入与输出: 语句System.out.println(eggsPerBasket + “ eggs per basket.”)中“+”号的含义? System.out.println( “ a=“ + a ); System.out.println(

4、 a+b+ “ a=“); System.out.println( “ a=“ + a + b); 数字常量: 八进制、十六进制、e记数法的正确写法 赋值兼容性问题: 隐式转换规则: 类型强转: int i=2.0 有问题, 必须添加强转指令(int) int a=a;合法。 Long a =1000; 是否合法?(掌握自动包装的概念),4,算术运算符: + - * / % + - 等等 表达式内部生成值类型一般先转为较复杂类型 例如: int x=12, y=5 则 x/y=?, (x+10)/y=? 例如: int x; double y; x+y结果的类型? 括号和运算符优先级规则 (见

5、附录D) String类字符串变量, 连接(+)操作和其他String方法 常用的String方法:length(), toLowCase(), substring(),replace(),charAt(), toCharArray()等等. a.toLowCase( ).substring(1,4)的含义? (了解) 键盘和屏幕 I/O-println和print 转义字符的含义与使用: System.out.println( “ this is an apple“ ); System.out.println( “ this is at apple“ ); System.out.printl

6、n( “ this is a apple“ );,5,字符串对象的两种生成形式 String name1= new String(“James Gosling”); String name1= “James Gosling”; 问题: 如何比较两个字符串的长度?是用什么方法? 是.Length()方法还是 .equals()方法? 问题: String name= new String100; 执行后各元素的内容是什么? 掌握String类型变量执行方法后的内容不变性。 了解基本类库和标准类库中各种包(见下页解释)的导入方法。(import 语句的用途) 知道包装类的各种方法的用法及转换方法。

7、 自动包装的概念:Int x=180; 了解随机数生成器对象的创建和使用。 了解Math类的各种方法的基本用法。 了解格式化输出的类的基本用法。,Chapter03 使用类和对象,6,Chapter04 定义类与方法(编写类),类与方法:类中的变量有两种: 实例变量: 跟着对象走, 不同对象有不同副本(要引用实例变量的话,必须标明是哪个对象的) 实例变量在创建对象时由java初始化. 举例:int型实例变量x在创建对象时被java初始化为0. 静态变量: 跟着类走, 只有一个副本 静态变量: 其值也是由java初始化(定义时). 方法: 分类: 有返回值方法(用return语句返回) 注意:

8、一般不能出现返回值和方法头不一致的情况 和无返回值 (方法头: void, 或称为空方法) 调用方法: 静态方法: 通过类名 ( 例如: Math.sqrt(33); ) 非静态方法: 通过对象名,int mm(int l) return 99.99,只可以隐式转换,7,方法中的参数:(形参不能用public、static等修饰) 原型类型-传值 对象-传址 调用方法时形参和实参类型不匹配时, java可以进行自动类型转换. (转换顺序是java默认的规则) 方法中声明的变量-局部变量 局部变量-只在方法体内有效, java不自动给予初始化,使用时必须由程序员来进行初始化. 块中声明的变量也是

9、局部变量 信息隐藏和封装-修饰符: this, public, private this: 表示当前的对象 问题: 在main方法中是否可以有this.n出现? (假设n为静态变量) (N) public: 对实例变量和方法的使用没有限制(可以在类的定义体外使用) private: 对实例变量类定义体之外不能直接引用该变量. 对方法类定义体之外不能调用该方法,只能修饰实例变量,8,protected修饰符的基本属性是什么? (掌握) 比如对属性的使用范围的限制!子类是否可用?其他的类能否使用?(该修饰符的作用介于public和private之间) 对象和引用: 类类型变量和原型变量的比较: 原

10、型变量包含该变量的“值” 对象(类类型变量)只能存放该对象在内存中的首地址 类类型变量在方法中作为参数: 类类型变量作为参数出现时也是“传值”, 而因为对象存储的是内存块首地址, 所以其最终传递了“传址”. (实参把“首地址”传给了形参) 注意类类型变量中=和=的使用 信息隐藏和封装的基本思想是什么? 什么样的做法算是信息隐藏, 封装? (例如通过方法来访问实例变量, 各种修饰符的采用等等),9,Chapter05 条件和循环语句,条件运算符的含义:y=(num1num2) ? num1:num2); 分支语句 if .else 布尔表达式: 注意=号的含义, 以及各种比较符号(=等) Jav

11、a复合布尔表达式逻辑运算符号 (|, &等) 若score为double类型,则if(score = 90)结果? 字符串比较: equals方法 (比较两串的字典顺序) 多分支if else及switch语句(break语句在这里的含义, 缺省该语句的情况怎么办? 例如:循环内部含switch语句,而switch内有的缺省有的不缺省,每次循环执行switch时都不走同一路线,怎么办?) Switch语句的控制表达式的内容要求 (什么类型? 4种) 循环语句 while, do-while, for break, continue, exit等语句的含义与用法 例: 在多重循环中执行break

12、结果是什么?是跳出所有循环的层次吗? 又例:执行continue的结果是跳出本次循环而重新开始吗? 在循环语句中执行return的结果是什么? 注意while()语句括号中的值为布尔变量, 为true或false. 例如: int x=10; while(x+). -结果?,10,continue 的基本意思:结束本次循环,跳到哪里? break 的基本意思:跳出循环体(单重?多重的情况呢) return 的基本意思:跳出所有循环,返回上级方法或系统。 布尔表达式及布尔变量 常用符号及运算优先级规则(见附录D) 布尔表达式的基本含义(到底用来干什么? ) 讨论: 例如: int a=10,b=

13、10,c=10; if(a+b)|(ac)System.out.println(“kkkkkk”); 结果? (答案: 能够打印”kkkkkk”) 问题1: 假设执行System.out.println(x/9);之后, x有变化否? 问题2: 假设执行System.out.println(x+/9); 之后, x有变化否? 迭代器的概念:仅做参考,11,本章复习题目: 基本概念题(如上页-可做选择题目) 使用上述控制流语句等编写程序: 写出循环体的执行结果。 问题:使用循环嵌套:编写程序-实现矩阵的乘法。(使用几重循环?) 问题:找出一个数据区域中满足某种条件的数据。(熟练使用/, %等算术

14、运算符) 进行计算 数制的提取和运算(例如:寻找1000到1800之间的个位与十位之和为某个固定值的所有的数) 问题:如何计算得到其个位和十位等各个数位的值? 数列的阶乘 例如: 1/n!-根据精度要求求出n的值 综合一点的计算题目: 例如: 1+1/2!-1/4!+1/6!+(-1)n+1*1/(2n)! (涉及方法(带参数)的调用等) 自己找题目练习,也可参考当时课堂练习,12,Chapter06 面向对象设计,方法的调用: 类名/对象名.方法名 this.方法名 (当要调用的方法在同一个类中时, this可以省略) 静态方法 修饰符: static 静态方法可以不需要任何类型的对象而直接

15、调用(类名.方法名) 静态方法不能调用类中的实例变量 (即使是在main方法中也不行, 要调用的话必须创建对象, 并指明是哪个对象的实例变量) (问题: 在main方法中是否可以有this.n出现? (假设n为静态实例变量) ) 静态方法不能调用类中的非静态方法, 除非创建对象 静态方法可以调用静态方法 (同类方法可以互相调用) 非静态方法可以调用静态方法 (java的合理规定) 。,13,静态变量 修饰符: static 静态变量只有一个副本, 即使所在的类已经创建多个对象也是如此. (静态变量在定义时即由java自动赋予初始值,在方法中可以直接使用之) 静态方法可以调用静态变量。 回顾:M

16、ath类, Integer类及其他包装类的基本意义 Math类的标准数学方法(图5.9) 包装类的基本含义和用途 重载 在同一个类中拥有一个以上相同名称的方法定义, 称为方法名称重载 当方法名称被调用时, java根据参数的数量、类型、次序来判定应该使用哪个定义 方法调用时的参数可以进行自动类型转换(转换原则是隐式的由低到高原则),但要慎用,因为有时会引起混乱. 无法根据返回值的类型来实现重载!(什么意思? 搞明白!),14,构造函数及编写时的约定: 构造函数是在 (利用new) 创建对象时所调用的一种方法, 一般用来初始化对象中的实例变量 程序员没有编写任何构造函数(没有显式定义), jav

17、a将自动提供默认的构造函数 程序员一旦自己编写构造函数, java不再自动提供任何默认的构造函数 程序员一旦自己编写构造函数, 则必须自己写出一个默认的构造函数, 否则一旦使用默认函数时java将报错 . 构造函数中可以使用/调用该类定义中的其他方法. 使用new 语句创建对象时,自动调用构造函数(若构造函数有println语句,则在屏幕上会有输出内容) 用new语句创建一个子类对象时,怎样创建父类对象?(答:首先创建父类对象,要不显式的写出来,要不自动首先创建) 构造方法的作用域标识符必须是public吗? 构造方法的形参个数有限制吗?,15,包(了解) 使用import语句指明要引用的源程

18、序的路径,而不是要引用该包的全部源程序. 同一个包中的各个类,其类名可以相同吗? (了解),16,Packages (包的概念) (了解),起因: 目前编写程序时, 一个类一个文件, 以后的大程序可能有很多文件(类), 放在同一个文件夹里面查找很麻烦,也可能用到别人写的文件(类)集合, 于是有重名的问题等等 举例: 自己的文件放在 d:/work/software/test01文件夹中, 别人的放在 d:/work/software/test02文件夹中. 要是使用别人的文件或类, 需要: 在对方的类中声明 package test02 在自己的类的声明 import test02.* 或im

19、port test02.文件名 类路径基目录: d:/work/software (基本的目录层次) 当前目录: 是包的名称. 包: 是分组到同一个目录中的许多类的集合,17,了解接口的含义 了解Comparable接口, Iterator接口。 了解枚举类型,18,Chapter07 数 组,创建数组格式: Base_Type Array_Name = new Base_TypeLength; 数组下标从0开始 数组的可选的初始化方法(可以声明时用花括号, 也可以用程序) 可选的数组初始化方法: Object oob=new int 8,9,10; int a=(int)oob; float

20、 s=new int10; X(错误性质:让编译器自动将一个整型数组转换成为一个浮点型数组,而java编译器无此能力) 数组对象的实例变量-length的使用: for(i=0;im.length;i+) 数组在类与方法中的应用 数组可以当实例变量 数组元素当方法参数 数组名当方法参数 方法可以返回数组名,19,main方法的参数(命令行式的参数传递)(了解) 方法main采用String类型的数组作为参数: public static void main(String args) 举例: 命令行: Java TestProgram Josephine Student 则args数组的赋值?

21、注意: 数组作为对象, 使用=和=时如同对一般对象 多维数组的基本定义方法 (会定义) 掌握:循环语句处理数组的基本技巧 使用循环语句处理数组很合适: 一重for循环可以处理一维数组, 二重for循环可处理二维数组 例如:二维数组元素的有条件填充、读取和处理变换等,20,数组的排序(sort array of numbers in the ascending or descending order ) -掌握 掌握:课件中的方法(一个方法内解决): public void seletionSort( int a ) 了解:本书中带接口的较通用的写法。 数组的查找(search method)

22、-掌握 掌握:课件中的方法(一个方法内解决): public int binarySearch(int number,int searchValue) 其他教材和参考书的解法。 递归式的解法。 基本了解:本书中带接口的较通用的写法。,21,Chapter08 继 承,继承的概念: 继承允许我们先定义一个很通用的类(基类), 然后通过添加细节定义出较专用的类(派生类) 派生类对基类的继承性(包括实例变量和方法). 派生类的添加性(也包括实例变量和方法). 继承实际上经常性的包含了方法的覆盖,覆盖解决了子类和父类之间的重名问题。 派生类的构造函数 Use super to invoke a con

23、structor in parent class 一般用来初始化哪里的实例变量? 合理的派生类构造函数应该怎样初始化各个实例变量? 怎么样初始化基类的实例变量, 怎么样初始化派生类自己的实例变量? Use super to invoke a common method in base class(使用super可调用基类的一个普通方法,或者一个被派生类覆盖的方法) Use this to invoke a constructor within the class 问题:派生类继承父类的构造函数吗?(No !),22,掌握:super的使用问题: 如果在子类构造方法中使用super关键字,必须放

24、在开始之处吗? 创建子类的对象时,是首先运行完子类自身的构造方法吗? 子类不使用super关键字调用父类的构造方法时会是什么情况呢?,23,覆盖: 在派生类中, 若一个方法定义与基类中已有的某个方法拥有同样的名称, 参数数目及类型, 则称为覆盖 覆盖的过程:创建派生类对象后, 调用被覆盖的方法时, 调用的是派生类自己的方法 例如:原教材图7.13(画字符图形的程序) Triangle top = new Triangle(indent, topWidth); Box base = new Box(indent + (topWidth/2) - (bottomWidth/2), bottomHe

25、ight, bottomWidth) top.drawAt(1); base.drawAt(0); 注意:方法drawAt()是基类方法而不是子类方法,该方法里面要执行方法drawHere( ),而这个方法在基类和子类都存在,那么在执行上述top.drawAt(1)方法时执行的是哪一个drawHere( ) ? ( 答案: 因为top是派生类对象,所以仍然执行派生类的方法drawHere( ) ) 假设top是Figure类型,若将其指向子类,那又怎样?,Figure: 图形,Box 矩形,Triangle三角形,24,注意: 定义覆盖方法的时候, 不能修改方法的返回类型. 例如方法名及参数相

26、同, 但方法头分别是int和double的两个覆盖方法的定义, 编译器会报错. (结论:无法根据返回值的类型来实现覆盖!) final 的含义: 修饰属性:该属性不能使用程序语句来改变。 修饰方法: 该方法不能在子类中被覆盖。 修饰类名: 该类不能被继承。 问题:final可以修饰什么?能禁止本类之内的重载吗? static和final同时修饰一个属性时,必须赋初值吗? 派生类的类型 派生类对象属于所有的祖先类型, 故能拥有多个类型 左边祖先类对象=右边派生类对象 /合法 举例: Person p1=new person(); Student s1=new student(); 则语句:p1=

27、s1; /valid 而语句:s1=p1; /invalid,25,Object类-所有类的祖先类 Object类的含义、用途等。 举例:Object x ; x=“abc”; /合法: 左边祖先类对象=右边派生类对象 抽象(abstract)方法和抽象类 抽象方法: 某些方法并不打算实际应用,仅仅打算有派生类覆盖, 且有派生类的对象调用.则可以声明为抽象方法. 那么,抽象方法仅包含什么?不包含什么? 抽象类: 若类中至少有一个抽象方法, 则该类必须声明为抽象类 问题1:abstract类中是否可以有别的非abstract方法? 问题2:abstract方法在其子类中是否必须被实现? 问题3:

28、abstract可以修饰什么? 问题:abstract修饰的类有祖先类吗? Dynamic Binding与Polymorphism variable的提法: 各种文献解释有侧重, 但无论如何都是指在运行时间(run time)确定最终运行的程序实体.,26,动态绑定举例:在运行时才确定最终跳转地址的现象称为动态绑定(动态覆盖技术) class Z void f(int x) void f(double x) class P extends Z void f(int x) void f(double x) public class TestOverride public static void

29、 main(String args) P t = new P(); t.f(10); t.f(10L); t.f(2.5); 注意上述例题的类型隐式转换问题, 若不能隐式转换则由java报错,变量类型决定能调用的方法(根据自身定义),对象决定使用哪个方法(根据现在的指向),27,针对上页的问题: 若Class P中删除掉方法f(double x), 结果? 答: 执行方法t.f(10L)和t.f(2.5)都实际执行Class Z中的f(double x) 若main方法中改为Z t=new P(); 问题如下: 若此时Class P中删除掉方法f(double x), 结果? 答: 方法t.f

30、(10L)和t.f(2.5)都实际执行Class Z中的f(double x) 若此时Class Z中删除掉方法f(double x), 结果? 答: 编译报错, 方法t.f(10L)和t.f(2.5)都不行. 若main方法中依旧为P t=new P(); 但Class Z中添加了方法f(long x); 则结果? 答:方法t.f(10L)实际执行Class Z中的f(long x); 因为java是先查找派生部分的方法, 若不匹配则查找基类的方法, 实在不行最后再隐式转换. (根据学生提问整理),28,弄清多态和动态绑定的概念。 对象可以有多种类型的具体化: 左边祖先类对象=右边派生类对象

31、 实际的问题:如果使用父类的引用指向子类的对象,那么可以直接使用此引用调用子类的所有方法吗? 仅了解:利用接口实现多态性 基本问题:java中一个类是否可以实现多个接口? java中一个类是否可以同时继承一个类和实现其他接口?一个接口是否可以继承自另外一个接口? 基本问题: java的单继承有什么好处?(了解) 排序:掌握课件的“一个方法内解决问题”。的写法 或课本中:listing9.9的写法。 查找:掌握折半查找的各种实现方法的写法。,Chapter09 多态性,29,关于书写程序:必须了解书写一个类的基本写法:,问题: 有一个不完整的基类,能否填写一个基类的set()和get()方法?

32、有一个不完整的派生类(右图Box),能否根据语义填写该类的方法 (必要的构造方法(不包括默认构造方法)和其他方法?) 假设有一个Personnel类(员工)的数组s(Personnel s) , 其元素包含了正式工, 临时工, 钟点工 等派生类型的对象, 试写一排序程序, 使s中的所有员工档案按工龄长短 重新排列顺序. (了解) public void sort(Figure s) (基本思路是什么?),Personnel: 员工,正式工,临时工,钟点工,30,意义:通用性-顺延的命题-数组中对象的排序问题 假设有一个Figure类的数组s(Figure s) , 其元素包含了Box, Tri

33、angle, Circle, 等类型的对象, 试写一排序程序, 使s中的所有形状按周长(round) 大小进行某种顺序排列. (了解) public void sort(Figure s) (那么,其基本思路是什么?)(了解),Figure: 图形,Box 矩形,Triangle三角形,31,Chapter10 异 常 处 理,Java中的异常处理语法: try-throw-catch 掌握java异常处理的流程 注意: catch语句块只应用于紧贴其前的try语句块 注意: 异常是一个对象, 而Exception类是所有异常类的根类, 是最通用的异常类. 可以自己定义异常类 异常的声明和转移

34、 当本方法只抛出异常但又不处理, 则必须在方法头用throws语句进行声明, 让上级方法来捕获处理. 编写异常处理程序时, 特殊异常处理在先, 一般异常处理在后, 否则? 异常的分类: Exception类是通用异常类, 而ArithmeticException异常是变量做分母时其值为0而产生的算术运算异常,而IOException是输入输出(例如文件操作)时的异常, 还有FileNotFoundException等等 .,32,注意:忽视(ignore)异常处理的结果是什么? 若java程序声明了异常, 但整个程序忽略了处理, 也没有抛给java系统, 则编译报错! (文件处理时经常遇到。)

35、 说明1: try-throw-catch 结构中的throw语句的用法 课本的示例程序是人为设计的, 用了throw语句, 实际程序中可能只有try-catch结构, 此时若在try语句块中出现异常, 一样被java抛出并被catch语句块捕获并处理 finally语句块的执行原则: 只要进了try-catch-finally Block, 即使没有异常, 也执行finally-block 在try-catch-finally Block, 有异常并捕获, 执行finally-block 在try-catch-finally Block, 有异常没有被捕获, 也执行finally-block

36、 通过练习增进对finally语句块的理解 参见习题课中关于异常的练习题(三次习题课其中的第3次),33,finally语句块的执行示例(掌握!) 举例: int i=20; int b=new int10; void mm() throws Exception try System.out.println(bi); catch (IOException e) . finally System.out.println(“finally”); 问题1: 出现IOException异常和不出现该异常时的执行次序? 问题2: 若方法mm带有int型返回值, return语句出现在catch语句块的最

37、后, 假设异常被捕捉,那么其执行次序是什么? 假设try版块中语句是return bi;该版块没有异常出现,那么执行顺序?若本句有异常,则顺序?,实例变量,34,关于不可检测异常(RuntimeException类)的说明: 不可检测异常可以不捕捉(不用trycatch结构),不声明(不用throws语句来声明 ) 问题1:是否可以编写程序定义一个RuntimeException类的子类?(Y) 问题2:即使在方法调用时没有自己抛出异常,则是否可在方法中用throws语句来声明和标识异常? (Y) 问题3:finally段中的语句,是否允许再次出现异常?(Y) 简单问题:创建异常对象(带有表示

38、提示信息的参数)然后抛出,捕捉后怎样显示该异常对象的信息?(用什么方法?),35,Chapter10+ 流与文件I/O,概念: 流是一种对象, 用于数据流动,它可以把数据输出到目标, 也可以从数据源输入或读取数据 输入流, 输出流的概念 Text File I/O: (了解文本文件的输出) PrintWriter outFile = new PrintWriter(new BufferedWriter (new FileWriter (“test.dat“); 总的含义: 打开文件“test.dat“准备输出. 输出到文本文件: outFile.println(); 关闭文本文件:outFil

39、e.close(); 注意异常: FileNotFoundException,36,了解:文本文件的输入(listing 5.11) 了解:文本文件的输出(主要掌握第十章的Listing10.7) 注意: 不会单独考察文件操作, 一般结合其他的计算问题, 例如从键盘读入数据并计算, 或把计算及处理结果写入文件, 等等. 参见习题课中关于文本文件的练习题,37,Chapter11 递 归 (掌握!),递归的基本概念. 递归: 方法定义中包含对自己的调用. 递归方法中的一个语句块(选择)应该不调用本身, 而应该是直接结果. 而每次调用本身必须“smaller version of itself”

40、,这样才可能达到中止条件 能够写不太复杂的递归方法. 先写出递归调用主体 再写出递归的停止情况 通常有if-else语句 参照、掌握课堂讲解的内容. (当时的练习题等) 深入分析递归过程,完全掌握课堂讲解的内容, 达到习题课上对递归问题写作方法的要求, 能将以前章节的某些算法改写成递归算法。 (可以自己寻找一些题目进行练习),38,Chapter12 集合 (掌握 !),12.XX 链表 看懂结点类(10.4 ListNode)和链表类(10.5StringLinkedList)以及(10.8LinkedListDemo)的基本定义及含义: 掌握链表类中各种基本方法的实现 length() a

41、ddANodeToStart(String addData) deleteHeadNode( ) Find(String target) showList() 等方法的具体写法 . 对已经存在的链表执行某种操作(例如: (1)读出链表数据进行排序. (2)遍历链表, 依次将符合条件的节点数据存入一个数据结构或文本文件等. (3)在无序的旧链表基础上建立一个有序的新链表. (3)针对已有链表,反顺序输出结点数据内容等) 问题: 若ListNode类中的实例变量data和link都改成public型,那么上述方法如何改写? (了解) 内部类和迭代器-知道课堂简介,39,接上页: “链表内容存入文本

42、文件”的基本思路?(基本了解)(回答同学提问) 主要参考第十章的listing10.7的结构 步骤: 1. 创建输出流对象, 打开文本文件 (可使用trycatch结构捕捉异常)(捕捉异常的结构见邮件中TextFileOutputDemo.java) 2. position=head; 用遍历的方法找出每一个data . 用 “流对象.println()”方法写入文件. 3. 最后关闭文件等. 遍历链表,将某些内容存入其他数据结构呢?(掌握!),40,(掌握)推荐链表类程序: StringLinkedListWithIterator.java 含有内部类,因此各个方法都重写,涉及实例变量的使用

43、方式。 插入一个节点不再仅是一种方法,本程序提供了两种节点插入方法:(1)在链表的第一个节点之前插入新节点; (2)在某个节点后面插入新的节点。 问题:如何在链表中某个特征节点后面插入新节点? 含有迭代器式的处理模式:例如在方法length()里面有 “position = position.link;” 语句。 删除节点也新的更切合实际的方法设计: deleteCurrentNode( )-删除当前节点;如何删除的?具体思路是什么? 问题:如何在链表中某个特征节点后面删除新节点? 同时注意研究该程序的其他方法。,41,问 题 答 疑 注: 本解答并非与考题有直接关系, 只是根据学生提问整理而

44、成,(1): 数组定义: int a =new int15; int a=new int15; 哪个正确? 答: 都可以. 编译器将接受上述两种表示方法. (2): 基类方法为public int a(int x, int y); 派生类方法为int a(int x, int y); 可以这样覆盖吗? 答: 不可以. 方法覆盖时必须修饰符完全一致 这种写法实际上是缩小了方法的使用权限(在目前学习阶段没有缩小权限,但在使用包的情况下权限将缩小) (3):基类方法为public int a(int x, int y); 派生类方法为public void a(int x, int y); 可以这样

45、实现 覆盖方法吗? 答: 不可以. 编译将报错,因为这既不是方法的重载(译文版教材: 无法根据返回值的类型来实现重载), 也不是方法的覆盖(方法名之前的修饰符要完全一致, 方法名之后的参数数目, 类型要完全一样 ),42,(4): 若在派生类中自己编写缺省构造函数, 而在里面又只初始化了部分的实例变量, 那么另外的实例变量的值是否还被自动初始化? 答: 现在版本的java仍将对缺省构造函数中未能涉及到的实例变量进行初始化。 例如:某个类PetRecord有三个实例变量 private String name; private int age; /in years private double

46、weight; /in pounds 若缺省构造函数为: public PetRecord( ) name = “No name.“; age = 0; / weight = 5; 则创建对象后, 打印实例变量的结果为: “No name.“, 0, 0.0,43,(5): 数组定义: int a =new int15; int a =new int15; 哪个正确? 答: 第一个正确. Java对第一个的处理为: 先申请一个一维数组,长度为15, 可以在程序中对该一维数组的某个元素用new语句申请不定长的空间. 从而实现不定长数组. 而第二个数组的表示方法. Java将报错, 因为无法处理.

47、 (Java 提示: Java无法在一个空数组后面再确定一个数组的维数) 象这样一维数组的定义: int a =new int; 肯定也错误. (6): 构造函数与一般的方法有何区别? 专门用来在创建对象时进行初始化. 构造函数与所属的类同名. 没有返回值类型, 函数头不带关键字void. 构造函数不可以有继承关系. (7): 语句 int x=1; if (x=1.0) 可以比较并执行吗? 答: 可以比较, 上述语句结果为true; java碰到此类情况会将“=”两端转化为其中的较复杂类型, 再进行比较。,44,(8): 逻辑运算符“ 该语句中的42可以省略吗? 答: 不可以. 因为许多包装

48、类不具备默认构造函数, 当创建这些类的对象时, 我们必须为参数给出初始化的值.,45,(12): 一个方法中有两个语句块(block), 各自声明了自己的局部变量 int x; 可以吗? 答: 可以. 它们都是局部变量, 作用范围都在自己的语句块之内. (13): 下面的循环嵌套语句是否合法: for (i=1;. ) for(i=1; ); 答: 非法. 因为循环嵌套语句的初始化是合并在一起进行的.这里属于局部变量的重复定义. (14): 变量定义: int $a, _a; 是否合法? 答: 合法. Java只提醒少用$符号, 而破折线“-”才是非法. (15): 表达式“i=4; i+i+i+; ”的值是多少 ? 答:结果为15; 上式可以理解为(i+)+(i+)+(i+), 即: 4+5+6=15; 因为+的优先级比+高,java编译器将首先组织优先级较高的运算符组成表达式.,46,(17): 在下面程序中, 若想在main方法中使用静态变量x, 将使用什么办法? public class Test static int x; public static void ma

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1