资源描述
项目1
一、思考题
1.Java程序有几种版本,分别是什么?
Java有三种版本,分别是J2ME、J2SE、J2EE
2.Java程序有何特点?
Java语言的特点如下:
①面向对象:支持代码继承及重用,是完全面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。
②解释执行:Java解释器(运行系统)能直接运行目标代码指令。
③平台无关:Java源程序被编译成一种高层次的与机器无关的Byte-codes格式语言, 被设计在Java虚拟机上运行。
④多线程:Java提供的多线程功能使得在一个程序里可同时执行多个小任务。多线程带来的好处是可以有更好的交互性能和实时控制性能。
⑤健壮性:Java致力于检查程序在编译和运行时的错误,类型检查帮助检查出许多开发早期出现的错误。
3.什么是JVM,为什么需要JVM?
JVM即Java虚拟机,是一台可以存在于不同的真实的软、硬件环境下的虚拟的计算机,其功能是将字节码解释为真实平台能执行的指令。Java正是通过虚拟机JVM技术,实现了与平台无关,实现“编写一次,到处运行”。因此,任何平台只要安装相应的Java虚拟机环境,就能运行Java程序。
4.如何理解Java程序的基本结构?
①语句package p1;是建立一个包(文件夹),生成的类文件将存放于包中。
②程序第一行public class 类名{},是一个类定义语句。public关键字指明类的访问方式为公有,也就是在整个程序内都可以访问到它。如果将类定义为public,则类其名称必须与主文件名一致,并且大小写敏感。
③类后大括号内可以定义类的成员和方法,对于一个可执行的Java类,main方法是必需的,而且该main方法必须是公有 (public)、静态 (static)和没有返回值(void)的,同时它只能带一个字符串型(String[])的参数。
④程序的一行“//……”是注释,只说明不运行。
⑤每个命令语句结束,必须以“;”结尾。
二、编程
1.编写一Java应用程序,要求在屏幕上输出字符串“Happy New Year!”。
class Prac1
{
public static void main(String args[])
{
System.out.println("Happy New Year!");
}
}
2.编写一个简单的Java程序,在屏幕上输出如下图形:
*
* * *
* * * * *
class Prac2
{
public static void main(String args[])
{
System.out.println(" *");
System.out.println(" ***");
System.out.println("*****");
}
}
项目2
一、选择题
1.数组中可以包含什么类型的元素?( D )
A. int型 B. String型 C. 数组 D. 以上都可以
2.Java中定义数组名为Arr,下面哪项可以得到数组元素的个数?( B )
A. Arr.length( ) B. Arr.length C. Arr (xyz) D. Arr (xyz)
3.下面哪条语句定义了3个元素的数组?( A )
A. int [ ] a={20,30,40};
B. int a [ ]=new int(3) ;
C. int [3] array;
D. int [ ] arr;
4.下面的代码段中,执行之后i和j的值是( B )。
int i = 10;
int j;
j = i++;
A. 10, 10 B. 11, 10 C. 10, 11 D. 11, 11
二、编程
1.试编写一个程序,输入三条边长值,并判断这三条边长能不能构成三角形,如果能,能构成什么样的三角形(一般、等边、等腰)。
import java.util.*;
class Practice1{
public static void main(String args[])
{
Scanner s=new Scanner(System.in);
int a,b,c;
a=s.nextInt();
b=s.nextInt();
c=s.nextInt();
if(a+b>c&&a+c>b&&b+c>a)
{
if(a==b&&a==c)
System.out.print("构成的三角形为等边三角形。");
else if(a==b||a==c||b==c)
System.out.print("构成的三角形为等腰三角形。");
else
System.out.print("构成的三角形为一般三角形。");
}
else
System.out.print("不能构成三角形。");
}
}
2.试编写一个程序,读入10个学生的成绩,成绩在0~59分为D,成绩在60~79分为C,成绩在80~89分为B,成绩在90~100分为A,并输出A、B、C、D的人数个数。
import java.util.*;
public class Practice2{
public static void main(String args[]) throws IOException
{
int a=10,a1=0,a2=0,a3=0,a4=0,c;
int numa[]=new int[a];
for (int i=0;i<a;i++){
System.out.print("请输入第"+(i+1)+"个人的成绩");
c=getInputData();
while (c<0||c>100)
{
System.out.print("请重新输入第"+(i+1)+"个学生的成绩");
c=getInputData();
}
numa[i]=c;//保存
System.out.println(numa[i]);
switch (numa[i]/10){
case 10:
System.out.println("成绩为A级!");
a1++;
break;
case 9:
System.out.println("成绩为A级!");
a1++;
break;
case 8:
System.out.println("成绩为B级!");
a2++;
break;
case 7:
System.out.println("成绩为C级!");
a3++;
break;
case 6:
System.out.println("成绩为C级!");
a3++;
break;
default:
System.out.println("成绩为D级!");
a4++;
break;
}
}
System.out.println("90-100分的人数="+a1);
System.out.println("80-89分的人数="+a2);
System.out.println("60-79分的人数="+a3);
System.out.println("0-59分的人数="+a4);
}
public static int getInputData() throws IOException
{
Scanner s=new Scanner(System.in);
int n=s.nextInt();
return n;
}
}
3.试编写一个程序,输出以下形式的图形。
* * * * * *
* * * * * *
* * * * * *
* * * * * *
class Practice3
{
public static void main(String args[])
{
for(int i=1;i<=4;i++)
{
for(int j=1;j<=i;j++)
System.out.print(" ");
for(int k=1;k<=5;k++)
System.out.print("*");
System.out.println();
}
}
}
4.试编写游戏程序,完成猜数字游戏,数字是由计算机随机产生的100以内整数。一次就猜中得100分,2次才猜中得90分,依次类推,超过10次无分。程序最后输出参与者得分。
import java.util.*;
class Practice4
{
public static void main(String args[])
{
int a=(int)(Math.random()*10);
int guess,score=100;
Scanner s=new Scanner(System.in);
int i;
for( i=1;i<=10;i++)
{
guess=s.nextInt();
if(guess==a)
break;
score=score-10;
}
System.out.print(i+"得分为:"+score);
}
}
项目3
一、选择题
1. 定义类头(非内部类)时,不可能用到的关键字是( B )
A) class B)private C)extends D)public
2.下列类头定义中,错误的是( A )
A)public x extends y {...} B) public class x extends y {...}
C)class x extends y implements y1 {...} D)class x {...}
3.设 A为已定义的类名,下列声明A类的对象a的语句中正确的是( D )
A)float A a; B)public A a=A( );
C)A a=new int( ); D)static A a=new A( );
4.设 X 、Y 均为已定义的类名,下列声明类X的对象x1的语句中正确的是( C )
A)public X x1= new Y( ); B)X x1= X ( );
C)X x1=new X( ); D)int X x1;
5.设X 、Y为已定义的类名,下列声明X类的对象x1的语句中正确的是( A )
A)static X x1; B)public X x1=new X(int 123);
C)Y x1; D)X x1= X( );
6. 有一个类A,以下为其构造方法的声明,其中正确的是( A )
A)public A(int x){...} B)static A(int x){...}
C)public a(int x){...} D)void A(int x){...}
7.有一个类Student,以下为其构造方法的声明,其中正确的是( B )
A)void Student (int x){...} B)Student (int x){...}
C)s(int x){...} D)void s(int x){...}
8.下列选项中,用于定义接口的关键字是( A )
A)interface B) implements C) abstract D)class
9.现有类A和接口B,以下描述中表示类A实现接口B的语句是( A )
A)class A implements B B)class B implements A
C)class A extends B D)class B extends A
二、填空题
1.如果子类中的某个变量的变量名与它的父类中的某个变量完全一样,则称子类中的这个变量___隐藏__了父类的同名变量。
2.如果子类中的某个方法的名字、返回值类型和___参数列表__与它的父类中的某个方法完全一样,则称子类中的这个方法覆盖了父类的同名方法。
3.抽象方法只有方法头,没有___方法体_____。
4.接口中所有属性均为___public______、___static__和___final_____的。
5.一个类如果实现一个接口,那么它就必须实现接口中定义的所有方法,否则该类就必须定义成__抽象__的。
6.Java语言中用于表示类间继承的关键字是____extends_______。
7.下面是一个类的定义,请将其补充完整。
class _Student____
{
String name;
int age;
Student( __String___ s, int i)
{
name=s;
age=i;
}
}
8.下面是一个类的定义,请将其补充完整。
_____class______ A
{ String s;
___static__ int a=666;
A(String s1)
{
s=s1;
}
static int geta( )
{
return a;
}
}
三、编程题
1.编写一个类,描述学生的学号、姓名、成绩。学号用整型,成绩用浮点型,姓名用String类型。编写一个测试类,输入学生的学号、姓名、成绩,并显示该学号的学生姓名,以及成绩。
import java.util.*;
class Student{
int sNum;
String name;
double score;
}
class T1_Student{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
Student s=new Student();
s.sNum=sc.nextInt();
s.name=sc.next();
s.score=sc.nextDouble();
System.out.println(s.name+"的学号是"+s.sNum+"成绩是"+s.score);
}
}
2.设计一个Birthday类,其成员变量有:year,month,day;提供构造方法、输出Birthday对象值的方法和计算年龄的方法。编写程序测试这个类。
class Birthday{
private int year;
private int month;
private int day;
public Birthday(int year,int month,int day)
{ this.year=year;
this.month=month;
this.day=day;
}
public void printBirthDay()
{ System.out.println(year+"-"+month+"-"+day);
}
public int printAge()
{ return 2021-year; }
public static void main(String[] args)
{
Birthday birth=new Birthday(1991,11,5);
birth.printBirthDay();
int age=birth.printAge();
System.out.println(age);
}
}
3.编写一个类,描述汽车,其中用字符型描述车的牌号,用浮点型描述车的价格。编写一个测试类,其中有一个修改价格方法,对汽车对象进行操作,根据折扣数修改汽车的价格,最后在main方法中输出修改过后的汽车信息。
public class ChangeCar{
public static void main(String[] args){
Car c=new Car();
c.carNum="鲁A1111";
c.price=10;
System.out.println("before change ,the car's num and price is:"+c.carNum+" "+c.price);
changePrice(c);
System.out.println("After Change ,the car's price is:"+c.price);
}
public static void changePrice(Car c){
c.price=c.price*0.8;
}
}
class Car{
String carNum;
double price;
}
4.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个类都有构造方法和输出相关数据的方法。
class Vehicle
{
int wheels;
float weight;
Vehicle(int a,float b)
{
wheels=a;
weight=b;
}
void outData()
{
System.out.print("The vehicle's data:wheels:"+wheels+",weight:"+weight);
}
}
class Car extends Vehicle
{
int loader;
Car(int a,float b,int c)
{
super(a,b);
loader=c;
}
void outData()
{
super.outData();
System.out.print(",loader:"+loader);
}
}
class Truck extends Car
{
float payload;
Truck(int a,float b,int c,float d)
{
super(a,b,c);
payload=d;
}
void outData()
{
super.outData();
System.out.println(",payload:"+payload);
}
}
class Test
{
public static void main(String args[])
{
Vehicle v=new Vehicle(4,7);
v.outData();
System.out.println();
Car c=new Car(4,6,4);
c.outData();
System.out.println();
Truck t=new Truck(4,2,10,8);
t.outData();
}
}
5.定义一个接口CanFly,描述会飞的方法public void fly();分别定义类飞机和鸟,实现CanFly接口。定义一个测试类,测试飞机和鸟,在main方法中创建飞机对象和鸟对象,让飞机和鸟起飞。
interface CanFly
{
public void fly();
}
class Plane implements CanFly
{
public void fly()
{
System.out.println("飞机需借助螺旋桨飞上了天空。");
}
}
class Bird implements CanFly
{
public void fly()
{
System.out.println("鸟需借助翅膀飞上了天空。");
}
}
class Test
{
public static void main(String args[])
{
Plane p=new Plane();
Bird b=new Bird();
p.fly();
b.fly();
}
}
项目4
一、选择题
1.关于异常的定义,下列描述中最正确的一个是( D )。
A)程序编译错误 B)程序语法错误
C)程序自定义的异常事件 D)程序编译或运行时发生的异常事件
2.抛出异常时,应该使用的子句是( A )。
A)throw B)catch C)finally D)throws
3.自定义异常类时,可以继承的类是( C )。
A)Error B)Applet C)Exception及其子类 D)AssertionError
4.当方法产生异常但却无法确定该如何处理时,应采用的方法是( C )。
A)声明异常 B)捕获异常 C)抛出异常 D)自定义异常
5.对于try{…}catch子句的排列方式,正确的一项是( A )。
A)子类异常在前,父类异常在后 B)父类异常在前,子类异常在后
C)只能有子类异常 D)父类异常与子类异常不能同时出现
6.下列关于try、catch和finally的表述,错误的是( C )。
A)try语句块后必须紧跟catch语句块 B)catch语句块必须紧跟在try语句块后
C)可以有try但无catch D)可以有try但无finally
7.下列描述中,错误的一项是( A )。
A)一个程序抛出异常,其他任何运行中的程序都可以捕获
B)算术溢出需要进行异常处理
C)在方法中检测到错误但不知如何处理时,方法就声明异常
D)任何没有被程序捕获的异常最终被默认处理程序处理
8.下面程序运行时,会产生的异常是( C )。
class Test{
public static void main(String ar[])
{int x=0,y=20,z;
z=(x+y)/(x*y);
System.out.println("z="+z);
}
}
A)ArrayIndexOutOfBoundsException B)NumberFormatException
C)ArithMeticException D)NullPointerException
二、填空题
1.一个try代码段后必须跟 catch 代码段, finally 代码段可以没有。
2.自定义异常类必须继承 Exception 类或其子类。
3.异常处理机制可以允许根据具体的情况选择在何处处理异常,可以在 当前方法中 捕获并处理,也可以用throws子句把它交给 调用方法 去处理。
4.数组下标越界对应的类是 ArrayIndexOutOfBoundsException 。
5.为达到高效运行的要求, 运行时产生 的异常,可以直接交给Java虚拟机系统来处理,而 Exception 类派生出的非运行异常,要求编写程序捕获或者声明。
三、编程题
1.从键盘输入5个数,求出5个数的阶乘之和。若输入负数时,产生异常并进行相应的处理。
import javax.swing.*;
class ExceptionExam
{
public static void main(String args[])
{
int i,sum=0,j;
for(i=0;i<5;i++)
{
j=1;
int x=Integer.parseInt(JOptionPane.showInputDialog(null,"input:"));
try
{
if(x<0) throw new Exception();
for(int k=1;k<=x;k++)
j=j*k;
sum=sum+j;
}catch(Exception e)
{
System.out.println("输入了一个负数,请重新输入!");
i--;
}
}
System.out.println("阶乘和为:"+sum);
}
}
2.设计自己的异常类,从键盘输入一个数,若输入的数不小于0,则输出它的平方根。若小于0,则输出提示信息“输入错误”。(求平方根的方法为:Math.sqrt(int x))
import javax.swing.*;
class MyException extends Exception
{
static int i=3;
MyException()
{
super("产生异常!");
}
}
class ExceptionTest
{
public static void main(String args[])
{
int x=Integer.parseInt(JOptionPane.showInputDialog(null,"input:"));
try
{
if(x<0) throw new MyException();
System.out.println("输入数的平方根为:"+Math.sqrt(x));
}catch(MyException e)
{
System.out.println(e.getMessage());
System.out.println("异常编号为:"+e.i);
}
}
}
项目5
一、选择题
1.下面属于容器类的是( A )
A.JFrame B.JTextField C.Color D.JMenu
2.FlowLayout的布局策略是( A )
A.按添加的顺序由左至右将组件排列在容器中。
B.按设定的行数和列数以网格的形式排列组件。
C.将窗口划分成五部分,在这五个区域中添加组件。
D.组件相互叠加排列在容器中。
3.BorderLayout的布局策略是( C )
A.按添加的顺序由左至右将组件排列在容器中。
B.按设定的行数和列数以网格的形式排列组件。
C.将窗口划分成五部分,在这五个区域中添加组件。
D.组件相互叠加排列在容器中。
4.GridLayout的布局策略是( B )
A.按添加的顺序由左至右将组件排列在容器中。
B.按设定的行数和列数以网格的形式排列组件。
C.将窗口划分成五部分,在这五个区域中添加组件。
D.组件相互叠加排列在容器中。
5.JFrame中内容窗格缺省的布局管理器是( B )
A.FlowLayout B.BorderLayout C.GridLayout D.CardLayout
6.监听事件和处理事件( B )
A.都由Listener完成 B.都由相应事件Listener处注册的构件完成
C.由Listener和构件分别完成 D.由Listener和窗口分别完成
7.在下列事件处理机制中不是机制中的角色的是( A )
A.事件 B.事件源 C.事件接口 D.事件处理者
8.addActionListener(this)方法中的this参数表示的意思是( B )
A.当有事件发生时,应该使用this监听器 B.this对象类会处理此事件
C.this 事件优先于其他事件 D.只是一种形式
9.下列关于Component的方法中,错误的是( A )
A.getName( )用于获得组件的名字 B. getSize( )用于获得组件的大小
C.setColor( )用于设置前景颜色 D.setVisible( )设置组件是否可见
10.当窗口关闭时,会触发的事件是( C )
A.ContainerEvent B.ItemEvent C.WindowEvent D.MouseEvent
二、填空题
1.AWT的用户界面组件库被更稳定、通用、灵活的库取代,该库称为 swing 。
2.__布局管理器__用于安排容器上的GUI组件。
3.设置容器布局管理器的方法是 setLayout() 。
4.当释放鼠标按键时,将产生____ mouseRelease _____事件。
5.Java为那些声明了多个方法的Listener接口提供了一个对应的___适配器___,在该类中实现了对应接口的所有方法。
6.ActionEvent事件的监听接口是 ActionListener ,注册方法名是 add ActionListener() ,事件处理方法名是__public void action_performed()_______。
7.图形用户界面通过____事件___响应用户和程序的交互,产生事件的组件称为___事件源_______。
8.Java的Swing包中定义菜单的类是 JMenu 。
三、编程题
1.设计如图所示样式的图形用户界面(不要求实现功能)。
import javax.swing.*;
class Demo
{
public Demo()
{
JLabel b1 = new JLabel("当前时间:");
JLabel b2 = new JLabel("时");
JLabel b3 = new JLabel("分");
JLabel b4 = new JLabel("秒");
JLabel b5 = new JLabel("闹钟时间:");
JLabel b6 = new JLabel("时");
JLabel b7= new JLabel("分");
JLabel b8 = new JLabel("秒");
JLabel b9 = new JLabel("闹钟设置");
JTextField t1=new JTextField("8",3);
JTextField t2=new JTextField("57",3);
JTextField t3=new JTextField("59",3);
JTextField t4=new JTextField(3);
JTextField t5=new JTextField(3);
JTextField t6=new JTextField(3);
JButton bt1=new JButton("开");
JButton bt2=new JButton("关");
JFrame win = new JFrame();
win.setLayout(new FlowLayout());
win.add(b1);
win.add(t1);
win.add(b2);
win.add(t2);
win.add(b3);
win.add(t3);
win.add(b4);
win.add(b5);
win.add(t4);
win.add(b6);
win.add(t5);
win.add(b7);
win.add(t6);
win.add(b8);
win.add(b9);
win.add(bt1);
win.add(bt2);
win.setSize(340,160);
win.setVisible(true);
}
public static void main(String arg[])
{
new Demo();
}
}
2.编写一个将华氏温度转换为摄氏温度的程序。其中一个文本框输入华氏温度,另一个文本框显示转换后的摄氏温度,一个按钮完成温度的转换。使用下面的公式进行温度转换:摄氏温度=5/9×(华氏温度-32)。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Demo implements ActionListener
{ JLabel b1,b2;
TJextField t1,t2;
public Demo()
{
b1 = new JLabel("华氏温度:");
b2 = new JLa
展开阅读全文