实验7JAVA面向对象.docx
《实验7JAVA面向对象.docx》由会员分享,可在线阅读,更多相关《实验7JAVA面向对象.docx(13页珍藏版)》请在冰豆网上搜索。
实验7JAVA面向对象
实训报告
实验七JAVA面向对象
(2)
【实验目的】
1.掌握JAVA语言类的定义和使用。
2.掌握JAVA语言对象的声明和使用。
3.掌握JAVA语言构造方法的概念和使用。
4.掌握类及其成员的访问控制符的区别和使用。
【预习内容】
1.JAVA类的定义格式;
2.JAVA对象的使用三步骤:
声明、创建以及初始化;
3.访问控制修饰符:
public、private和protected的功能和区别;
4.JAVA构造方法的概念和特点;
5.JAVA多态的概念,及重载和覆盖的区别;
【实验内容及步骤】
1.上机验证题:
运行以下程序,查看运行结果,若出错,请分析原因,并修改。
(1)publicclassLX2_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);
}
}
[程序运行过程]
[程序分析]
publicclassLX2_2
{
staticinti=10;
publicstaticvoidmain(Stringargs[])
{
intk=10;//只定义了一个K,所以下面的模块便出错了。
{
System.out.println("i="+i);
System.out.println("k="+k);
}
System.out.println("i="+i);
System.out.println("k="+k);
}
}
(2)建立包含复合语句程序,源代码如下。
classLX2_5{
publicstaticvoidmain(Stringargs[]){
intk,i=3,j=4;
k=i+j;
System.out.println("在复合块外的输出k="+k);
{
floatf;
f=j+4.5F;
i++;
System.out.println("在复合块内的输出f="+f);
System.out.println("在复合块内的输出k="+k);
}
System.out.println("在复合块外的输出i="+i);
}
}
运行结果并分析变量k,I,j,f各自的作用范围。
k:
全局变量
i:
全局变量
j:
全局变量
f:
局部变量
[程序运行过程]
[程序分析]
在主函数里,已经定义了全局变量k=7,i=3,j=4。
又定义了f=j+4.5F=8.5。
此时i++,因此i=4,k不变。
(3)classStaticDemo{
staticintx;
inty;
publicstaticintgetX(){
returnx;
}
publicstaticvoidsetX(intnewX){
x=newX;
}
publicintgetY(){
returny;
}
publicvoidsetY(intnewY){
y=newY;
}
}
publicclassLX6_3{
publicstaticvoidmain(String[]args){
System.out.println("静态变量x="+StaticDemo.getX());
System.out.println("实例变量y="+StaticDemo.getY());//非法,编译时将出错
StaticDemoa=newStaticDemo();
StaticDemob=newStaticDemo();
a.setX
(1);
a.setY
(2);
b.setX(3);
b.setY(4);
System.out.println("静态变量a.x="+a.getX());
System.out.println("实例变量a.y="+a.getY());
System.out.println("静态变量b.x="+b.getX());
System.out.println("实例变量b.y="+b.getY());
}
}
[程序运行结果]
[程序分析]
未定义StaticDemo,因此才会非法,编译时出错。
[程序修改后清单]
classStaticDemo{
staticintx;
inty;
publicstaticintgetX(){
returnx;
}
publicstaticvoidsetX(intnewX){
x=newX;
}
publicintgetY(){
returny;
}
publicvoidsetY(intnewY){
y=newY;
}
}
publicclassLX6_3{
publicstaticvoidmain(String[]args){
StaticDemoa=newStaticDemo();
StaticDemob=newStaticDemo();
System.out.println("静态变量x="+a.getX());
System.out.println("实例变量y="+b.getY());//非法,编译时将出错
a.setX
(1);
a.setY
(2);
b.setX(3);
b.setY(4);
System.out.println("静态变量a.x="+a.getX());
System.out.println("实例变量a.y="+a.getY());
System.out.println("静态变量b.x="+b.getX());
System.out.println("实例变量b.y="+b.getY());
}
}
[正确结果]
2.上机编程题
(1)读入6个整数,求出非负数个数及其和,并将6个整数按从小到大的次序输出。
如:
输入:
-326701
输出:
5
-301267
[程序清单]
importjava.util.Scanner;
publicclassb1
{
publicstaticvoidmain(String[]args)
{
inta[]=newint[6];
intsum=0,count=0;
inti;
intk=0;
Scannerinput=newScanner(System.in);
System.out.println("请输入6个整数:
");
for(i=0;i<6;i++)
{
a[i]=input.nextInt();
if(a[i]>=0)
{
sum=sum+a[i];
count=count+1;
}
}
for(i=5;i>=1;i--)
{
for(intj=0;j<=i-1;j++)
{
if(a[j]>a[j+1])
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;
}
}
}
for(i=0;i<6;i++)
{
System.out.print(a[i]+"");
}
System.out.println("非负数的和为:
"+sum+"非负数的个数为:
"+count);
}
}
[程序运行结果]
2.编程实现:
输入6个整数,用一个2×3的二维数组存储,以2行3列格式打印,并输出其中的最大值。
[程序清单]
importjava.util.Scanner;
classb2
{
publicstaticvoidmain(String[]args)
{
intmax=0;
inti,j;
inta[][]=newint[2][3];
Scannerinput=newScanner(System.in);
System.out.println("请输入6个整数:
");
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
a[i][j]=input.nextInt();
}
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
System.out.print(a[i][j]+"");
if(j==2)System.out.println("");
}
}
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
if(a[i][j]>max)max=a[i][j];
}
}
System.out.println("max="+max);
}
}
[程序运行过程]
3、定义一个计数器类,编程管理会议室投影仪的出借情况。
每购入一台投影仪或收回一台投影仪,计数器加一;每淘汰一台投影仪或借出一台投影仪,计数器减一;要求投影仪每次出入库时,都记录操作者的信息,并可以打印当前库存投影仪信息。
[程序清单]
importjava.io.*;
importjava.util.Scanner;
publicclassb3
{
publicstaticvoidmain(String[]args)
{
intn=3;
Counterb3=newCounter();
Scanneri=newScanner(System.in);
System.out.print("2:
新购或回收"+'\n'+"1:
淘汰或借出"+'\n');
n=i.nextInt();
if(n==2)
b3.increment();
elseif(n==1)
b3.decrement();
else
System.out.print("错误!
!
!
输入不合格!
"+'\n');
System.out.print("投影仪数量:
"+b3.Counter());
}
}
classCounter
{
privateintcounter=2;
publicintCounter()
{
returncounter;
}
publicvoidincrement()
{
counter+=1;
}
publicvoiddecrement()
{
counter-=1;
}
publicvoidreset()
{
counter=0;
}
}
[程序运行过程]
4、编程实现矩形类,其中应包括计算矩形周长和面积的方法。
如何使你的定义更好的满足面向对象程序设计中信息隐藏和封装的原则?
对于这个类,你计划定义几个构造函数?
[程序清单]
publicclassb4
{
privatedoublelength;
privatedoublewidth;
publicdoublegetLength()
{
returnlength;
}
publicvoidsetLength(doublelength)
{
this.length=length;
}
publicdoublegetWidth()
{
returnwidth;
}
publicvoidsetWidth(doublewidth)
{
this.width=width;
}
publicb4()
{
}
publicb4(doublelength,doublewidth)
{
this.length=length;
this.width=width;
}
publicdoublearea()
{
returnlength*width;
}
publicdoublegirth()
{
return2*(length+width);
}
publicstaticvoidmain(String[]args)
{
b4rectangle=newb4(2,7);
System.out.println("矩形面积是:
"+rectangle.area());
System.out.println("矩形周长是:
"+rectangle.girth());
}
}
[程序运行过程]