安徽工业大学java实验报告.docx

上传人:b****5 文档编号:8168842 上传时间:2023-01-29 格式:DOCX 页数:12 大小:43.53KB
下载 相关 举报
安徽工业大学java实验报告.docx_第1页
第1页 / 共12页
安徽工业大学java实验报告.docx_第2页
第2页 / 共12页
安徽工业大学java实验报告.docx_第3页
第3页 / 共12页
安徽工业大学java实验报告.docx_第4页
第4页 / 共12页
安徽工业大学java实验报告.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

安徽工业大学java实验报告.docx

《安徽工业大学java实验报告.docx》由会员分享,可在线阅读,更多相关《安徽工业大学java实验报告.docx(12页珍藏版)》请在冰豆网上搜索。

安徽工业大学java实验报告.docx

安徽工业大学java实验报告

JAVA实验报告

 

实验1:

利用JAVA反射技术分析类结构

实验内容:

运行程序,指定一个要分析的类名称,如java.lang.Double,输出类中声明的属性、方法、构造函数等。

结果分析:

1.分析程序运行时的输出结果。

输出的结果中显示了被分析类的方法与变量,包括这些方法与变量的修饰符

2.分析与JAVA反射技术相关的几个类的作用:

java.lang.reflect.Constructor;

Constructor提供关于类的单个构造方法的信息以及对它的访问权限。

java.lang.reflect.Field;

Field提供有关类或接口的单个字段的信息,以及对它的动态访问权限。

反射的字段可能是一个类(静态)字段或实例字段。

java.lang.reflect.Method;

Method提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。

所反映的方法可能是类方法或实例方法(包括抽象方法)。

java.lang.reflect.Modifier;

Modifier类提供了static方法和常量,对类和成员访问修饰符进行解码。

修饰符集被表示为整数,用不同的位位置(bitposition)表示不同的修饰符。

定义一个自己的类,如Employee类,定义几个属性、方法、构造函数,要求成员的属性包含Public、Private、Protected、Static等。

运行该程序分析一下你自己定义的类结构。

classEmployee{

publicStringname;

publicStringid;

privateintage;

staticprotectedintsalary=100;

Employee()

{

}

privatevoidEmployee(Stringxm,Stringbh,intnl)

{

name=xm;

id=bh;

age=nl;

}

protecteddoubleEmployee(intgz)

{

returngz+salary;

}

}分析:

先调用一个无参数的构造函数构造,然后再调用该构造函数privatevoidEmployee(Stringxm,Stringbh,intnl)构造一个对象,最后调用构造函数计算总的薪水。

实验2:

利用JAVA反射技术分析对象结构

实验内容:

运行示例程序,分析Integer数组对象的结构;改写程序分析一下自定义的类对象,如Employee类。

源代码:

publicabstractclassPeople{

doublesalary;

Stringname;

intyear,mouth,day;

publicabstractdoublegetSalary();

publicabstractvoidsetSalary(doublesalary);

}

classEmployeeextendsPeople{

Employee(Stringname,doublesalary,intyear,intmouth,intday){

this.salary=salary;

this.name=name;

this.year=year;

this.mouth=mouth;

this.day=day;

}

Employee(){

}

publicdoublegetSalary(){

returnsalary;

}

publicvoidsetSalary(doublesalary){

this.salary=salary;

}

}

classManagerextendsPeople{

privatedoublebonus;

Manager(Stringname,doublesalary,intyear,intmouth,intday){

this.salary=salary;

this.name=name;

this.year=year;

this.mouth=mouth;

this.day=day;

bonus=0;

}

publicdoublegetSalary(){

returnsalary+bonus;

}

publicvoidsetSalary(doublesalary){

this.salary=salary;

}

publicvoidsetBonus(doublebonus){

this.bonus=bonus;

}

}

分析:

代码中Methodl类就相当于一个指向类中方法的指针,Class类通过getMethod方法获取这个Method类,之后Method类的对象可以通过invoke方法来调用这个方法。

 

实验4:

利用TreeSet实现集合元素排序

独立编程实现如下功能:

定义一个自己的类,如Employee类,定义几个属性(如name,salary,hiredate等),随机构造10个Employee类对象,添加到三个不同的TreeSet中,要求三个TreeSet输出的Employee对象分别按照姓名,薪水,雇佣日期排序。

源代码:

importjava.util.*;

classNameComparatorimplementsComparator{

publicintcompare(Employeea,Employeeb)

{

StringnameA=a.getname();

StringnameB=b.getname();

returnnameA.compareTo(nameB);

}

}

classDataComparatorimplementsComparator{

publicintcompare(Employeea,Employeeb)

{

StringdateA=a.getdate();

StringdateB=b.getdate();

returndateA.compareTo(dateB);

}

}

 

classEmployeeimplementsComparable{

intsalary=0;

Stringname;

Stringdate;

Employee(Stringn,ints,Stringi){

salary=s;name=n;date=i;

}

publicStringgetname(){

returnname;

}

publicStringgetdate(){

returndate;

}

@Override

publicintcompareTo(Objecto){

//TODOAuto-generatedmethodstub

Employeeem=(Employee)o;

return(this.salary-em.salary);

}

}

