实验报告三完整版.docx
《实验报告三完整版.docx》由会员分享,可在线阅读,更多相关《实验报告三完整版.docx(7页珍藏版)》请在冰豆网上搜索。
实验报告三完整版
实验报告三
实验三、对象和类〔一〕
1.实验目的
〔1〕结合面向对象思想掌握类的定义以及类中成员的定义,学会设计自己的类。
〔2〕掌握方法重载、尤其是构造方法的重载,深入理解构造函数的作用与调用时机。
附录2
packagech3;publicclassPassValueTest{
privateinti=-100;
〔3〕理解
this关键字同
static关键字的意义,掌握成员变量的具体隐藏实现。
〔4〕理解对象同对象引用间的区别,掌握创立对象与调用对象成员的方法,以及对象作为参数与根本数据类型变量做参数的区别。
publicvoidtest1(intb){
b=100;
2.实验内容和步骤
}
上机输入程序并调试运行程序。
编译并运行附件1和附件
附录1
2,观察结果分析其原因。
publicvoidtest2(PassValueTestb){
=100;
packagech3;
}
publicclassClassLoadTest{
static{System.out.println("classloding");
publicvoidtest3(PassValueTestb){b=this;
}
publicstaticvoidmain(String[]args){
}
}}结果:
原因:
publicstaticvoidmain(String[]args){
PassValueTestobj=newPassValueTest();inttemp=100;
obj.test1(temp);
System.out.println(temp);
o1.nonstaticmethod();
obj.test2(obj);StaticTesto2=newStaticTest();
System.out.println(obj.i);o2.nonstaticmethod();}
obj.i=100;*/PassValueTestnewobj=newPassValueTest();
obj.test3(newobj);publicvoidnonstaticmethod(){
System.out.println(newobj.i);System.out.println("非静态方法被调用");
}}
}结果:
publicstaticvoidstaticmethod(){
原因:
System.out.println("静态方法被调用");
〔2〕编译附件3,分析结果;将“注释这行〞所在的行注释,再将注释的call2方法去掉注}释,再次编译,观察结果分析其原因。
附录3publicstaticvoidmain(String[]arg){
packagech3;StaticTestobj=newTest2();
publicclassStaticTest{StaticTest.call1();
publicstaticvoidcall1(){StaticTest.call2(obj);staticmethod();}
nonstaticmethod();//注释这行}
}结果:
/*原因:
publicstaticvoidcall2(StaticTesto1){
〔3〕定义一个圆类Circle,至少具有私有成员变量:
radius〔double型,用于保存半径〕、area〔double
型,用于保存面积〕、length〔double型,用于保存周长〕,以及成员方法setRadius、getRadius〔用
于设置、获取半径〕、getArea〔用于获得面积〕、getLength〔用于获取周长〕、print〔打印圆对象的半径、面积、周长信息〕。
在main方法,要求方法中通过“Circlec1=newCircle();Circlec2=newCircle(100);〞分别新建半径为1和半径为100的圆对象,分别打印c1同c2的信息;
使c2的半径等于c1的半径,使c1的半径等于原c2的半径,分别打印c1同c2的信息;
public
classCircle{
private
double
radius
;
private
double
area
;
private
double
length
;
public
Circle(){
}
public
Circle(
intradius){
this
.radius
=radius;
}publicvoidsetRadius(inti){radius=i;}publicdoublegetRadius(){returnradius;}publicvoidgetArea(doublek){area=3.14*k*k;}publicvoidgetlength(doublek){length=2*3.14*k;}publicvoidprint(){System.out.println("圆的半径:
"+radius+"\t"+"圆的面积"+area+"\t"+"圆的周长:
"+length);}publicstaticvoidmain(String[]args){Circlec1=newCircle();Circlec2=newCircle(100);c1.setRadius
(1);
doublei=c1.getRadius();c1.getArea(i);c2.getArea(100);c1.getlength(i);c2.getlength(100);c1.print();c2.print();
doublej=c1.
radius
;
c1.
radius
=c2.
radius
;
c2.
radius
=j;
System.
out.println(
"");
c1.print();
c2.print();
}}
〔4〕定义一个日期类MyDate,至少具有私有成员变量:
year、month、day,以及成员方法setYear、
getYear等〔具体隐藏实现方法,用于设置、获取成员变量〕、isRunyear〔boolean型,判断当前对
象保存的年是否为闰年〕、print〔打印日期对象的年月日信息〕。
a)在main方法,要求方法中通过“MyDated1=newMyDate();MyDated2=new
MyDate(2021,4,1);〞分别新建年月日为1999年1月1日的日期对象和年月日为2021年4月1日的
日期对象,分别打印d1同d2的信息;
〔5〕使d2的年等于d1的年,使d1的月等于原d2的月,分别打印d1同d2的信息;
importjavax.swing.Spring;publicclassMyDate{privateintyear;privateintmonth;privateintday;publicMyDate(){}publicMyDate(intyear,intmonth,intday){this.year=year;this.month=month;this.day=day;}
publicvoidsetYear(inti,intj,intk){year=i;month=j;day=k;}publicdoublegetYear(){returnyear;}publicStringisRunyear(doublei){if(i%4==0||i%400==0)return"y";return"n";}publicvoidprint(Stringi){System.out.println(year+"年"+month+"月"+day+"日"+"是否闰年"+i);}publicstaticvoidmain(String[]args){MyDated1=newMyDate();MyDated2=newMyDate(2021,4,1);d1.setYear(1999,1,1);doublei=d1.getYear();Stringk1=d1.isRunyear(i);Stringk2=d2.isRunyear(2021);d1.print(k1);d2.print(k2);intj=d1.year;d1.year=d2.year;d2.year=j;intj1=d1.month;d1.month=d2.month;d2.month=j1;d1.print(k2);d2.print(k1);}}
实验三、对象和类〔包〕
结果:
1.实验目的
说明了:
〔1〕理解包的意义,学会定义、编译和运行一个包内的类,熟练掌握外部包中具体类和全
④在附件2、附件3的main方法中继续添加语句“pc.method1();〞,分别编译它们会出现什
部类的导入方式,理解包带来的一种新的
java访问控制机制。
么结果,说明什么?
2.实验内容和步骤
结果:
〔1〕在Eclipse集成开发环境中分别新建名和的两个
说明了:
包。
⑤在附件2、附件3的main方法中继续添加语句:
“
〔2〕将附件1、附件2、附件3
添加到工程中,注意附件
1和附件2应该放在名为
pc.method1();
“〞的包中,附件3应放在名为“〞的包中。
分别调试3个
pc.method2();
源文件,保证都能编译成功。
pc.method3();
①
在附件2、附件3的main方法中添加语句“Pclasspc=newPclass();〞,分别编译它们会出
pc.method4();
现什么结果,说明什么?
〞分别编译它们会出现什么结果说明什么〔仔细分析两个编译结果的不同之处〕
?
删除不可
结果:
执行的语句确保保证附件2、3都能编译通过。
说明了:
结果:
②
将附件3中的“Pclasspc=newPclass();〞改为“com.yourname.ch3.Pclasspc=new
说明了:
com.yourname.ch3.Pclass();〞再编译会出现什么结果,为什么?
用
import导入包
⑥在附件2
的main方法中继续添加语句:
“
后,再改为“Pclasspc=newPclass();〞可否通过编译?
dc.method1();
结果:
dc.method2();
为什么:
dc.method3();
dc.method4();
〞编译附件2
会出现什么结果说明什么?
③
在附件2、附件3的main方法中继续添加语句“Dclassdc=newDclass();〞,分别编译它
结果:
们会出现什么结果,说明什么?
从附件3删除“Dclassdc=newDclass();〞,保证附件3能编译通过。
说明了:
附录1
packagecom.yourname.ch3;
classDclass{//defaultclasspublicvoidmethod1(){
System.out.println("publicmethodofadefalutclassinpackagep5");}
protectedvoidmethod2(){
System.out.println("protectedmethodofadefalutclassinpackagep5");}
voidmethod3(){System.out.println("defalutmethodofadefalutclassinpackagep5");
}
privatevoidmethod4(){System.out.println("privatemethodofadefalutclassinpackagep5");
}}publicclassPclass{//publicclasspublicvoidmethod1(){
System.out.println("publicmethodofapublicclassinpackagep5");}
protectedvoidmethod2(){
System.out.println("protectedmethodofapublicclassinpackagep5");
}
voidmethod3(){
System.out.println("defalutmethodofapublicclassinpackagep5");}
privatevoidmethod4(){System.out.println("privatemethodofapublicclassinpackagep5");
}
}
附录2
packagecom.yourname.ch3;
publicclassTestPackage{
publicstaticvoidmain(String[]rgs){}
}附录3
packagecom.yourname.other;publicclassTestPackage{
publicstaticvoidmain(String[]rgs){}