JAVA程序设计实验报告.docx_第1页
JAVA程序设计实验报告.docx_第2页
JAVA程序设计实验报告.docx_第3页
JAVA程序设计实验报告.docx_第4页
JAVA程序设计实验报告.docx_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JAVA程序设计实验报告姓 名:葛猛 学 号:119074183 班 级:软件工程112班 指导教师:柯 栋 梁 2013年12月24日实验1:利用JAVA反射技术分析类结构 、1.实验内容:运行程序,指定一个要分析的类名称,如 java.lang.Double,输出类中声明的属性、方法、构造函数等。2.结果分析(1)当分析java.lang.Double包时,出现了这个包中的所有方法,各种方法可以完成不同的任务。(2)反射机制不但可以例出该类对象所拥有的方法和属性,还可以获得该类的构造方法及通过构造方法获得实例。也可以动态的调用这个实例的成员方法。首先要获取需要进行分析的类的名称,将类名称指定到Class类中的forName(Stringclassname)方法为参数,调用该方法后将返回一个该指定类型的Class对象,Class对象描述了该类型的详细信息,其中一些重要的方法包括:getFields(),getMethods(),getConstructors()这些方法分别返回该类型中支持的公有字段,方法和构造器数组,其中包含超类的公有成员,而同是Class中以上的方法名称中加入了“Declared”的方法则返回该类型中定义的所有成员包括私有的但不包括超类成员3. 定义一个自己的类,如Employee类,定义几个属性、方法、构造函数,要求成员的属性包含Public、Private、Protected、Static等。运行该程序分析一下你自己定义的类结构。class Employeepublic int a;private int b;protected int c;public static int d;Employee(int a,int b,int c,int d)this.a=a;this.b=b;this.c=c;this.d=d;public static int run(int a,int b,int c,int d)int s;s=a+b*c+d;return s;先调用构造函数,构造新的对象,然后使用静态方法计算s的值,最后调用析构函数清楚实验2:利用JAVA反射技术分析对象结构 1.实验内容:运行示例程序,分析Integer数组对象的结构;改写程序分析一下自定义的类对象,如Employee类。2.结果分析java.util.ArrayListelementData=class java.lang.Objectjava.lang.Integervalue=1,java.lang.Integervalue=4,java.lang.Integervalue=9,java.lang.Integervalue=16,java.lang.Integervalue=25,null,null,null,null,null,size=5modCount=5 实验3:利用JAVA反射技术调用方法指针 实验内容:本实验仿照C或C+程序,通过指向函数名的指针调用函数;基本流程:2.通过类对象的getClass()方法获取该对象所属类的相关信息(封装成Class类的对象),如:Employee e1 = new Employee(,);Classc1=e1.getClass();2.通过调用Class类对象的getMethod(“”)方法获取对象el的某个方法,如Methodc1.getMethod(“getSalary”);可获取雇员对象e1的getSalary()方法;3.通过Method对象的invoke方法执行对象方法,如m1.invoke(Object1 o1);其中参数o1表示要调用的方法所属的对象。 3.结果分析(1)先获得squre,然后对其开方,然后调用Employee类里的getSalary方法,然后使用Manager里的setBonus方法,最后再使用Manager里的getSalary方法。(2)反射是java的灵魂,类加载为反射服务,所有的数据都有Class对象。 反射:运行时探究和使用编译是未知的类。 1、获取Class对象: (1)根据类名获取Class对象; Class c=类名.Class; (2)根据实例对象获取这个类的Class对象; Class c=对象名.getClass();这个方法不适合基本数据类型 (3)根据类型的字符串名称获取该类型的Class对象。 Class c=Class.forName(类全名);唯有这种方式能实现编译时未知运行时探究。 2、探究Class对象存放的类的信息: (0)类的声明 (1)属性:Field; (2)构造:Constructor; (3)行为:Method。 其中构造和行为只有声明部分。 3、使用探究的信息进行操作: (1)利用反射技术产生实例对象;构造:Instance(产生对象) (2)利用反射技术实例对象的属性;属性:get/set(赋值取值) (3)利用反射技术实例对象方法的调用。行为:invoke(调用方法)实验4:利用TreeSet实现集合元素排序代码:package test4;import java.util.Comparator;import java.util.Iterator;import java.util.SortedSet;import java.util.TreeSet;class EmployeeComparator implements Comparator public int compare(Employee a, Employee b) String nameA = a.getname(); String nameB = b.getname();return nameA.compareTo(nameB); class Employee1Comparator implements Comparator public int compare(Employee a, Employee b) String dateA = a.getdate(); String dateB = b.getdate();return dateA.compareTo(dateB); class Employee implements Comparableint salary=0;String name;String date; Employee(int s,String n, String i)salary=s;name=n;date=i;public String getname() / TODO Auto-generated method stubreturn name;public String getdate()return date;public int compareTo(Object b)Employee em=(Employee)b;return (this.salary-em.salary);public class SY4 /* * param args */public static void main(String args) / TODO Auto-generated method stubTreeSetmytree=new TreeSet();Employee em1,em2,em3,em4,em5,em6,em7,em8,em9,em10;em1=new Employee(1000,zhan ying,1201);em2=new Employee(1001,wang heng,1202);em3=new Employee(1002,Liu qing,1203);em4=new Employee(1200,Li minjun,1101);em5=new Employee(1300,Xin wenfei,1025);em6=new Employee(1100,Liuh qing,930);em7=new Employee(1150,He shishuai,1205);em8=new Employee(950,Huang fei,820);em9=new Employee(1320,Zhang yuanfei,521);em10=new Employee(1500,Chen Kun,1231);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);mytree.add(em10);Iteratores=mytree.iterator();while(es.hasNext()Employee ems=es.next();System.out.println( +ems.salary+ + + +ems.date);EmployeeComparator comp = new EmployeeComparator(); SortedSet sortByname = new TreeSet(comp);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);sortByname.add(em10);Iteratoren=sortByname.iterator();while(en.hasNext()Employee emn=en.next();System.out.println( ++ +emn.salary+ +emn.date);Employee1Comparator comp1 = new Employee1Comparator(); SortedSet sortBydate = new TreeSet(comp1);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);sortBydate.add(em10);Iteratorda=sortByname.iterator();while(da.hasNext()Employee dat=da.next();System.out.println( +dat.date+ +dat.salary+ +);实验5:多线程同步之团结就是力量实验 问题描述: 四名学生值日,教室里共有500套桌椅需要擦净,四人没有进行明确分工,能者多劳,团结一致,最终将教室里的桌椅擦得干干净净。 程序要求: 编写多线程程序,为每名学生创建单独的线程,以桌椅为操作对象,要尽量做到分工合理,并记录每人负责的桌椅数,擦完500套桌椅后即退出应用程序。 要点: 个学生对象都是同一个线程类对象,如何体现能者多劳? 个学生线程在劳动时要么擦桌子,要么擦椅子,如何实现对共享的数据(500套桌椅)同步访问,如果学生甲在擦桌子,是否允许学生乙擦椅子? 提示: 要点1:能者多劳通过线程的睡眠时间体现,构造具体某个学生线程时可传递一个long类型参数作为线程的睡眠时间; 要点2:桌椅数量作为两个共享对象,学生线程工作时随机选择擦桌子或椅子,如果当前有别的线程同时在擦桌子与椅子,则调用wait方法等待唤醒。如果当前有桌子或椅子没有被其他学生线程占用,则应该允许当前学生线程工作。代码:package test5;import java.util.Random;public class SY5 /* * param args */public static void main(String args) / TODO Auto-generated method stubWstudent ws1= new Wstudent(1,10); Wstudent ws2= new Wstudent(2,20); Wstudent ws3= new Wstudent(3,30); Wstudent ws4= new Wstudent(4,40); new Thread(ws1).start(); new Thread(ws2).start(); new Thread(ws3).start(); new Thread(ws4).start();class Wstudent implements Runnableprivate long sleeptime; private int id; private static int desk=0,0,0,0,0,chair=0,0,0,0,0; private static int chairCount= 500; private static int deskCount= 500;String chairLock=; String deskLock=; public Wstudent(int id,long time) super(); this.id=id; this.sleeptime=time; public void run()CA();public synchronized void CA()boolean isDone = false; while(!isDone) try Thread.sleep(sleeptime); catch(InterruptedException e1) / TODOAuto-generated catch blocke1.printStackTrace(); Random rdm = new Random(System.currentTimeMillis(); if(rdm.nextInt() % 2 =0) if(chairCount0) System.out.println(Student +id+: wiping chair +chairCount-); chairid+=1; else if(deskCount0) System.out.println(Student +id+: wiping desk +deskCount-); deskid+=1; if(chairCount=0 & deskCount=0) isDone=true; if(isDone) System.out.println(Result: Student +id+ wiped +deskid+ desks and +chairid+chairs.); 实验6:利用JDBC技术实现简易MYSQL客户端程序 问题描述: 利用JDBC技术结合JAVA SWING编写GUI程序,实现一个简易的Mysql数据库的客户端程序。 程序要求: 能够显示MySql数据库服务器中的所有数据库;显示所有数据库中所有表(结构)信息;可通过程序界面实现数据库、表的创建以及表数据的CRUD(创建、查询、更新、删除等操作)。 代码:package test6;import java.awt.Container;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.Statement;import javax.swing.ButtonGroup;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JRadioButton;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.KeyStroke;public class Sql extends JFrame implements ActionListener JFrame mm=new JFrame(您好!请您先登录!); JTextField t2=new JTextField(null,15); JTextField t4=new JPasswordField(null,15); public String zh=null; JRadioButton b=new JRadioButton(教师); JRadioButton b1=new JRadioButton(学生); JRadioButton b2=new JRadioButton(管理员); public void jiemian() mm.setSize(300,340); mm.setVisible(true); mm.setLocation(200,300); mm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel t1=new JLabel(ID号:); JLabel t3=new JLabel(密码:); JButton denglu2=new JButton(登录); denglu2.setContentAreaFilled(false); Container n=mm.getContentPane(); n.setLayout(null); t1.setBounds(42,125,75,35); t2.setBounds(80,125,150,35); t3.setBounds(40,180,75,35); t4.setBounds(80,180,150,35); denglu2.setBounds(102,245,70,30); n.add(t1);n.add(t2); n.add(t3); n.add(t4); n.add(denglu2); b.setBounds(130,85,70,30); b1.setBounds(70,85,70,30); b2.setBounds(190,85,70,30); ButtonGroup rg=new ButtonGroup(); b.setSelected(false); b1.setSelected(true); b1.setSelected(false); n.add(b); n.add(b2); rg.add(b2); rg.add(b); n.add(b1); rg.add(b1); b.setContentAreaFilled(false); b1.setContentAreaFilled(false); b2.setContentAreaFilled(false); denglu2.addActionListener(this); public void actionPerformed(ActionEvent e) JButton denglu2=(JButton)e.getSource(); if(b.isSelected() zh=t2.getText(); String mima=t4.getText(); try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection c=DriverManager.getConnection(jdbc:odbc:学生信息系统); Statement s=c.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet r=s.executeQuery(select * from 教师信息表 where 教师ID=+zh+ and 登录密码=+mima+); r.last(); if(r.getRow()=1) mm.setVisible(false); r.beforeFirst(); while(r.next() JOptionPane.showMessageDialog( null ,r.getString(教师姓名)+老师!您好!欢迎登录教师管理系统! ) ; JFrame mmm=new JFrame(); mmm.setSize(400,420); mmm.setVisible(true); mmm.setLocation(200,300); mmm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JLabel aaa=new JLabel(学生信息管理:);JLabel aaa1=new JLabel(学生成绩管理:); JButton b1=new JButton(显示学生信息);b1.setBounds(40,45,140,30); JButton b2=new JButton(添加学生信息);b2.setBounds(200,45,140,30); JButton b3=new JButton(修改学生信息);b3.setBounds(40,90,140,30); JButton b4=new JButton(删除学生信息);b4.setBounds(200,90,140,30); JButton b5=new JButton(录入学生成绩);b5.setBounds(40,170,140,30); JButton b6=new JButton(修改学生成绩);b6.setBounds(200,170,140,30); JButton b7=new JButton(删除学生成绩);b7.setBounds(40,215,140,30); JButton b8=new JButton(查询学生成绩);b8.setBounds(200,215,140,30); JButton b9=new JButton(所有成绩排名);b9.setBounds(40,260,140,30); JButton b12=new JButton(单科成绩排名);b12.setBounds(200,260,140,30); JButton b10=new JButton(退出系统);b10.setBounds(60,325,100,30); JButton b11=new JButton(修改密码);b11.setBounds(220,325,100,30); aaa.setBounds(15,15,90,30); aaa1.setBounds(15,140,90,30); Container n=mmm.getContentPane(); n.setLayout(null); J_ActionListener1 a1=new J_ActionListener1(); J_ActionListener1 a2=new J_ActionListener2(); J_ActionListener3 a3=new J_ActionListener3(); J_ActionListener4 a4=new J_ActionListener4(); J_ActionListener5 a5=new J_ActionListener5(); J_ActionListener7 a7=new J_ActionListener7(); J_ActionListener8 a8=new J_ActionListener8(); J_ActionListener9 a9=new J_ActionListener9(); J_ActionListener10 a10=new J_ActionListener10(); J_ActionListener12 a12=new J_ActionListener12(); J_ActionListener11 a11=new J_ActionListener11(); n.add(b1);n.add(b2);n.add(b3);n.add(b4);n.add(b5);n.add(b6); n.add(b7);n.add(b8);n.add(b9);n.add(b10);n.add(aaa);n.add(aaa1); n.add(b11);n.add(b12);b1.addActionListener(a1);b2.addActionListener(a2); b3.addActionListener(a3);b4.addActionListener(a4);b5.addActionListener(a5); b6.addActionListener(a7);b7.addActionListener(a8);b8.addActionListener(a9); b9.addActionListener(a10); b11.addActionListener(a1)b12.addActionListener(a12); b10.addActionListener(new ActionListener() public void actionPerformed(final ActionEvent e) System.exit(0); ); (JComponent) mmm.getContentPane().setOpaque(false); .URL url = Sql.class.getResource(未命名.jpg); ImageIcon img = new ImageIcon(url); JLabel background = new JLabel(img); mmm.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE); background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight(); else JOptionPane.showMessageDialog( null ,教师ID或密码有误!请重新输入!) ; catch(Exception e1) e1.printStackTrace(); public static void main(String args) Sql app=new Sql(); app.jiemian(); /向数据库添加新的学生信息:class DataBase / DataBase类public void Add(String xh,String xm,String xb,String bj,String jg,String mm) throws SQLException /为学籍管理系统添加新记录 try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection c=DriverManager.getConnection(jdbc:odbc:学生信息系统);Statement s=c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet r=s.executeQuery(select * from 学籍信息表 where 学号=+xh+); r.last(); if(r.getRow()=1) JOptionPane.showMessageDialog( null ,该学号的学生信息已存在); else if(xh.equals() /判断新输入的学号是否为空 JOptionPane.showMessageDialog( null ,学号不能为空); else s.executeUpdate( insert into 学籍信息表 values (+xh+,+xm+,+xb+,+ bj+,+jg+,+mm+); s.close();c.close(); JOptionPane.showMessageDialog( null ,+学号:+xh+姓名:+xm+ +性别:+xb+班级号:+bj+ +籍贯:+jg+ +登录密码:+mm+学生记录添加成功! ) ; catch (ClassNotFoundException e) JOptionPane.showMessageDialog( null , 数据添加异常! ); public void DisplayAll(ResultSet r) JFrame m=new JFrame(显示所有学生信息);m.setBounds(60,70,700,600);m.setVisible(true);JTextArea aa=new JTextArea();aa.setBounds(0,0,700,600);Container c1=m.getContentPane();c1.setLayout(null);c1.add(aa);try r.last();aa.append(t学号+t+ 姓名+t+性别+t+班级+t+籍贯+n);r.beforeFirst();while(r.next()aa.append(第+r.getRow()+行记录: );aa.append(r.getString(学号);aa.append(t+r.getString(姓名);aa.append(t+r.getString(性别);aa.append(t+r.getString(班级);aa.append(t+r.getString(籍贯)+n); catch(Exception e) e.printStackTrace(); public void DisplayOne(String str22) throws Exception try Connection c=DriverManager.getConnection(jdbc:odbc:学生信息系统); Statement s=c.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet r=s.executeQuery(select 学号 ,姓名,性别, 班级名称 as 班级,籍贯 from 学籍信息表 join 班级信息表 on 班级信息表.班级号=学籍信息表.班级号 where 学号=+str22+); /执行查询的SQL语句 r.last(); int cc=r.getRow(); if(cc=0) JOptionPane.showMessageDialog( null ,未查询到相关信息! ) ; elser.beforeFirst(); while(r.next() JOptionPane.showMessageDialog( null ,+ 学号:+r.getString(学号)+姓名:+r.getString(姓名)+性别:+r.getString(性别)+ +班级:+r.getString(班级)+籍贯:+r.getString(籍贯)+ 已查询到相关记录! ) ; catch(Exception e) e.printStackTrace(); public void DeleteXh(String str11) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection c=DriverManager.getConnection(jdbc:odbc:学生信息系统); Statement s=c.createStatement( ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet r=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论