publicclasssy4{

publicstaticvoidmain(String[]args){

TreeSetmytree=newTreeSet();

Employeeem0,em1,em2,em3,em4,em5,em6,em7,em8,em9;

em0=newEmployee("张三",1500,"1231");

em1=newEmployee("李四",1000,"1201");

em2=newEmployee("王武",1001,"1202");

em3=newEmployee("流云",1002,"1203");

em4=newEmployee("张杰",1200,"1101");

em5=newEmployee("华荣",1300,"1025");

em6=newEmployee("郭靖",1100,"1110");

em7=newEmployee("黄蓉",1150,"1205");

em8=newEmployee("黄蕾",2500,"1120");

em9=newEmployee("马凯",1320,"1221");

mytree.add(em0);

mytree.add(em1);

mytree.add(em2);

mytree.add(em3);

mytree.add(em4);

mytree.add(em5);

mytree.add(em6);

mytree.add(em7);

mytree.add(em8);

mytree.add(em9);

System.out.println("按工资排序");

System.out.println();

Iteratores=mytree.iterator();

while(es.hasNext()){

Employeeems=es.next();

System.out.println(""+ems.name+""+ems.date+""+ems.salary);

}

NameComparatorcomp=newNameComparator();

SortedSetsortByname=newTreeSet(comp);

sortByname.add(em0);

sortByname.add(em1);

sortByname.add(em2);

sortByname.add(em3);

sortByname.add(em4);

sortByname.add(em5);

sortByname.add(em6);

sortByname.add(em7);

sortByname.add(em8);

sortByname.add(em9);

System.out.println();

System.out.println("按姓名排序");

Iteratoren=sortByname.iterator();

while(en.hasNext()){

Employeeemn=en.next();

System.out.println(""+emn.name+""+emn.date+""+emn.salary);

}

DataComparatorcomp1=newDataComparator();

SortedSetsortBydate=newTreeSet(comp1);

sortBydate.add(em0);

sortBydate.add(em1);

sortBydate.add(em2);

sortBydate.add(em3);

sortBydate.add(em4);

sortBydate.add(em5);

sortBydate.add(em6);

sortBydate.add(em7);

sortBydate.add(em8);

sortBydate.add(em9);

System.out.println();

System.out.println("按雇佣日期排序");

Iteratorda=sortByname.iterator();

while(da.hasNext()){

Employeedat=da.next();

System.out.println(""+dat.name+""+dat.date+""+dat.salary);

}

}

}

运行结果:

实验5:

多线程同步之团结就是力量实验

问题描述:

四名学生值日,教室里共有500套桌椅需要擦净,四人没有进行明确分工,能者多劳,团结一致,最终将教室里的桌椅擦得干干净净。

程序要求:

编写多线程程序,为每名学生创建单独的线程,以桌椅为操作对象,要尽量做到分工合理,并记录每人负责的桌椅数,擦完500套桌椅后即退出应用程序。

要点:

1、每个学生对象都是同一个线程类对象,如何体现能者多劳?

2、多个学生线程在劳动时要么擦桌子,要么擦椅子,如何实现对共享的数据(500套桌椅)同步访问,如果学生甲在擦桌子,是否允许学生乙擦椅子?

源程序:

importjava.util.Random;

publicclassCooperation{

publicstaticvoidmain(String[]args){

WorkStudent2ws1=newWorkStudent2(1,10);

WorkStudent2ws2=newWorkStudent2(2,20);

WorkStudent2ws3=newWorkStudent2(3,30);

WorkStudent2ws4=newWorkStudent2(4,40);

newThread(ws1).start();

newThread(ws2).start();

newThread(ws3).start();

newThread(ws4).start();

}

}

classZhuoYi{

int[]desk={0,0,0,0,0};

int[]chair={0,0,0,0,0};

privateintchairCount=500;

privateintdeskCount=500;

publicsynchronizedBooleandistribute(intid,longsleeptime){

intchairs=1;

intdesks=1;

Randomrdm=newRandom(System.currentTimeMillis());

if(rdm.nextInt()%2==0){

if(chairCount>0)

{

chairs=chairs-1;

while(chairs<0)

{

try

{

wait();

}catch(InterruptedExceptione)

{

}

}

System.out.println("Student"+id+":

wipingdesk"+chairCount--);

chair[id]+=1;

chairs=chairs+1;

notifyAll();

}

}

else

{

if(deskCount>0)

{

desks=desks-1;

while(desks<0)

{

try

{

wait();

}catch(InterruptedExceptione)

{

}

}

System.out.println("Student"+id+":

wipingdesk"+deskCount--);

desk[id]+=1;

desks=desks+1;

notifyAll();

}

}

if(chairCount==0&&deskCount==0)

returntrue;

else

returnfalse;

}

}

classWorkStudent2implementsRunnable{

privatelongsleeptime;

privateintid;

staticZhuoYidc=newZhuoYi();

publicWorkStudent2(intid,longtime){

super();

this.id=id;

this.sleeptime=time;

}

publicvoidrun(){

while(!

dc.distribute(id,sleeptime))

{

try

{

Thread.sleep(sleeptime);

}

catch(Exceptione)

{

}

};

System.out.println("Result:

Student"+id+"wiped"+dc.desk[id]+"desksand"+dc.chair[id]+"chairs.");

}

}

运行结果(运行结果过长,只截取部分):

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1