NJUPT JAVA第四次实验1
- 格式:rtf
- 大小:64.53 KB
- 文档页数:2
实验一:一个简单的应用程序
1.实验要求:
编写一个简单的Java应用程序,该程序在命令行窗口输出两行文字:“你好,欢迎学习Java”和“We are students”。
2.实验内容:
3.实验后的练习:
(1)编译器怎样提示丢失大括号的错误
(2)编译器怎样提示语句丢失分号的错误
(3)编译器怎样提示将System写成system这一错误
(4)编译器怎样提示将String写成string这一错误
实验二:联合编译
1.实验要求:
编写4个源文件:MainClass.java,A.java,B.java和 C.java,每个源文件只含有一个类。
MainClass.java含有应用程序的主类(含有main()方法),并使用了A,B和C类。
将4个源文件保存到同一目录中,然后编译MainClass.java。
2.实验内容:
3.实验后的练习:
将Hello.java编译通过以后,不断地修改A.java源文件中的代码,比如在命令行窗口输出Nice to meet you或Can you need my hand。
要求每次修改A.java源文件后,单独编译A.java,然后直接运行应用程序Hello。
南昌大学实验报告学生姓名:学号:专业班级:网络工程091实验类型:□验证□综合□设计□创新实验日期:2012.5.18 实验成绩:实验四简单的万年历一、实验目的学习使用布局类。
二、实验任务编写一个应用程序,有一个窗口,该窗口为BorderLayout布局。
窗口的中心添加一个Panel容器:pCenter,pCenterd的布局是7行7列的GridLayout布局,pCenter中放置49个标签,用来显示日历。
窗口的北面添加一个Panel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮可以显示当前月的上一月的日历。
窗口的南面添加一个Panel容器pSouth,起布局是FlowLayout,pSouth中放置一个标签用来显示一些信息。
三、实验内容编译并运行程序,查看结果。
程序如下:CalendarFRame.javapackage calendar;import java.awt.BorderLayout;import java.awt.Button;import java.awt.GridLayout;import bel;import java.awt.Panel;import java.awt.ScrollPane;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JFrame;public class CalendarFrame extends JFrame implements ActionListener { Label labelDay[]=new Label[42];Button titleName[]=new Button[7];String name[]={"日","一","二","三", "四","五","六"};Button nextMonth,previousMonth;int year=2012,month=5;CalendarBean calendar;Label showMessage=new Label("",Label.CENTER);public CalendarFrame(){Panel pCenter=new Panel();pCenter.setLayout(new GridLayout(7,7));//将pCenter的布局设置为7行7列的GridLayout 布局。
实验五、抽象类和接口一、定义一个包pack1,定义一个接口ClassName,接口中只有一个抽象方法getClassName()。
设计一个类Horse,该类实现接口ClassName中的方法getClassName(),功能是获取该类的类名。
编写应用程序使用Horse类。
源程序如下:package pack1;interface ClassName{void getClassName();}class Horse implements ClassName{public void getClassName(){System.out.println("Horse");}}public class TestHorse {public static void main(String[] args) {Horse h = new Horse();h.getClassName();}}运行结果如下:--------------------Configuration: <Default>-------------------- HorseProcess completed.二、定义一个包pack2,定义一个抽象基类Shape,它包含一个抽象方法getArea(),从Shape类派生出Rectangle和Circle类,这两个类都用getArea()方法计算对象的面积。
编写编写应用程序使用Rectangle类和Circle类。
源程序如下:package pack2;abstract class Shape{public abstract void getArea();}class Rectangle extends Shape{private float x,y;Rectangle(float x,float y){this.x = x;this.y = y;}public void getArea(){System.out.println(x*y);}}class Circle extends Shape{private float r;private final float PI=3.14f;Circle(float r){this.r = r;}public void getArea(){System.out.println(r*r*PI);}}public class TestShape {public static void main(String[] args) {Rectangle r = new Rectangle(3.0f,4.0f);Circle c = new Circle(2.0f);r.getArea();c.getArea();}}运行结果如下:--------------------Configuration: <Default>-------------------- ng.NoSuchMethodError: mainException in thread "main"Process completed.三、设计雇员Employee类,记录雇员的情况,包括姓名、年薪、受雇时间,要求定义MyDate类作为受雇时间,其中包括工作的年、月、日,并用相应的方法对Employee类进行设置。
JAVA实验报告实验1:利用JAVA反射技术分析类结构实验内容:运行程序,指定一个要分析的类名称,如ng.Double,输出类中声明的属性、方法、构造函数等。
结果分析:1.分析程序运行时的输出结果。
输出的结果中显示了被分析类的方法与变量,包括这些方法与变量的修饰符2.分析与JAVA反射技术相关的几个类的作用:ng.reflect.Constructor;Constructor 提供关于类的单个构造方法的信息以及对它的访问权限。
ng.reflect.Field;Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。
反射的字段可能是一个类(静态)字段或实例字段。
ng.reflect.Method;Method 提供关于类或接口上单独某个方法(以及如何访问该方法)的信息。
所反映的方法可能是类方法或实例方法(包括抽象方法)。
ng.reflect.Modifier;Modifier 类提供了 static 方法和常量,对类和成员访问修饰符进行解码。
修饰符集被表示为整数,用不同的位位置 (bit position) 表示不同的修饰符。
定义一个自己的类,如Employee类,定义几个属性、方法、构造函数,要求成员的属性包含Public、Private、Protected、Static等。
运行该程序分析一下你自己定义的类结构。
class Employee{public String name ;public String id;private int age ;static protected int salary =100;Employee()}private void Employee(String xm,String bh,int nl){name=xm;id=bh;age=nl;}protected double Employee(int gz){return gz+salary;}}分析:先调用一个无参数的构造函数构造,然后再调用该构造函数private void Employee(String xm,String bh,int nl)构造一个对象,最后调用构造函数计算总的薪水。
第三次线程实验:一. 实验目的及实验环境实验目的:1.理解JA V A中线程的同步和死锁2.掌握线程同步和互斥实验环境:eclipse 4.4二. 实验内容编程实现隧道通车问题。
内容如下:有一条隧道,同时允许一辆车通行,隧道两端各有多辆车等待通过,车辆只能等到隧道空闲才能被运行进入隧道。
一旦隧道中有车辆,则禁止其他车辆通过。
三.方案设计1.定义类Test,Car,CarType,Tunnel类2.在Test类中创建一个隧道Tunnel和多个车辆,观察结果四.测试数据及运行结果1.正常测试数据(3组)及运行结果;2.非正常测试数据(2组)及运行结果。
无五.总结1.实验过程中遇到的问题及解决办法;①中没有明确表示需要进行异常抛出很有可能就会忘记这个题目存在的问题。
所以平常程序设计时,应该多考虑不同的情况,防止程序出现不可逆的漏洞。
②对程序进行同步时,notify()方法会唤醒等待队列中的随机的一个线程,而notifyAll()方法会唤醒等待队列中的全部线程2.对设计及调试过程的心得体会。
①Java中的每个对象都有一个lock,当访问某个对象的synchronized方法时,该对象就会被上锁(注意,是对象,不是方法,假如你在这个类中定义了多个方法,如果你的线程访问到了其中的任意一个synchronized方法,那么其它的就暂时不能被访问了,必须等到该对象被解锁以后,即方法执行结束才行)。
解锁的意思是值线程执行该方法完毕,或者说过程中抛出了异常。
②wait,notify,notifyAllwait:Object类中的final方法,有InterruptedException。
它的作用是导致当前的线程等待,直到其它线程调用此对象的notify方法或者notifyAll方法,wait还有一些重用方法,传参数,比如说时间长度。
当前的线程必须拥有此对象监视器,然后该线程发布对此监视器的所有权并且开始等待,直到其它线程通过调用notify方法或者notifyAll方法,通知在此对象的监视器上等待的线程醒来,然后该线程将等到重新获得对监视器的所有权后才能开始执行。
广东海洋大学学生实验报告书(学生用表)实验名称实验四(1). 类与对象(第1部分)课程名称Java程序设计与开发技术课程号16232204学院(系) 信息学院专业计算机科学与技术班级计科1131学生姓名彭德权学号201311621124 实验地点钟海楼04019实验日期2015年9月24日一、实验目的(1)学习使用Java中的类来封装对象的属性和功能;(2)学习掌握Java中对象的组合及参数传递。
二、实验任务完成实验三指导上实验1、实验2的实验任务。
三、实验仪器设备和材料安装有J2SE开发工具的PC机。
四、实验内容和步骤实验1 机动车编写一个Java应用程序,改程序中有两个类:Vehicle(用于刻画机动车)和User (主类)。
具体要求如实验指导所示。
代码如下:Vehicle.javapublic class Vehicle{private double speed;private int power;void speedUp(int s){this.speed=this.speed+s;}void speedDown(int s){this.speed=this.speed-s;}void setPower(int p){this.power=p;}int getPower(){return this.power;}double getSpeed(){return this.speed;}}User.javapublic class User{public static void main(String args[]){Vehicle car1,car2;GDOU-B-11-112car1=new Vehicle();car2=new Vehicle();car1.setPower(128);car2.setPower(76);System.out.println("car1的功率是:"+car1.getPower());System.out.println("car2的功率是:"+car2.getPower());car1.speedUp(80);car2.speedUp(80);System.out.println("car1目前的速度:"+car1.getSpeed());System.out.println("car2目前的速度:"+car2.getSpeed());car1.speedDown(10);car2.speedDown(20);System.out.println("car1目前的速度:"+car1.getSpeed());System.out.println("car2目前的速度:"+car2.getSpeed());}}运行结果:课后的练习(1)改进speedUp()方法,使得Vehicle类的对象加速时不能将speed值超过200。
实验报告四一【实验目的】(1)理解异常和异常处理的概念(2)理解异常处理机制二【实验内容】【项目一】理解异常处理机制1.编写以下程序,并编译运行3.使用try{}catch{}final{}结构,捕获并处理异常,在final里中打印输出:public class Ex7_1{public static void main(String[] args){try{String output[]={"The","quick","brown","fox","jumps","over","the","lazy","dog."};int i=0;while(i<12){System.out.print(output[i++]);}}catch(Exception e){System.out.print("haha...");}finally{System.out.println("不管怎样都要执行的语句!");}}}【项目二】完成实验指导书——5.2.4 异常处理(1)程序代码class NoLowerLetter extends Exception{public void print(){System.out.printf("%c",'#');}}class NoDigit extends Exception{public void print(){System.out.printf("%c",'*');}}class People{----------------------------精品word文档值得下载值得拥有----------------------------------------------void printLetter(char c) throws NoLowerLetter{if(c<'a'||c>'z'){NoLowerLetter noLowerLetter=new NoLowerLetter();throw noLowerLetter;}else{System.out.print(c);}}void printDigit(char c) throws NoDigit{if(c<'1'||c>'9'){NoDigit noDigit=new NoDigit();throw noDigit;}else{System.out.print(c);}}}public class ExceptionExample{public static void main (String args[]){People people=new People();for(int i=0;i<128;i++){try{people.printLetter((char)i);}catch(NoLowerLetter e){e.print();}}for(int i=0;i<128;i++){try{people.printDigit((char)i);}catch(NoDigit e){e.print();}}}}(2)运行结果【项目三】使用Thread创建线程,要求及部分源码见附件/线程/1~6.jpgclass Tortoise extends Thread{int sleepTime=0,liveLength=0;Tortoise(int sleepTime,String name,int liveLength){this.sleepTime=sleepTime;this.liveLength=liveLength;setName("乌龟");}public void run(){while(true){liveLength--;----------------------------精品word文档值得下载值得拥有----------------------------------------------System.out.printf("@");try{Thread.sleep(80);}catch(InterruptedException e){}if(liveLength<=0){System.out.printf(getName()+"进入死亡状态\n");return;//结束run()方法的语句;}}}}class Rabbit extends Thread{int sleepTime=0,liveLength;Rabbit(int sleepTime,String name,int liveLength){this.sleepTime=sleepTime;this.liveLength=liveLength;setName("兔子");}public void run(){while(true){liveLength--;System.out.printf("*");try{Thread.sleep(50);}//让线程调用sleep()方法进入中断状态,sleepTime毫秒后线程重新排队,等待CUP资源;catch(InterruptedException e){}if(liveLength<=0){System.out.printf(getName()+"进入死亡状态\n");return;//结束run()方法的语句;}}}}public class ThreadExample{public static void main(String args[]){String s1="兔子",s2="乌龟";Rabbit rabit;rabit=new Rabbit(50,s1,50);//新建线程rabit;Tortoise tortoise;tortoise=new Tortoise(20,s2,70);//新建线程tortoise;rabit.start();//启动线程tortoisetortoise.start();//启动线程rabit;}}【项目四】使用Rannable接口创建线程class Bank implements Runnable{private int money=100;----------------------------精品word文档值得下载值得拥有----------------------------------------------Thread zhang,keven;Bank(){String s1="会计",s2="出纳";zhang=new Thread(this);zhang.setName(s1);keven=new Thread(this);keven.setName(s2);}public void run(){int i=0;//声明一个int类型变量i,初值为0;while(true){if(Thread.currentThread().getName().equals("会计")){i=i+1;money=money+1;System.out.printf("%s将money的值改为%d\t",zhang.getName(),money);System.out.printf("%s的局部变量i=%d\n",zhang.getName(),i);if(i>=6){System.out.printf("%s线程进入死亡状态\n",zhang.getName());return;}try{Thread.sleep(1000);}catch(InterruptedException e){}}else if(Thread.currentThread().getName().equals("出纳")){i=i-1;money=money-1;System.out.printf("\n%s将money的值改为%d\t",keven.getName(),money);System.out.printf("%s的局部变量i=%d\n",keven.getName(),i);if(i<=-6){System.out.printf("%s线程进入死亡状态\n",keven.getName());return;}try{Thread.sleep(1000);}catch(InterruptedException e){}}}}}public class BankExample{public static void main(String args[]){Bank bank=new Bank();bank.zhang.start();bank.keven.start();}}----------------------------精品word文档值得下载值得拥有----------------------------------------------三【实验小结】本次实验是这么课程的第四次实验,通过前几次的实验让我对Java的学习有了更深一步的了解,这次实验主要练习的是线程和异常,仍然主要是利用了类的创建,在做实验的过程中,第一步编译的时候还是会出现许多错误,根据错误的地方提示再一步一步的进行修改。