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

上传人:b****5 文档编号:14775005 上传时间:2023-06-27 格式:DOCX 页数:26 大小:389.08KB
下载 相关 举报
安徽工业大学java实验报告.docx_第1页
第1页 / 共26页
安徽工业大学java实验报告.docx_第2页
第2页 / 共26页
安徽工业大学java实验报告.docx_第3页
第3页 / 共26页
安徽工业大学java实验报告.docx_第4页
第4页 / 共26页
安徽工业大学java实验报告.docx_第5页
第5页 / 共26页
安徽工业大学java实验报告.docx_第6页
第6页 / 共26页
安徽工业大学java实验报告.docx_第7页
第7页 / 共26页
安徽工业大学java实验报告.docx_第8页
第8页 / 共26页
安徽工业大学java实验报告.docx_第9页
第9页 / 共26页
安徽工业大学java实验报告.docx_第10页
第10页 / 共26页
安徽工业大学java实验报告.docx_第11页
第11页 / 共26页
安徽工业大学java实验报告.docx_第12页
第12页 / 共26页
安徽工业大学java实验报告.docx_第13页
第13页 / 共26页
安徽工业大学java实验报告.docx_第14页
第14页 / 共26页
安徽工业大学java实验报告.docx_第15页
第15页 / 共26页
安徽工业大学java实验报告.docx_第16页
第16页 / 共26页
安徽工业大学java实验报告.docx_第17页
第17页 / 共26页
安徽工业大学java实验报告.docx_第18页
第18页 / 共26页
安徽工业大学java实验报告.docx_第19页
第19页 / 共26页
安徽工业大学java实验报告.docx_第20页
第20页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

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

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

安徽工业大学java实验报告

Java实验报告

 

学号

149074353

姓名

程裕博

班级

物141

指导教师

柯栋梁

 

安徽工业大学计算机学院

2016年11月

 

实验一:

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

自己定义的类:

packagechap05;

publicclassanalysis{

privateinta;

privatecharc;

protectedintb;

publicdoubled;

publicvoidtest1()

{

}

privatevoidtest2()

{

}

protecteddoubletest3()

{

return1.0;

}

}

用java反射技术分析输出的结果:

Enterclassname(e.g.java.util.Date):

chap05.analysis

classchap05.analysis

{

publicchap05.analysis();

publicvoidtest1();

privatevoidtest2();

protecteddoubletest3();

privateinta;

privatecharc;

protectedintb;

publicdoubled;

}

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)表示不同的修饰符。

 

实验二:

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

实验内容:

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

的类对象,如Employee类。

结果分析:

该程序较为复杂,通过调试模式我发现ObjectAnalyzer的toString方法为一递归函数,从代码可以看出程序是用来分析对象中非静态的成员变量并将其显示出来,通过递归分析对象中的对象的成员变量,通过获取超类分析其继承来的成员变量。

自己编的类:

packagechap05;

publicclassanalysisextendsEmployee{

privateinta=0;

privatecharc='';

staticprotectedintb=0;

publicdoubled=0;

publicvoidtest1()

{

}

privatevoidtest2()

{

}

protecteddoubletest3()

{

return1.0;

}

}

分析结果:

chap05.analysis[a=0,c=,d=0.0][][salary=0.0,name=null,year=0,mouth=0,day=0][]

 

实验三:

利用JAVA反射技术调用方法指针

定义的People类:

packagechap05;

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;

}

}

通过指针调用的结果:

publicstaticdoublechap05.MethodPointerTest.square(double)

9.0

publicstaticdoublejava.lang.Math.sqrt(double)

3.0

publicdoublechap05.Employee.getSalary()

50000.0

publicvoidchap05.Manager.setBonus(double)

publicdoublechap05.Manager.getSalary()

80000.0

3.结果分析:

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

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

2.掌握反射技术调用类(对象)方法的基本原理与流程。

(同上)

4.扩展:

1.自定义一些简单类,使用反射技术调用该类(静态方法)或类对象的方法;

packagechap05;

importjava.lang.reflect.*;

publicclassMethodPointertest2{

publicstaticvoidmain(String[]args)throwsException{

Methodsin=Math.class.getMethod("sin",double.class);

FieldPI=Math.class.getField("PI");

System.out.println(sin.invoke(null,PI.getDouble(null)/2));

}

}

输出结果:

1.0

这里没有再自己定义方法了,这里类比Method方法的使用过程通过Field方法获取了Math类里的PI成员并使用

2.对于未知类(对象)的内部结构,如何利用反射技术调用其方法?

可以先通过反射技术分析其结构再通过反射技术调用其方法。

实验四:

利用TreeSet实现集合元素排序

源代码:

packageshiyan04;

importjava.util.*;

publicclassEmployeeimplementsComparable{

publicStringname;

publicintsalary;

publicDatehiredate=newDate();

Employee(Stringname,intsalary,Datehiredate)

{

this.name=name;

this.salary=salary;

this.hiredate.setTime(hiredate.getTime());

}

publicintcompareTo(Employeeother)

{

returnpareTo(other.name);

}

}

