(5)static方法中不能处理非static的属性。
第五章
5-4 “子类的域和方法的数目一定大于等于父类的域和方法的数目”这种说法是否正确?为什么?
这种说法是错误的,因为子类不一定能继承父类的所有域和方法,它只能继承所有非私有的域和方法。如果子类在继承之外自己定义的域和方法数目小于父类中私有成员的数目,则子类的域和方法的数目小于父类的域和方法的数目
5-6 什么是方法的覆盖?方法的覆盖与域的隐藏有何不同?与方法的重载有何不同?
子类重新定义父类中已经存在的方法,称为方法的覆盖。注意:方法覆盖与域的隐藏不同。子类重新定义父类已有的域,并不能完全取代它从父类那 里继承的同名的域,这个域仍然占用子类的内存空间,在某些情况下会被使用;而当子类重新定义父类的方法时,从父类那里继承来的方法将被新方法完全取代,不 再在子类的内存空间中占一席之地。与方法的覆
盖不同,重载不是子类对父类同名方法的重新定义,而是在一个类中定义了同名的不同方法。
5-8 解释this和Supper的意义和作用
关键字this指代当前类的当前对象,关键字super指代当前类的直接父类对象。
5-11 Java程序如何实现多态?有哪些方式? Java程序通过覆盖和重载两种方式来实现多态。覆盖是子类重新定义父类中已有的方法,重载是在一个类内部定义与已存在的方法同名但是参数列表不同的方法。
5-14 构造函数是否可以被重载?试举例。
构造函数就是与类名有相同名称的成员函数,即:类名是a,该类中含有名字为a的成员函数,构造函数是可以重载的。
5-15 什么是包?它的作用是什么?
在Java中,我们写程序时用到相同的类名是有可能的,遇到这种情况的话,就会出现错误。 为了避免上述错误,Sun公司在开发Java时提出了包的的概念,就是package。包可以使具有相同类名的程序互不影响,从而保证了程序的正确性。 你可以理解为包就是一个文件夹,例如有文件夹A和文件夹B,现在有两个类名相同的程序,假设类名都为HelloWorld.java吧。现在把这两个java源文件分别放在文件夹A和文件夹B中,虽然他们的类名相同,但是由于不在同一个文件夹下,两个程序互不影响也可以互相调用。在实际中可以通过包名+类名来调用源程序了。这是和class有关的。
5-17 如何引用包中的某个类?如何引用整个包?如果编写Java Applet程序时不想把整个java.applet包都加载,则应该怎么做? 1. Import xxx 2. Import xxx.*
3. import java.applet.Applet
5-19什么是接口?为什么要定义接口?接口与类有和异同? 答:接口是用来实现类间多重继承功能的结构。它定义了若干个抽象方法和常量用以实现多重继承的功能。
Java语言不支持多重继承,只支持单重继承(只有一个直接父类)。然而在解决实际问题的程序设计中仅靠单重继承尚不能解决更复杂的问题。为了使Java程序的类层次结构更加合理,更符合实际问题的需要,我们把用于完成特定功能的若干属性组织成相对独立的属性集合。这种属性的集合就是接口。 定义接口与定义类非常相似。实际上完全可以把接口理解成为一种特殊的类,接口是由常量和抽象方法组成的特殊类。一个类只能由一个父类,但是它可以同时实现若干个接口。这种情况下如果把接口理解成特殊的类,那么这个类利用接口实际上就获得了多个父类,即实现了多重继承。与类定义相仿,声明接口时也需要给出访问控制符,不同的是接口的访问控制符只有public一个。用public修饰的接口是公共接口,可以被所有的类和接口使用,而没有public修饰符的接口则只能被同一个包中的其他类和接口利用。接口也具有继承性。定义一个接口是可以通过extends关键字声明该新接口是某个已经存在的父接口的派生接口,它将继承父接口的所有属性和方法。与类的继承不同的是一个接口可以有一个以上的父接口,它
们之间用逗号分隔,形成父接口列表。新接口将继承所有父接口中的属性和方法。
5-20 如何定义接口?使用什么关键字?
接口定义用interface,接口的使用用implements
5-21 一个类如何实现接口?实现某接口的类是否一定要重载该接口中的所有抽象方法?
接口的使用用implements, 实现接口就必须重写该接口的所有方法,java中接口里的方法都是抽象的,没有方法体
第六章
6-4 Math.random()方法用来实现什么功能?下面的语句起到什么作用? (int)(Math.random()*6)+1
编程生成100个1~6之间的随机数,统计1~6之间的每个数出现的概率;修改程序,使之生成1000个随机数并统计概率;比较不同的结果并给出结论。
答:Math.random()是用来产生一个0和1(不含1)之间的伪随机数。 (int)(Math.random()*6)+1;该语句的作用是产生1~6之间的一个随机数。
import java.io.*; public class ex6_4 {
public static void main (String[] args) { }
int num=100; int i;
int a[]=new int[7]; int x; String s; for(i=0;i<7;i++) a[i]=0;
for(i=0;i for(i=1;i<7;i++) System.out.print(\+(float)a[i]/100+\); try{ } System.in.read(); }catch(IOException e){} x=(int)(Math.random()*6)+1; System.out.print(x+\); a[x]++; 当生成100个随机数时,运行结果为:0.15 0.13 0.14 0.19 0.13 0.26,当生成1000个随机 数时,运行结果为:1.58 1.66 1.74 1.58 1.73 1.71。当然,由于数据是随机产生的,每次结果都有所不同,上面的结果只是例举其中一次,比较每次的两种结果,可看出所生成的随机数越多,每个数出现的概率也就越高。 6-6 试述Applet的基本工作原理,系统类Applet属于类库中的哪个包? 系统类 Applet 属于 java.applet 包。Applet 是一个特殊的类似于组件或控件的类, 其工作原理为: 编译好的 Applet 类的字节码文件(.class 文件)被保存在特定的 WWW 服务器 上,同时在同一个或另一个 WWW 服务器上保存着嵌入了该字节码文件名的 HTML 文件。 当某一个浏览器向服务器请求下载嵌入了 Applet 的 HTML 文件时, HTML 文件从 WWW 该 服务器上下载到客户端,由 WWW 浏览器解释 HTML 中的各种标记,按照其约定将文件中 的信息以一定的格式显示在用户屏幕上。当浏览器遇到 HTML 文件中的特殊标记,表明它 嵌有一个 Applet 时, 浏览器会根据这个 Applet 的名字和位置自动把字节码从 WWW 服务器 上下载到本地,并利用本地浏览器本身拥有的 Java 解释器直接执行该字节码。 6-7 Applet 类有哪些方法可以被浏览器自动调用?简述它们的作用。 Applet 类中可以被浏览器自动调用的方法有: init() 用来完成主类实例的初始化工作。 start() 用来启动浏览器运行 Applet 的主线程。 paint()用来在 Applet 的界面中显示文字、图形和其他界面元素。 stop() 是 start()方法的逆操作。 destroy() 在结束当前 Applet 实例时完成一些释放资源、关闭连接的操作。 6-8 编写一个Applet程序,接受HTML文件传递的整数参数,根据该参数指定Applet中文本框的长度,编写对应的HTML文件运行这个Applet import java.applet.*; import java.awt.*; public class ch6_e6_8 extends Applet { TextField tf=new TextField(); int tfLength=0; public void init() { try { tfLength=Integer.parseInt(getParameter(\ tf.setColumns(tfLength); add(tf); } catch(NumberFormatException nfe) { tf.setText(\文件传人的参数格式错误。\ add(tf); } } } ch6_e6_8.html
6-9 Applet和paint()方法有一个类型的形式参数?利用它可以完成什么操作?
是Graphics类型的参数,主要作用就是在重载的paint方法中在图形界面进行各种绘画。
6-11编程求一个整数数组的最大值、最小值、平均值和所有数组元素的和。
import java.io.*; public class ex6_11 {
public static void main (String[] args) {
int array[]; int num=10; int i;
int max,min,sum; float average; array=new int[num]; for(i=0;i array[i]=(int)(Math.random()*num)+1; max=min=sum=array[0]; for(i=1;i average=(float)sum/num; if(maxarray[i]) min=array[i]; sum+=array[i];