专业选修课程实验(1)实验报告课程名称____JAVA程序设计学生学院__计算机学院______专业班级____学号___学生姓名_____指导教师______2014年12月12日实验一:Java语言综述一:实验内容和步骤1、下载、安装并设置JavaSDK软件包。2、安装JavaIDE软件。3、编写一个简单的Java程序,运行结果为在屏幕上输出“HELLOWORLD!”。publicclassHello{publicstaticvoidmain(Stringargs[]){System.out.println(HELLOWORLD!);}}心得:这是一个比较简单的程序,主要是来了解一些Java程序的基本框架,以及熟悉eclipse的使用。熟悉Java的命名规则。二、注意事项Java源程序文件的命名规则。(1).文件名由英文单词组成,每个单词的首字母大写,最好不要超过4个单词,如:ShipOrder.java。(2).Java文件的文件名要与程序中的public类名相同。(3).Servlet文件要以Servlet作为结尾,如:AddCompanyServlet.java。三、预习与思考题1、什么是Java虚拟机?它的作用是什么?Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。2、如何在不同的环境下设置环境变量?配置java环境变量是为了能在运行-cmd-中用java命令来编译和运行java代码。在window系统中,安装的软件都有路径的。如果不配置环境变量的话,就只能在jdk的安装路径下才能运行。为了能在任务路径下都可以运行jdk,就要配置环境变量。Windows下使用set命令设置环境变量,为了使每一次启动计算机都设置这些环境变量,应该在系统盘根目录下的autoexec.bat文件中进行设置(有些版本的Windows不能用%变量名%来替换环境变量的内容,那么就只好直接写C:/jdk而不是%JAVA_HOME%了)。另外,C:/Windows和C:/Windows/Command是Windows会自动加入路径的,所以可以从设置中去掉。如果在autoexec.bat中已经设置了PATH,那只需要将%JAVA_HOME%/bin加到原来设置PATH的那条语句中就行了。3、JavaApplication和JavaApplet的不同之处?Java的用户程序分为两类:JavaApplication和JavaApplet。这两类程序在组成结构和执行机制上都有一定的差异,主要体现在以下几方面:(1)运行方式不同。JavaApplication是完整的程序,可以独立运行;JavaApplet程序不能单独运行,它必须嵌入到用HTML语言编写的Web页面中,通过与Java兼容的浏览器来控制执行(2)运行工具不同。JavaApplication程序被编译以后,用普通的Java解释器就可以使其边解释边执行,而JavaApplet必须通过网络浏览器或者Applet观察器才能执行。(3)程序结构不同。每个JavaApplication程序必定含有一个并且只有一个main方法,而Applet程序则没有含main方法的主类,这也正是Applet程序不能独立运行的原因。(4)受到的限制不同。JavaApplication程序可以设计成能进行各种操作的程序,包括读/写文件的操作,但是JavaApplet对站点的磁盘文件既不能进行读操作,也不能进行写操作。实验二:Java语言基础1、编写声明不同数据类型变量的程序文件Java2_1.java,源代码如下:publicclassJava2_1{publicstaticvoidmain(Stringargs[]){byteb=0x55;shorts=0x55ff;inti=1000000;longl=0xffffL;charc='a';floatf=0.23F;doubled=0.7E-3;booleanB=true;StringS=这是字符串类数据类型;System.out.println(字节型变量b=+b);System.out.println(短整型变量s=+s);System.out.println(整型变量i=+i);System.out.println(长整型变量l=+l);System.out.println(字符型变量c=+c);System.out.println(浮点型变量f=+f);System.out.println(双精度变量d=+d);System.out.println(布尔型变量B=+B);System.out.println(字符串类对象S=+S);}}编译并运行该程序。心得:这个程序比较简单,主要是练习数值一些Java的语法知识,赋值语句,变量类型等。2、建立Java2_2.java文件,通过本程序了解变量的使用范围,源代码如下。publicclassJava2_2{staticinti=10;publicstaticvoidmain(Stringargs[]){{intk=10;System.out.println(i=+i);System.out.println(k=+k);}System.out.println(i=+i);System.out.println(k=+k);//编译时将出错,已出k的使用范围}}编译Java2_2.java,此时会出现错误提示。因为变量k在方法块中声明,在方法块之外它是不存在的,所以编译时会出错。修改上面的程序,并成功运行该程序。原因:因为k是在花括号内定义的,为局部变量,在花括号外是不可调用的。所以将花括号去掉即可。心得:上面两个程序是对局部变量和全局变量的考察,定义变量的位置不同,变量的作用域不同,可调用范围也不同。3、运行下面的程序,理解String类常用方法的使用。publicclass2_4{publicstaticvoidmain(Stringargs[]){Stringstr=“Ilikejavaprogramming”;inti1=str.indexOf(‘j’);Strings1=str.substring(i1);Strings2=str.substring(i1,i1+4);inti2=str.lastIndexOf(‘j’);Strings3=str.substring(i2+5);System.out.println(s1=+s1);System.out.println(s2=+s2);System.out.println(s3=+s3);}}心得:这个程序主要考察string类访问字符串的方法。例如:Str.indexof(‘j’)表示返回串中首次出现j的位置;Str.substring()表示返回起始位置和末尾位置间的子串。4、(选做)编程采用冒泡法实现对数组元素由小到大排序,冒泡法排序对相邻的两个元素进行比较,并把小的元素交换到前面。心得:该程序考查的是经典排序法——冒泡法的算法,以前学的是用C语言写的,现在把它用正确的Java语法写出来。5、(选做)数组实验:利用数组解决约瑟夫环问题。设有n个人围做一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m报数,报数到第m的人出圈,再从其下一个人重新开始从1到m的报数,如此进行下去知道所有的人都出圈为止。给出这n个人出圈的顺序。心得:该程序是用Java解决约瑟夫环的问题,约瑟夫环的运作如下:1、一群人围在一起坐成环状(如:N)2、从某个编号开始报数(如:K)3、数到某个数(如:M)的时候,此人出列,下一个人重新报数4、一直循环,直到所有人出列,约瑟夫环结束此处采用递归方法实现。二、注意事项Java语言中的数组与C语言中的数组差别。(1)、声明数组的方式略有不同,比如C语言里面是这样:intarray[];换做java应该是int[]array;(2)、java的数组其实是一个对象,就是数组类的一个实例。C语言数组就是单纯的数组,没有经过封装。(3)、C语言数组的数组名其实就是一个指针,而java的数组名是一个引用。三、预习与思考题1、定义变量的作用是什么?确定变量的作用域。按作用域的不同,变量可以分为以下类型:(1).成员变量在类中声明,它的作用域是整个类。(这个是变量范围最大的)(2).局部变量如果在一个方法内部声明,它的作用域就是整个方法;如果在一个方法的某个代码块的内部声明,它的作用域就是这个代码块。(3).方法的参数方法或者构造方法的参数,他的作用域是整个方法或者构造方法!2、&和&&有什么区别?&是按位与对每一个都判断;&&是逻辑与,只要前面是false就输出false,而不继续判断后面了。3、break和continue在流程控制中的作用是什么?break和continue主要用于循环语句中的流程控制。break:中断所有循环,跳出循环之外。continue:中断本轮循环中的后即操作,直接进行下一轮循环。实验三:面向对象编程一、实验内容和步骤1、定义一个“圆”类Circle,该圆类的数据成员包括:圆心点位置及圆的半径;方法成员有:设置圆心位置和半径的方法,获取圆心位置和半径的方法及构造方法。要求构造方法可以接收圆心位置参数,而半径使用缺省值1。编写完整的程序并创建Circle类的对象,并且分别调用各种方法,对比这些方法的执行结果,并据此写出实验报告。classCircle{doublex,y,r;publicvoidset_Circle(doublea,doubleb){x=a;y=b;}publicvoidset_r(){r=1;}publicvoidset_r(floatc){r=c;}publicdoublere_x(){returnx;}publicdoublere_y(){returny;}publicdoublere_r(){returnr;}}classceshiextendsCircle{publicstaticvoidmain(Stringargs[]){Circleyuan=newCircle();yuan.set_Circle(4,5);yuan.set_r();System.out.println(选用第一种方法结果为:);System.out.println(“圆心的位置为:(+yuan.re_x()+','+yuan.re_y()+));System.out.println(园的半径为=+yuan.re_r());yuan.set_r(2);yuan.set_Circle(5,5);System.out.println(选用第二种方法结果为:);System.out.println(圆心的位置为:(+yuan.re_x()+','+yuan.re_y()+));System.out.println(园的半径为=+yuan.re_r());}}心得:从这次实验开始就是考察对Java的实际应用,用Java结局一些实际的问题。本题是对一些常用的数学方法的考察,以及类的构造,此处用了extends子句。2、定义以上圆类Circle的子类SubCircle,使它具有获取半径方法、设置半径方法和构造方法,要求构造方法可同时接收圆心位置及半径两个参数。编写完整的程序并创建SubCircle类的对象,并且分别调用各种方法,对比这些方法,并写出报告。