《java课程内容串讲a.ppt》由会员分享,可在线阅读,更多相关《java课程内容串讲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吗?Syntax Rules for
2、 Identifiers(见下页或原先课件),2,Chapter02 数据与表达式,原型/基本/原生类型:(变量分为原型类型和类类型)原型类型强调:小写开头(习惯.又例如:变量Can11是否合法?)包装类:大写(规定)自己写的类:大写(习惯)例如:Boolean类型和boolean类型的区别,Int的写法和int类型的区别Java中的简单数据类型一般是指原型类型赋值语句与表达式:赋值的含义,原型类型赋值与类类型变量赋值的区别 标识符的命名规则:1.字母和下划线_开头,含字母,数字,下划线;2.不能用关键字;3.$可以开头或在标识符内,但慎用.4.符号”-”可以吗?5。eclipse是保留字吗?
3、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(a+b+a=);System.out.println(a=+a+b);数字常量:八进制、十六进制、e记数法的正确写法赋值兼容性问题:
4、隐式转换规则:类型强转: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结果的类型?括号和运算符优先级规则(见附录D)String类字符串变量,连接(+)操作和其他String方法常用的String方法:length(),toLowCase(),substring(),replace(),charAt(),toCharArray
5、()等等.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.println(this is a apple);,5,字符串对象的两种生成形式 String name1=new String(“James Gosling”);String name1=“James Gosling”;问题:如何比较两个字符串的长度?是用什么方法?是.Len
6、gth()方法还是.equals()方法?问题:String name=new String100;执行后各元素的内容是什么?掌握String类型变量执行方法后的内容不变性。了解基本类库和标准类库中各种包(见下页解释)的导入方法。(import 语句的用途)知道包装类的各种方法的用法及转换方法。自动包装的概念:Int x=180;了解随机数生成器对象的创建和使用。了解Math类的各种方法的基本用法。了解格式化输出的类的基本用法。,Chapter03 使用类和对象,6,Chapter04 定义类与方法(编写类),类与方法:类中的变量有两种:实例变量:跟着对象走,不同对象有不同副本(要引用实例变量
7、的话,必须标明是哪个对象的)实例变量在创建对象时由java初始化.举例:int型实例变量x在创建对象时被java初始化为0.静态变量:跟着类走,只有一个副本静态变量:其值也是由java初始化(定义时).方法:分类:有返回值方法(用return语句返回)注意:一般不能出现返回值和方法头不一致的情况和无返回值(方法头:void,或称为空方法)调用方法:静态方法:通过类名(例如:Math.sqrt(33);)非静态方法:通过对象名,int mm(int l)return 99.99,只可以隐式转换,7,方法中的参数:(形参不能用public、static等修饰)原型类型-传值对象-传址调用方法时形参
8、和实参类型不匹配时,java可以进行自动类型转换.(转换顺序是java默认的规则)方法中声明的变量-局部变量局部变量-只在方法体内有效,java不自动给予初始化,使用时必须由程序员来进行初始化.块中声明的变量也是局部变量信息隐藏和封装-修饰符:this,public,private this:表示当前的对象 问题:在main方法中是否可以有this.n出现?(假设n为静态变量)(N)public:对实例变量和方法的使用没有限制(可以在类的定义体外使用)private:对实例变量类定义体之外不能直接引用该变量.对方法类定义体之外不能调用该方法,只能修饰实例变量,8,protected修饰符的基本
9、属性是什么?(掌握)比如对属性的使用范围的限制!子类是否可用?其他的类能否使用?(该修饰符的作用介于public和private之间)对象和引用:类类型变量和原型变量的比较:原型变量包含该变量的“值”对象(类类型变量)只能存放该对象在内存中的首地址类类型变量在方法中作为参数:类类型变量作为参数出现时也是“传值”,而因为对象存储的是内存块首地址,所以其最终传递了“传址”.(实参把“首地址”传给了形参)注意类类型变量中=和=的使用信息隐藏和封装的基本思想是什么?什么样的做法算是信息隐藏,封装?(例如通过方法来访问实例变量,各种修饰符的采用等等),9,Chapter05 条件和循环语句,条件运算符的
10、含义:y=(num1num2)?num1:num2);分支语句 if.else 布尔表达式:注意=号的含义,以及各种比较符号(=等)Java复合布尔表达式逻辑运算符号(|,&等)若score为double类型,则if(score=90)结果?字符串比较:equals方法(比较两串的字典顺序)多分支if else及switch语句(break语句在这里的含义,缺省该语句的情况怎么办?例如:循环内部含switch语句,而switch内有的缺省有的不缺省,每次循环执行switch时都不走同一路线,怎么办?)Switch语句的控制表达式的内容要求(什么类型?4种)循环语句 while,do-while
11、,forbreak,continue,exit等语句的含义与用法例:在多重循环中执行break结果是什么?是跳出所有循环的层次吗?又例:执行continue的结果是跳出本次循环而重新开始吗?在循环语句中执行return的结果是什么?注意while()语句括号中的值为布尔变量,为true或false.例如:int x=10;while(x+).-结果?,10,continue 的基本意思:结束本次循环,跳到哪里?break 的基本意思:跳出循环体(单重?多重的情况呢)return 的基本意思:跳出所有循环,返回上级方法或系统。布尔表达式及布尔变量常用符号及运算优先级规则(见附录D)布尔表达式的基
12、本含义(到底用来干什么?)讨论:例如:int a=10,b=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,本章复习题目:基本概念题(如上页-可做选择题目)使用上述控制流语句等编写程序:写出循环体的执行结果。问题:使用循环嵌套:编写程序-实现矩阵的乘法。(使用几重循环?)问题:找出一个数据区域中满足某种条件的数据
13、。(熟练使用/,%等算术运算符)进行计算数制的提取和运算(例如:寻找1000到1800之间的个位与十位之和为某个固定值的所有的数)问题:如何计算得到其个位和十位等各个数位的值?数列的阶乘例如:1/n!-根据精度要求求出n的值综合一点的计算题目:例如:1+1/2!-1/4!+1/6!+(-1)n+1*1/(2n)!(涉及方法(带参数)的调用等)自己找题目练习,也可参考当时课堂练习,12,Chapter06 面向对象设计,方法的调用:类名/对象名.方法名this.方法名(当要调用的方法在同一个类中时,this可以省略)静态方法修饰符:static静态方法可以不需要任何类型的对象而直接调用(类名.方
14、法名)静态方法不能调用类中的实例变量(即使是在main方法中也不行,要调用的话必须创建对象,并指明是哪个对象的实例变量)(问题:在main方法中是否可以有this.n出现?(假设n为静态实例变量)静态方法不能调用类中的非静态方法,除非创建对象静态方法可以调用静态方法(同类方法可以互相调用)非静态方法可以调用静态方法(java的合理规定)。,13,静态变量修饰符:static静态变量只有一个副本,即使所在的类已经创建多个对象也是如此.(静态变量在定义时即由java自动赋予初始值,在方法中可以直接使用之)静态方法可以调用静态变量。回顾:Math类,Integer类及其他包装类的基本意义Math类的
15、标准数学方法(图5.9)包装类的基本含义和用途重载在同一个类中拥有一个以上相同名称的方法定义,称为方法名称重载当方法名称被调用时,java根据参数的数量、类型、次序来判定应该使用哪个定义方法调用时的参数可以进行自动类型转换(转换原则是隐式的由低到高原则),但要慎用,因为有时会引起混乱.无法根据返回值的类型来实现重载!(什么意思?搞明白!),14,构造函数及编写时的约定:构造函数是在(利用new)创建对象时所调用的一种方法,一般用来初始化对象中的实例变量程序员没有编写任何构造函数(没有显式定义),java将自动提供默认的构造函数程序员一旦自己编写构造函数,java不再自动提供任何默认的构造函数程
16、序员一旦自己编写构造函数,则必须自己写出一个默认的构造函数,否则一旦使用默认函数时java将报错.构造函数中可以使用/调用该类定义中的其他方法.使用new 语句创建对象时,自动调用构造函数(若构造函数有println语句,则在屏幕上会有输出内容)用new语句创建一个子类对象时,怎样创建父类对象?(答:首先创建父类对象,要不显式的写出来,要不自动首先创建)构造方法的作用域标识符必须是public吗?构造方法的形参个数有限制吗?,15,包(了解)使用import语句指明要引用的源程序的路径,而不是要引用该包的全部源程序.同一个包中的各个类,其类名可以相同吗?(了解),16,Packages(包的概
17、念)(了解),起因:目前编写程序时,一个类一个文件,以后的大程序可能有很多文件(类),放在同一个文件夹里面查找很麻烦,也可能用到别人写的文件(类)集合,于是有重名的问题等等举例:自己的文件放在 d:/work/software/test01文件夹中,别人的放在 d:/work/software/test02文件夹中.要是使用别人的文件或类,需要:在对方的类中声明 package test02 在自己的类的声明 import test02.*或import test02.文件名 类路径基目录:d:/work/software(基本的目录层次)当前目录:是包的名称.包:是分组到同一个目录中的许多类
18、的集合,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 s=new int10;X(错误性质:让编译器自动将一个整型数组转换成为一个浮点型数组,而java编译器无此能力)数组对象的实例变量-length的使用:for(i=0;im.lengt
19、h;i+)数组在类与方法中的应用数组可以当实例变量数组元素当方法参数数组名当方法参数方法可以返回数组名,19,main方法的参数(命令行式的参数传递)(了解)方法main采用String类型的数组作为参数:public static void main(String args)举例:命令行:Java TestProgram Josephine Student 则args数组的赋值?注意:数组作为对象,使用=和=时如同对一般对象多维数组的基本定义方法(会定义)掌握:循环语句处理数组的基本技巧使用循环语句处理数组很合适:一重for循环可以处理一维数组,二重for循环可处理二维数组例如:二维数组元素
20、的有条件填充、读取和处理变换等,20,数组的排序(sort array of numbers in the ascending or descending order)-掌握掌握:课件中的方法(一个方法内解决):public void seletionSort(int a)了解:本书中带接口的较通用的写法。数组的查找(search method)-掌握掌握:课件中的方法(一个方法内解决):public int binarySearch(int number,int searchValue)其他教材和参考书的解法。递归式的解法。基本了解:本书中带接口的较通用的写法。,21,Chapter08 继
21、 承,继承的概念:继承允许我们先定义一个很通用的类(基类),然后通过添加细节定义出较专用的类(派生类)派生类对基类的继承性(包括实例变量和方法).派生类的添加性(也包括实例变量和方法).继承实际上经常性的包含了方法的覆盖,覆盖解决了子类和父类之间的重名问题。派生类的构造函数Use super to invoke a constructor in parent class一般用来初始化哪里的实例变量?合理的派生类构造函数应该怎样初始化各个实例变量?怎么样初始化基类的实例变量,怎么样初始化派生类自己的实例变量?Use super to invoke a common method in base
22、class(使用super可调用基类的一个普通方法,或者一个被派生类覆盖的方法)Use this to invoke a constructor within the class问题:派生类继承父类的构造函数吗?(No!),22,掌握:super的使用问题:如果在子类构造方法中使用super关键字,必须放在开始之处吗?创建子类的对象时,是首先运行完子类自身的构造方法吗?子类不使用super关键字调用父类的构造方法时会是什么情况呢?,23,覆盖:在派生类中,若一个方法定义与基类中已有的某个方法拥有同样的名称,参数数目及类型,则称为覆盖覆盖的过程:创建派生类对象后,调用被覆盖的方法时,调用的是派生
23、类自己的方法 例如:原教材图7.13(画字符图形的程序)Triangle top=new Triangle(indent,topWidth);Box base=new Box(indent+(topWidth/2)-(bottomWidth/2),bottomHeight,bottomWidth)top.drawAt(1);base.drawAt(0);注意:方法drawAt()是基类方法而不是子类方法,该方法里面要执行方法drawHere(),而这个方法在基类和子类都存在,那么在执行上述top.drawAt(1)方法时执行的是哪一个drawHere()?(答案:因为top是派生类对象,所以仍
24、然执行派生类的方法drawHere())假设top是Figure类型,若将其指向子类,那又怎样?,Figure:图形,Box矩形,Triangle三角形,24,注意:定义覆盖方法的时候,不能修改方法的返回类型.例如方法名及参数相同,但方法头分别是int和double的两个覆盖方法的定义,编译器会报错.(结论:无法根据返回值的类型来实现覆盖!)final 的含义:修饰属性:该属性不能使用程序语句来改变。修饰方法:该方法不能在子类中被覆盖。修饰类名:该类不能被继承。问题:final可以修饰什么?能禁止本类之内的重载吗?static和final同时修饰一个属性时,必须赋初值吗?派生类的类型派生类对象
25、属于所有的祖先类型,故能拥有多个类型左边祖先类对象=右边派生类对象/合法举例:Person p1=new person();Student s1=new student();则语句:p1=s1;/valid 而语句:s1=p1;/invalid,25,Object类-所有类的祖先类Object类的含义、用途等。举例:Object x;x=“abc”;/合法:左边祖先类对象=右边派生类对象抽象(abstract)方法和抽象类抽象方法:某些方法并不打算实际应用,仅仅打算有派生类覆盖,且有派生类的对象调用.则可以声明为抽象方法.那么,抽象方法仅包含什么?不包含什么?抽象类:若类中至少有一个抽象方法,
26、则该类必须声明为抽象类问题1:abstract类中是否可以有别的非abstract方法?问题2:abstract方法在其子类中是否必须被实现?问题3: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(
27、int x)void f(double x)public class TestOverride public static void 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
28、 P();问题如下:若此时Class P中删除掉方法f(double x),结果?答:方法t.f(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,弄清多态和动态绑定
29、的概念。对象可以有多种类型的具体化:左边祖先类对象=右边派生类对象实际的问题:如果使用父类的引用指向子类的对象,那么可以直接使用此引用调用子类的所有方法吗?仅了解:利用接口实现多态性基本问题:java中一个类是否可以实现多个接口?java中一个类是否可以同时继承一个类和实现其他接口?一个接口是否可以继承自另外一个接口?基本问题:java的单继承有什么好处?(了解)排序:掌握课件的“一个方法内解决问题”。的写法 或课本中:listing9.9的写法。查找:掌握折半查找的各种实现方法的写法。,Chapter09 多态性,29,关于书写程序:必须了解书写一个类的基本写法:,问题:有一个不完整的基类,
30、能否填写一个基类的set()和get()方法?有一个不完整的派生类(右图Box),能否根据语义填写该类的方法(必要的构造方法(不包括默认构造方法)和其他方法?)假设有一个Personnel类(员工)的数组s(Personnel s),其元素包含了正式工,临时工,钟点工 等派生类型的对象,试写一排序程序,使s中的所有员工档案按工龄长短 重新排列顺序.(了解)public void sort(Figure s)(基本思路是什么?),Personnel:员工,正式工,临时工,钟点工,30,意义:通用性-顺延的命题-数组中对象的排序问题假设有一个Figure类的数组s(Figure s),其元素包含了
31、Box,Triangle,Circle,等类型的对象,试写一排序程序,使s中的所有形状按周长(round)大小进行某种顺序排列.(了解)public void sort(Figure s)(那么,其基本思路是什么?)(了解),Figure:图形,Box矩形,Triangle三角形,31,Chapter10 异 常 处 理,Java中的异常处理语法:try-throw-catch 掌握java异常处理的流程注意:catch语句块只应用于紧贴其前的try语句块注意:异常是一个对象,而Exception类是所有异常类的根类,是最通用的异常类.可以自己定义异常类异常的声明和转移 当本方法只抛出异常但又
32、不处理,则必须在方法头用throws语句进行声明,让上级方法来捕获处理.编写异常处理程序时,特殊异常处理在先,一般异常处理在后,否则?异常的分类:Exception类是通用异常类,而ArithmeticException异常是变量做分母时其值为0而产生的算术运算异常,而IOException是输入输出(例如文件操作)时的异常,还有FileNotFoundException等等.,32,注意:忽视(ignore)异常处理的结果是什么?若java程序声明了异常,但整个程序忽略了处理,也没有抛给java系统,则编译报错!(文件处理时经常遇到。)说明1:try-throw-catch 结构中的thro
33、w语句的用法课本的示例程序是人为设计的,用了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通过练习增进对finally语句块的理解参见习题课中关于异常的练习题(三次习题课其中的第
34、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语句块的最后,假设异常被捕捉,那么其执行次序是什么?假设try版块中语句是return bi;该版块没有异常出现,那么执行顺序?若
35、本句有异常,则顺序?,实例变量,34,关于不可检测异常(RuntimeException类)的说明:不可检测异常可以不捕捉(不用trycatch结构),不声明(不用throws语句来声明)问题1:是否可以编写程序定义一个RuntimeException类的子类?(Y)问题2:即使在方法调用时没有自己抛出异常,则是否可在方法中用throws语句来声明和标识异常?(Y)问题3:finally段中的语句,是否允许再次出现异常?(Y)简单问题:创建异常对象(带有表示提示信息的参数)然后抛出,捕捉后怎样显示该异常对象的信息?(用什么方法?),35,Chapter10+流与文件I/O,概念:流是一种对象,
36、用于数据流动,它可以把数据输出到目标,也可以从数据源输入或读取数据输入流,输出流的概念 Text File I/O:(了解文本文件的输出)PrintWriter outFile=new PrintWriter(new BufferedWriter(new FileWriter(test.dat);总的含义:打开文件test.dat准备输出.输出到文本文件:outFile.println();关闭文本文件:outFile.close();注意异常:FileNotFoundException,36,了解:文本文件的输入(listing 5.11)了解:文本文件的输出(主要掌握第十章的Listing
37、10.7)注意:不会单独考察文件操作,一般结合其他的计算问题,例如从键盘读入数据并计算,或把计算及处理结果写入文件,等等.参见习题课中关于文本文件的练习题,37,Chapter11 递 归(掌握!),递归的基本概念.递归:方法定义中包含对自己的调用.递归方法中的一个语句块(选择)应该不调用本身,而应该是直接结果.而每次调用本身必须“smaller version of itself”,这样才可能达到中止条件能够写不太复杂的递归方法.先写出递归调用主体再写出递归的停止情况通常有if-else语句参照、掌握课堂讲解的内容.(当时的练习题等)深入分析递归过程,完全掌握课堂讲解的内容,达到习题课上对递
38、归问题写作方法的要求,能将以前章节的某些算法改写成递归算法。(可以自己寻找一些题目进行练习),38,Chapter12 集合(掌握!),12.XX 链表看懂结点类(10.4 ListNode)和链表类(10.5StringLinkedList)以及(10.8LinkedListDemo)的基本定义及含义:掌握链表类中各种基本方法的实现length()addANodeToStart(String addData)deleteHeadNode()Find(String target)showList()等方法的具体写法.对已经存在的链表执行某种操作(例如:(1)读出链表数据进行排序.(2)遍历链表
39、,依次将符合条件的节点数据存入一个数据结构或文本文件等.(3)在无序的旧链表基础上建立一个有序的新链表.(3)针对已有链表,反顺序输出结点数据内容等)问题:若ListNode类中的实例变量data和link都改成public型,那么上述方法如何改写?(了解)内部类和迭代器-知道课堂简介,39,接上页:“链表内容存入文本文件”的基本思路?(基本了解)(回答同学提问)主要参考第十章的listing10.7的结构步骤:1.创建输出流对象,打开文本文件(可使用trycatch结构捕捉异常)(捕捉异常的结构见邮件中TextFileOutputDemo.java)2.position=head;用遍历的方
40、法找出每一个data.用“流对象.println()”方法写入文件.3.最后关闭文件等.遍历链表,将某些内容存入其他数据结构呢?(掌握!),40,(掌握)推荐链表类程序:StringLinkedListWithIterator.java含有内部类,因此各个方法都重写,涉及实例变量的使用方式。插入一个节点不再仅是一种方法,本程序提供了两种节点插入方法:(1)在链表的第一个节点之前插入新节点;(2)在某个节点后面插入新的节点。问题:如何在链表中某个特征节点后面插入新节点?含有迭代器式的处理模式:例如在方法length()里面有“position=position.link;”语句。删除节点也新的更
41、切合实际的方法设计:deleteCurrentNode()-删除当前节点;如何删除的?具体思路是什么?问题:如何在链表中某个特征节点后面删除新节点?同时注意研究该程序的其他方法。,41,问 题 答 疑注:本解答并非与考题有直接关系,只是根据学生提问整理而成,(1):数组定义:int a=new int15;int a=new int15;哪个正确?答:都可以.编译器将接受上述两种表示方法.(2):基类方法为public int a(int x,int y);派生类方法为int a(int x,int y);可以这样覆盖吗?答:不可以.方法覆盖时必须修饰符完全一致这种写法实际上是缩小了方法的使用
42、权限(在目前学习阶段没有缩小权限,但在使用包的情况下权限将缩小)(3):基类方法为public int a(int x,int y);派生类方法为public void a(int x,int y);可以这样实现 覆盖方法吗?答:不可以.编译将报错,因为这既不是方法的重载(译文版教材:无法根据返回值的类型来实现重载),也不是方法的覆盖(方法名之前的修饰符要完全一致,方法名之后的参数数目,类型要完全一样),42,(4):若在派生类中自己编写缺省构造函数,而在里面又只初始化了部分的实例变量,那么另外的实例变量的值是否还被自动初始化?答:现在版本的java仍将对缺省构造函数中未能涉及到的实例变量进行
43、初始化。例如:某个类PetRecord有三个实例变量 private String name;private int age;/in years private double 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,可以在程序中对该一维数组的某个元素用
44、new语句申请不定长的空间.从而实现不定长数组.而第二个数组的表示方法.Java将报错,因为无法处理.(Java 提示:Java无法在一个空数组后面再确定一个数组的维数)象这样一维数组的定义:int a=new int;肯定也错误.(6):构造函数与一般的方法有何区别?专门用来在创建对象时进行初始化.构造函数与所属的类同名.没有返回值类型,函数头不带关键字void.构造函数不可以有继承关系.(7):语句 int x=1;if(x=1.0)可以比较并执行吗?答:可以比较,上述语句结果为true;java碰到此类情况会将“=”两端转化为其中的较复杂类型,再进行比较。,44,(8):逻辑运算符“该语
45、句中的42可以省略吗?答:不可以.因为许多包装类不具备默认构造函数,当创建这些类的对象时,我们必须为参数给出初始化的值.,45,(12):一个方法中有两个语句块(block),各自声明了自己的局部变量 int x;可以吗?答:可以.它们都是局部变量,作用范围都在自己的语句块之内.(13):下面的循环嵌套语句是否合法:for(i=1;.)for(i=1;.);答:非法.因为循环嵌套语句的初始化是合并在一起进行的.这里属于局部变量的重复定义.(14):变量定义:int$a,_a;是否合法?答:合法.Java只提醒少用$符号,而破折线“-”才是非法.(15):表达式“i=4;i+i+i+;”的值是多
46、少?答:结果为15;上式可以理解为(i+)+(i+)+(i+),即:4+5+6=15;因为+的优先级比+高,java编译器将首先组织优先级较高的运算符组成表达式.,46,(17):在下面程序中,若想在main方法中使用静态变量x,将使用什么办法?public class Test static int x;public static void main(String args)int x;答:通过类名来调用,如:Test.x 或者先创建对象,再通过对象名字来调用.,47,(18):what is the result when you compile and run the following
47、 code?(摘自SCJP试题-较别扭的题目)Class Example static void main(String args)System.out.println(“OK”);Select all right answers:A.A Compiler error;B.A runtime error;C:OK;答案:C解释:根据一般方法前面可以缺省public的原则,此处可以选择C做答案;声明为public,是为了main()方法可以从任意一个java运行环境中被调用.但是,本示例尽管编译没有错误,但不能执行;因为Eclipse环境提示:main()方法缺少public.(也可以理解为虚拟机加载器的提示.),