classsalaryComparatorimplementsComparator

{

publicintcompare(Employeea,Employeeb)

{

returna.salary-b.salary;

}

}

packageshiyan04;

importjava.text.SimpleDateFormat;

importjava.util.*;

publicclassProcess{

publicstaticvoidmain(String[]args){

Employee[]e=newEmployee[10];

DatenowTime=newDate();

SimpleDateFormatformat=newSimpleDateFormat("yyyy-MM-dd");

String[]name={"张三","李四","王五","赵六","Tom","Jerry","Amy",

"test","Jack","John"};

longoneday=86400000;

//System.out.println(nowTime);

for(inti=0;i<10;i++){

nowTime.setTime(nowTime.getTime()-oneday*30);

e[i]=newEmployee(name[i],3000+i*100,nowTime);

}

System.out.println("按姓名:

");

SortedSetbyname=newTreeSet();

for(Employeei:

e){

byname.add(i);

}

Iteratoriter=byname.iterator();

while(iter.hasNext()){

Employeee1=iter.next();

System.out.println(e1.name+""+e1.salary+""

+format.format(e1.hiredate));

}

System.out.println("按工资:

");

salaryComparatorcomp2=newsalaryComparator();

SortedSetbysalary=newTreeSet(comp2);

for(Employeei:

e){

bysalary.add(i);

}

iter=bysalary.iterator();

while(iter.hasNext()){

Employeee1=iter.next();

System.out.println(e1.name+""+e1.salary+""

+format.format(e1.hiredate));

}

System.out.println("按日期:

");

SortedSetbydate=newTreeSet

newComparator(){

publicintcompare(Employeea,Employeeb){

returnpareTo(b.hiredate);

}

});

for(Employeei:

e){

bydate.add(i);

}

iter=bydate.iterator();

while(iter.hasNext()){

Employeee1=iter.next();

System.out.println(e1.name+""+e1.salary+""

+format.format(e1.hiredate));

}

}

}

运行结果:

按姓名:

Amy36002013-05-28

Jack38002013-03-29

Jerry35002013-06-27

John39002013-02-27

Tom34002013-07-27

test37002013-04-28

张三30002013-11-24

李四31002013-10-25

王五32002013-09-25

赵六33002013-08-26

按工资:

张三30002013-11-24

李四31002013-10-25

王五32002013-09-25

赵六33002013-08-26

Tom34002013-07-27

Jerry35002013-06-27

Amy36002013-05-28

test37002013-04-28

Jack38002013-03-29

John39002013-02-27

按日期:

John39002013-02-27

Jack38002013-03-29

test37002013-04-28

Amy36002013-05-28

Jerry35002013-06-27

Tom34002013-07-27

赵六33002013-08-26

王五32002013-09-25

李四31002013-10-25

张三30002013-11-24

实验五:

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

源代码:

packagechap08;

importjava.util.Random;

publicclassExCooperation2{

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();

}

}

classDeskAndChair{

int[]desk={0,0,0,0,0},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;

staticDeskAndChairdc=newDeskAndChair();

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.");

}

}

运行结果:

实验六:

利用JDBC技术实现简易MYSQL客户端程序

1.工具:

(2)数据库软件:

MicrosoftAccess2010

(3)Java开发工具:

Eclipse

2.程序框图:

 

2.部分运行截图及源代码:

数据库表:

1.主界面代码:

classMyPanelextendsJPanel{

Imageimg=Toolkit.getDefaultToolkit().getImage("c:

/a.jpg");

publicvoidpaint(Graphicsg){

g.drawImage(img,0,0,this);

}

}

publicclassMainFormextendsJFrameimplementsActionListener

{

JMenumSystem=newJMenu("系统");

JMenuItemmExit=newJMenuItem("退出");

JMenumOperate=newJMenu("数据操作");

JMenuItemmAdd=newJMenuItem("添加成绩表中的数据");

JMenuItemmDel=newJMenuItem("删除成绩表中的数据");

JMenuItemmModify=newJMenuItem("修改成绩表中的数据");

JMenumQuery=newJMenu("查询");

JMenuItemmName=newJMenuItem("在成绩表中按姓名查询");

JMenuItemmScore=newJMenuItem("在成绩表中按成绩查询");

JMenuItemmBname=newJMenuItem("在班级表中按班级名查询");

JMenuItemmBscore=newJMenuItem("在班级表中按班级平均成绩查询");

JMenumHelp=newJMenu("帮助");

JMenuItemmAbout=newJMenuItem("系统信息");

JMenuBarmBar=newJMenuBar();

MainForm()

{

super("学生成绩管理系统");

setSize(680,640);

mSystem.add(mExit);

mOperate.add(mAdd);

mOperate.add(mDel);

mOperate.add(mModify);

mQuery.add(mName);

mQuery.add(mScore);

mQuery.add(mBname);

mQuery.add(mBscore);

mHelp.add(mAbout);

mBar.add(mSystem);

mBar.add(mOperate);

mBar.add(m

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2