1、面向对象程序设计实验指导书 级适用专业: 计算机科学与技术、 网络工程、 信息与计算科学苏波实验一 使用面向对象程序设计语言, 编写简单的程序本实验4学时1. 实验目的熟悉编程环境, 熟悉标准库, 编制简单程序2. 实验环境与条件 JDK1.6, Net Beans3. 实验内容和步骤 3.1 编写一个输出hello,World的Java程序, 然后进行编译, 运行。 3.2 编写程序询问用户姓名, 然后向用户问好4. 实验程序示例注意: 实验程序不允许和实验示例完全一致。public class hello public static void main(String args) java.
2、util.Scanner aScanner = new java.util.Scanner(System.in); System.out.print(Name: ); String name = aScanner.next(); System.out.println(Hello + name + ! Please Input Your Age); System.out.print(Age:); int aNum = aScanner.nextInt(); if(aNum12) System.out.println(Hello, Kid); else if(aNum18) System.out.
3、println(Hello, How about you study?); else if(aNum附件-终端。执行命令: chmod +x jdk-6u24-linux-i586.bin把jdk-6u24-linux-i586.bin的属性改为可执行。然后运行 JDK安装程序./jdk-6u24-linux-i586.bin然后根据提示进行安装即可。第三步, 设置JAVA_HOME环境变量和PATH环境变量环境变量的作用是让操作系统知道一些软件设置信息, 例如软件的安装路径。环境变量PATH是操作系统寻找可执行程序的路径序列。操作系统根据环境变量PATH的值( 用:或者;分隔的多个目录路径)
4、 , 查找要执行的命令( 可执行文件) 。 对于windows操作系统环境变量位置windows 7: 选择 开始-控制面板-系统和安全-系统-高级系统设置-环境变量windows XP: 选择 开始-控制面板-系统-高级-环境变量windows : 选择 开始-设置-控制面板-系统-高级-环境变量设置JAVA_HOME环境变量增加一个新的环境变量, 名称为JAVA_HOME, 值为JDK安装到的目录路径。JDK安装到的目录路径的类似于C:Program FilesJavajdk1.6.0_24。提示: 该路径中有bin和jre子目录。设置PATH环境变量把JDK安装到的目录路径中的bin目录
5、的路径追加在PATH变量的后面。在PATH环境变量中, 各个目录路径之间用英文的分号;进行分隔, 向PATH环境变量追加的新的目录路径的方法为, 在已有的PATH的值的后面, 增加英文分号;和路径, 例如: 增加目录路径为;C:Program FilesJavajdk1.6.0_24bin提示: 这个目录路径中有名称为java和javac的程序。保存后, 注销并重新登录Windows。 对于Linux操作系统这里假设是使用bash shell的Linux, 使用其它shell的Linux与此类似。在Linux的终端中执行命令cd到用户的主目录, 使用nano,或者vi,或者gedit修改用户配
6、置文件.bash_profile( 如果是ubuntu Linux是.profile) 。在.bash_profile( 或者.profile) 文件末尾追加三行命令:JAVA_HOME=$HOME/jdk1.6.0_24export JAVA_HOMEPATH=$JAVA_HOME/bin:$PATH保存后, 注销并重新登录Linux。第四步, 测试安装和配置JDK是否成功检查Java虚拟机的版本。执行java -version 应当看到Java虚拟机的信息。看到Java版本与安装的JDK的版本一致, 表示安装配置Java虚拟机/Java编译器成功, 否则表示安装或者配置有问题, 需要重新安
7、装或者重新配置( 一般是没有配置好PATH环境变量造成的错误)。检查Java编译器的版本。Java编译器的名称是javac。执行javac -version 应当看到Java编译器的信息。看到显示的Java版本与安装的JDK的版本一致, 表示安装配置Java虚拟机/Java编译器成功, 否则表示安装或者配置有问题, 需要重新安装或者重新配置( 一般是没有配置好PATH环境变量造成的错误)。附录B: Java程序设计的基本步骤示例编写并执行第一个java程序的具体过程(一) 编写Java源程序.使用文本编辑器 windows的记事本,Unix/Linux的gedit文本编辑器或者vi/emacs
8、(如果你会用它们) (注意: word/Office等图文混排工具不能够).用文本编辑器编写源程序如下:public class hello public static void main(String args) System.out.println(世界,你好!); 把上面的源程序存为文件 hello.java注意: 必须使用这个文件名.因为文件的名称必须和文件内的类(class)的名称保持一致,而且增加.java为文件名的后缀.(二) 编译把源程序翻译为Java可执行程序. 打开控制台界面,到保存hello.java文件的目录,执行下面的命令javac hello.java如果产生了一个
9、新的文件hello.class,那么编译成功.如果没有产生了一个新的文件hello.class,那么编译失败,一般是源程序中有语法错误.(三) 执行在java.class的目录,实际上就是当前的目录不用变化,执行下面的命令:java hello将得到程序的执行结果显示如下:世界,你好!如果得到上面的结果, 那么庆祝你的第一个java程序执行成功!如果没有得到上面的结果, 那么参考以前的步骤, 看看哪个步骤错了。实验二 基本语句和函数本实验4学时1、 实验目的: 练习函数的参数、 返回值和对象名字( 引用) 。2、 实验环境与条件: JDK1.6, Netbeans3、 实验内容: 编写程序:
10、验证用户名字和口令.使用Java.具体内容: 在main()提示用户输入用户姓名和口令,并读入用户输入的姓名和口令. 由身份验证函数验证用户姓名和口令是否与预先设定的用户姓名和口令一致, 并通知用户验证结果.提示: Java中的函数必须在类里面定义.附录A: Java编写的用户名口令检测函数示例import java.util.Scanner;public class Main public static boolean check(String name, String password) if(Dan.equals(name)&(123456.equals(password) return
11、 true; else return false; public static String inputUserName() Scanner aScanner = new Scanner(System.in); System.out.println(Name:); String name = aScanner.next(); return name; public static String inputUserPassword() Scanner aScanner = new Scanner(System.in); System.out.println(Password:); String p
12、assword = aScanner.next(); return password; public static void main(String args) String name = inputUserName(); String password = inputUserPassword(); if(check(name, password) System.out.println(Check OK); else System.out.println(Wrong name or password); 实验三 类与对象本实验4学时1、 实验目的: 类与对象、 数据成员、 成员函数、 构造函数
13、2、 实验环境与条件: JDK1.6, Netbeans3、 实验内容: 编写程序: 验证用户名字和口令.使用Java.具体内容: 编写一个用户接口对象,提示用户输入用户姓名和口令,并读入用户输入的姓名和口令. 在main()由用户接口对象提示用户输入用户姓名和口令,并读入用户输入的姓名和口令.然后, 由身份验证对象验证用户姓名和口令是否与预先设定的用户姓名和口令一致, 并通知用户验证结果.附录A: 类与对象的基本使用示例public class Login private String name; private Scanner aScanner; private String _name;
14、 public Login() name = new String(); _name = SHE; aScanner = new Scanner(System.in); public Login(String aName) name = new String(); _name = aName; aScanner = new Scanner(System.in); public void check() if( (_name.equals(name) ) System.out.println(OK); else System.out.println(Error); public static v
15、oid main(String args) Login aLogin = new Login(); Login anotherLogin = new Login(AAA); aLogin.inputName(); aLogin.check(); anotherLogin.inputName(); anotherLogin.check(); public void inputName() System.out.println(Name:); name = aScanner.next(); 实验四 文件流本实验4学时1、 实验目的: 文件流的基本操作2、 实验环境与条件: JDK1.6, Netb
16、eans3、 实验内容: 编写一个身份验证对象,验证用户名字和口令是否正确.要求用户的名字和口令来自于一个配置文件(纯文本文件格式). 编写一个用户接口对象,提示用户输入用户姓名和口令,并读入用户输入的姓名和口令. 在main()由用户接口对象提示用户输入用户姓名和口令,并读入用户输入的姓名和口令.然后, 由身份验证对象验证用户姓名和口令是否与配置文件的用户姓名和口令一致, 并通知用户验证结果.配置文件的具体格式示例如下:用户名1:口令1选做的实验内容: 编写一个用户接口对象,提示用户输入用户姓名和口令,并读入用户输入的姓名和口令. 在main()由用户接口对象提示用户输入用户姓名和口令,并读
17、入用户输入的姓名和口令.然后, 由身份验证对象验证用户姓名和口令是否与配置文件的用户姓名和口令一致, 并通知用户验证结果.在上述过程中,使用字符串流处理类java.io.Reader,java.io.Writer处理utf-8文件.要求配置文件中保存多个用户名和口令, 能够使用任意一对(用户名,口令)都能够登录成功. 提示,使用字符串分割. 配置文件的具体格式示例如下:用户名1:口令1用户名2:口令2用户名3:口令3用户名4:口令4用户名5:口令5用户名6:口令6附录: 一个文件读写的示例public class FileDemo /* * param args the command lin
18、e arguments */ public static void main(String args) FileDemo fileDemoReadWrite = new FileDemo(); / fileDemoReadWrite.fileCreate(); fileDemoReadWrite.fileWrite(); fileDemoReadWrite.fileRead(); String fileName = demofile.txt; FileInputStream fileInput = null; private FileOutputStream fileOutput; publi
19、c void fileCreate() File file = new File(this.fileName); if (file.exists() != true) try file.createNewFile(); System.out.println(this.fileName + Created!); catch (IOException ex) Logger.getLogger(FileDemo.class.getName().log(Level.SEVERE, null, ex); else file.delete(); public void fileRead() try fil
20、eInput = new FileInputStream(fileName); BufferedReader fileReader = new BufferedReader(new InputStreamReader(fileInput, utf8); while (fileReader.ready() String content = fileReader.readLine(); System.out.println(content); catch (IOException ex) Logger.getLogger(FileDemo.class.getName().log(Level.SEV
21、ERE, null, ex); finally try fileInput.close(); catch (IOException ex) Logger.getLogger(FileDemo.class.getName().log(Level.SEVERE, null, ex); public void fileWrite() try fileOutput = new FileOutputStream(fileName); fileOutput.write(java: simplecomplexlanguagen.getBytes(utf8); fileOutput.write(java: 简
22、单复合语言n.getBytes(utf8); catch (IOException ex) Logger.getLogger(FileDemo.class.getName().log(Level.SEVERE, null, ex); finally try fileOutput.close(); catch (IOException ex) Logger.getLogger(FileDemo.class.getName().log(Level.SEVERE, null, ex); 实验五具体类与继承、 访问控制本实验4学时1、 实验目的: 利用继承, 实现程序功能的扩充, 字符串和文件流的基本
23、操作2、 实验环境与条件: JDK1.6, Netbeans3、 实验内容: 编写程序: 在前一个实验的基础上完成。增加: 一个具有修改口令功能的身份验证对象。口令要求保存到文件中。验证用户名字和口令: 编写一个身份验证对象,验证用户名字和口令是否正确.在此基础上,利用类继承,编写一个利用配置文件的身份验证对象, 要求用户的名字和口令来自于一个配置文件(纯文本文件格式). 编写一个用户接口对象,提示用户输入用户姓名和口令,并读入用户输入的姓名和口令. 在main()由用户接口对象提示用户输入用户姓名和口令,并读入用户输入的姓名和口令.然后, 由身份验证对象验证用户姓名和口令是否与配置文件的用户
24、姓名和口令一致, 并通知用户验证结果.。重新运行程序, 能够使用用户ID和新的口令经过验证。 一些可能有用的提示: 能够使用构造函数中从文件中读出口令。选做的内容: 在此基础上, 提供一个用”加密”的方式保存口令的身份验证类。最简单的”加密”的方法能够使用按位异或实现。算法如下: 假设口令为Password, x是一个密钥, 使用按位异或方式进行加密和解密。在C+中用表示按位异或操作。加密: Password x = Passwordx解密: Passwordx x = Password实验六 多态性和异常处理本实验4学时1、 实验目的: 学习使用虚函数实现多态性。经过编写、 调试程序理解异常
25、的产生和处理。2、 实验环境与条件: JDK1.6, Netbeans3、 实验内容: 设计一个身份验证接口Auth,用于验证用户名字和口令是否正确. 编写一个利用配置文件的身份验证类Auth1, 具有用户名和口令验证功能. 要求用户的名字和口令来自于一个配置文件(纯文本文件格式). 配置文件格式为:姓名1:密码1姓名2:密码2 编写另一个利用配置文件的身份验证类Auth2, 具有用户名和口令验证功能. 要求用户的名字和口令来自于一个配置文件(纯文本文件格式). 配置文件格式为:姓名1密码1姓名2密码2 在main()中创立用户姓名和口令输入对象,提示用户输入用户姓名和口令, 并读入用户输入的姓名和口令. 然后, 分别创立两种类型的身份认证对象,以验证用户姓名和口令是否与配置文件的用户姓名和口令一致, 利用一个专门的函数通知用户验证结果.void echoResult(Auth aAuth, String name, String password) if(aAuth.check(name, password) System.out.println(OK); else System.out.println(Error);异常处理在派生类的构造函数中增加异常处理。例如: 当保存密码的文件不存在时, 产生异常。