当前位置:首页 > 实验四 Java高级特性
实验四 Java高级特性
【实验目的】
1. 进一步加深对Java面向对象的理解。
2. 掌握static关键词的使用,static分别用于修饰成员变量、成员方法和代码块的意义。 3. 掌握final关键词的使用,final分别用于修饰类、成员方法和成员变量的意义; 4. 掌握接口的使用,理解接口与抽象类的区别。
5. 理解包的概念和作用,掌握如何使用包进行命名空间管理。 【实验内容】
1. 验证例子5-1,Count.java,和5-2,UseGeneral.java,这两个程序分别用于演示对类变量
和类方法的访问。
(1) 修改程序UseGeneral.java,创建GeneralFunction类的实例对象,并尝试通过该对象来访问其静态方法,观察结果如何。
(2) 修改程序UseGeneral.java,为GeneralFunction类添加非静态变量和非静态成员方法,观察结果如何。
(3) 创建类BaseClass,及其子类DerivedClass,其代码分别如下,运行程序,并观察结
果,进行分析。
class BaseClass {
public void methodOne(){System.out.println(\BaseClass\);}
public void methodTwo(){System.out.println(\BaseClass\);}
public static void methodThree(){System.out.println(\methodThree in BaseClass\);}
public static void methodFour(){System.out.println(\BaseClass\);} }
class DerivedClass extends BaseClass{ }
public class StaticTest {
public static void main(String[] args){ BaseClass bc=new BaseClass(); DerivedClass dc=new DerivedClass();
public static void methodOne(){System.out.println(\methodFour in public void methodTwo(){System.out.println(\methodTwo in Derived public void methodThree(){System.out.println(\public static void methodFour(){System.out.println(\DerivedClass\);}//将父类中的非静态成员方法变成静态的 Class\);}
Derived Class\);} //将父类中的静态成员方法改成静态的 in Derived Class\);}
bc.methodOne(); bc.methodTwo();
BaseClass.methodThree(); BaseClass.methodFour();
dc.methodOne(); dc.methodTwo(); dc.methodThree();
DerivedClass.methodFour(); } }
2. 验证例子5-5,NewShapes.java,该程序演示通过接口实现多态。
(1) 实现Shape接口的类必须实现什么方法?
(2) 尝试将Circle类、Square类和Triangle类中的draw()方法声明前的访问控制权限改为默认的,观察结果并分析原因。
(3) 下面的接口合法吗?
public interface Marker { }
(4) 以下的接口定义有问题吗?若有问题,请改正。
public interface Marker { void aMethod(int value){
System.out.println(\); } }
3. 编写一个程序,练习使用final分别修饰类、成员方法、成员变量。观察以下程序,是否有问题,若有问题,请改正。 (1)final class FinalTest {
int number; void display(){ } }
class FinalDerived extends FinalTest{ }
System.out.println(\);
(2)
class FinalTest { int number;
final void display(){ } }
class FinalDerived extends FinalTest{
void display(){
System.out.println(\method with final in the derived class.\); System.out.println(\);
}
}
(3)class FinalTest {
final int NUMBER;
public static void main(String[] args){
FinalTest ft=new FinalTest(); ft.NUMBER=12345;
System.out.println(\+ft.NUMBER); } }
4. 验证例子5-8,演示内部类访问外包类成员。
5. 验证例子5-9,演示内部类中如何访问同名外包类成员。 6. 验证例子5-11,演示在外包类之外访问内部类。 7. 验证例子5-6,该程序演示了包的定义与使用。
(1) 在C盘根目录下,新建文件夹work,用于存放源程序Rectange.java,Point.java。 (2) 在C盘根目录下,新建文件夹mypkg,用于存放编译后的类文件。 (3) 编辑文件Rectangle.java,定义了Rectangle类放入graphics.twoD包中 (4) 编辑文件Point.java,定义了Point类放入graphics.twoD包中
(5) 在C:\\work目录下,新建文件夹test,用于存放源程序TestPackage.java。
(6) 编辑文件TestPackage.java,包含main()方法的测试程序。定义了一个点以及一个矩
形,计算并输出矩形的面积。 (7) 修改Classpath环境变量,在命令行使用set命令,set classpath=%classpath%;c:\\mypkg (8) 在命令行上,进入目录C:\\work,编译该文件夹中的两个文件Rectangle.java和
Point.java,使用命令 javac -d C:\\mypkg Point.java Rectangel.java,一次编译两个Java源文件,并将生成的字节码文件存放到C:\\mypkg文件夹中。 (9) 打开C:\\mypkg,观察里面的目录和文件结构,比较该结构和包与类名之间的关系。 (10) 进入C:\\work\\test目录下,编译TestPackage.java,由于该文件存放在当前目录下,可以直接使用javac和java命令。
8. 修改上述程序的存放位置,实现对源文件和类文件的有效管理。
(1) 在应用系统目录下,分别创建源文件目录与类文件目录,并把类文件目录加入到
Classpath环境变量中。如可创建如下目录:
C:\\graphicsApp\\source——作为存放源文件的顶层(根)目录
C:\\graphicsApp\\classes——作文存放类文件的顶层(根)目录
(2) 每个源文件都存放在source目录中以包名为相对路径的子目录下;编译后产生的类文件以所属包名为相对路径,存放在classes目录下。目录结构如下图所示。
C:\\graphicsApp\\ source\\ graphics\\ twoD\\ Point.java Rectangle.java classes\\ graphics\\ twoD\\ Point.class Rectangle.class
共分享92篇相关文档