Java期末考试题
一、简答题(共8个题,每题5分,共40分)
java语言有哪些特点?
(1)简单的
Java最初是为对家用电器进行集成控制而设计的一种语言,因此它必须简单明了。
Java的风格类似于C++,因而C++程序员初次接触Java语言,就会感到很熟悉。从某种意义上讲,Java语言是C及C++语言的一个变种。
Java摒弃了C++中容易引发程序错误的一些特性,如指针、结构、枚举以及内存管理等。
Java提供了丰富的类库,可以帮助我们很方便的开发Java程序。
(2)面向对象的
面向对象可以说是Java最重要的特性,所以它支持继承、重载、多态等面向对象的特性。Java语言的设计是完全面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。
(3)健壮的
Java致力于检查程序在编译和运行时的错误。Java也是一种强类型的语言,其类型检查比C++还要严格。类型检查帮助我们检查出许多开发早期出现的错误。Java自己负责内
存管理,提供了垃圾内存回收机制,有效的避免了C++中最头疼的内存泄漏问题。
(4)安全的
Java的安全性可从两个方面得到保证。一方 面,在Java语言里,删除了指针和释放内存等C++功能,避免了非法内存操作。另一方面,通过Java的安全体系架构来确保Java代码的安全性。
从一开始,Java就被设计成能够防范各种袭击,包括:禁止运行时堆栈溢出。例如,蠕虫等病毒常用的袭击手段;禁止在自己的处理空间之外破坏内存;未经授权禁止读写文件;许多安全特性相继不断的被加入Java中。
(5)解释的
Java代码是解释执行的,我们使用Java编译器将Java代码编译成字节码,这是一种中间代码,然后由Java解释器解释执行。而C++程序是编译执行的,C++程序代码被编译为本地机器指令,然后执行。
(6)与平台无关的
Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行。
(7)多线程的
Java语言的一个重要特性就是在语言级支持多线程的程序设计。多线程就好像我们做一张桌子,如果你一个人完成这张桌子—就好像单线程,那么你需要先做桌面,做完桌面后,再做4个桌子腿,如果现在有5个人来做桌子—在程序中开辟5个线程,其中1个人做桌面,另外4个人分别做4个桌子腿,那么这两种方式效率的高低,相信大家都能区分出来。
(8)动态的
Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类。
在C++程序设计过程中,每当在类中增加一个实例变量或一个成员函数后, 引用该类的所有子类都必须重新编译,否则将导致程序崩溃。
Java从以下几个方面采取措施来解决这个问题。
a)Java编译器不是将对实例变量和成员函数的引用编译为数值引用,而是将符号引用信息在字节码中保存下来,传递给解释器,再由解释器在完成动态连接类后,将符号引用信息转换为数值偏移量。
b)一个在存储器中生成的对象不在编译过程中决定,而是延迟到运行时由解释器确定。这样,对类中的变量和方法进行更新时就不至于影响现存的代码。
c)解释执行字节码时,这种符号信息的查找和转换过程仅在一个新的名字出现时才进行一次,随后代码便可以全速执行。在运行时确定引用的好处是可以使用已被更新的类,
而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。
d)Java还简化了使用一个升级的或全新协议的方法。如果你的系统运行Java程序时遇到了不知怎样处理的程序,Java能自动下载你所需要的功能程序。
什么是java虚拟机?
Java虚拟机JVM(Java Virtual Machine)在JAVA编程里面具有非常重要的地位。约相当于JAVA运行环境JRE。JAVA虚拟机是在真实机器中用软件模拟实现的一种想象机器,它为不同的硬件平台提供了一种编译JAVA技术代码的规范,该规范使JAVA软件独立于平台。
JVM对下列各项做出了定义:指令集,寄存器,类文件格式,栈,垃圾收集堆,存储区。
Java虚拟机的功能:
(1)通过ClassLoader寻找和装载Class文件
(2)解释字节码成为指令并执行,提供Class文件的运行环境
(3)进行运行期间垃圾回收
(4)提供与硬件交互的平台
JAVA虚拟机是JAVA平台无关的保障。正是因为有虚拟机这中间层,JAVA才能够实现与平台无关。虚拟机就好比是一个JAVA运行的基本平台,所有的JAVA程序都运行在虚拟机上。所有与平台有关的东西都是由虚拟机去处理 。
什么是方法重载(Overloading)与方法覆盖(Overriding)?
(1) 方法重载(Overloading):
方法重载是指同名的方法在不同的地方具有多种含义。方法重载使得在类中可以存在方法名相同的多个方法,但方法的原型不能完全相同,由方法的参数不同来决定所使用的是哪个方法。方法的原型包括方法名和方法参数类型。
(2) 方法覆盖(overriding)
方法覆盖也叫方法重写,是指方法的含义被重新编写后的方法所替代。对于方法覆盖,子类可以重新实现父类的某些方法,并具有自己的特征。这样,覆盖隐藏了父类的方法,使子类可以具有自己的实现方法。子类覆盖父类的方法时,子类中方法的访问权限不能低于父类中该方法的访问权限
java中equals和“= =”的区别?
使用“== ==”比较基本类型字段,使用equals 方法比较对象字段。
== ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同;equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,== ==不一定为true。
什么是抽象类?什么是接口?
一般称含有抽象方法的类称为抽象类。抽象类是不能被实例化的类,用abstract修饰。
接口是一种与类相似的结构,但接口不是类,而是一组对类的要求,这些类要与接口一致一个类可以实现一个或多个接口,并在需要接口的地方,随时使用实现了相应接口的对象。
什么是多态?
一个对象变量可以指向多种实际类型对象的现象被称为“多态”(polymorphism)。
异常的分类?它们的区别是什么?
Error:称为错误,由Java虚拟机生成并抛出,包括动态连接失败、虚拟机错误等,程序对其不作处理。
Exception:所以异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用
户显式的声明或捕获。
Runtime Exception:一类特殊的异常,如被0除、数组下标超范围等,其产生比较
频繁,处理麻烦,如果显式的声明或捕获将会对程序的可读性和运行效率影响很大。因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。
什么是流?
流(stream)是输入和输出设备的一种抽象表示,这些设备是数据源或数据终点。可以象流中写入数据,也可以从流中读出数据。可以把流想象为流入自己程序或从自己程序中流出的字节序列。
当把数据写入流时,该流称为输出流。输出流可以通往任何可以传输字节序列的设备,例如硬盘上的文件,或连接用户系统至远程系统的电话线路。输出流也可以通向显示器,但这会大大限制其真正的功能。
二、程序设计题(共4个题,每题15分,共60分)
输出1到100以内的前10个质数。
public class Zhishu {
public static void main(String args[])
{
System.out.println(\"1到100以内的前10个质数:\");
int s,i,j=0;
for(s=2;s<=100;s++)
{
for(i=2;i<=s/2;i++)
{
if(s%i==0)
break;
}
if(i>s/2)
{
j++;
if(j<=10)
System.out.println(\"第\"+j+\"个:\"+s);
}
}
}
}
计算并输出result=1!+2!+3!+ …+10!的结果。
public class Sum {
public static void main(String args[])
{
System.out.println(\"result=1!+2!+3!+ …+10!\");
int s=0,t=1;
int n;
for(n=1;n<=20;n++)
{
t=t*n;
s=s+t;
}
System.out.println(\"result=\" + s);
}
定义一个长方形类,该类具有长和宽两种属性,并具有相应的构造方法、属性访问方法和计算周长和面积的方法,要求输出长是5宽是4的长方形的面积和周长。
public class Rectangle {
private double length;//长
private double width;//宽
public Rectangle (){}// 无参数的构造方法
public Rectangle (double length, double width)
{
this.length=length;
this.width=width;
} //带参数的构造方法
public void setLength(double lLength)
{
length=lLength;
}
public void setWidth(double wWidth)
{
width=wWidth;
}
public double getLength()
{
return length;
}
public double getWidth()
{
return width;
}
public double area(double i, double j)
{//计算面积
return (length*width);
}
public double permcter (double i, double j)
{//计算周长
return ((length+width)*2);
}
public static void main(String []args)
{
System.out.println(\"长为5,宽为4的长方形的周长与面积:\");
Rectangle Rectangle =new Rectangle (5,4);
System.out.println(\"周长(5,4)=\"+Rectangle.permcter(5,4));
System.out.println(\"面积(5,4)=\"+Rectangle.area(5,4));
}
}
定义一个父类Parents和两个子类Father类和Mother类:Parents类具有两个属性:姓名和年龄,该类所包含的方法除了构造方法和相应的get和set方法,还有一个print()用来打印对象的具体的信息,例如,输出“我是家长,我的名字是...,我的年龄是...岁\";Father类增加了一个属性:爱好,并重写了父类Parents中的print()方法,输出“我是父亲,我的名字是...,我的年龄是...岁,我的爱好是...”;Mother类增加了一个属性:头发的颜色,并重写了父类Parents中的print()方法,输出“我是母亲,我的名字是...,我的年龄是...岁,我头发的颜色是...”。最后定义一个测试类Test,要求显示如下信息:
我是家长,我的名字是王瑞,我的年龄是36岁
我是父亲,我的名字是张峰,我的年龄是45岁,我的爱好是打保龄球
我是母亲,我的名字是孙娟,我的年龄是36岁,我的头发颜色是棕色
Parents:
public abstract class Parents {
private String name;//姓名
private int age;//年龄
public Parents(){
}
public Parents(String name,int age){
this.setName(name);
this.setAge(age);
}
public void setName(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
void Sys(){
System.out.println(\"我是家长,\"+\"我的名字是\"+this.getName()+\",我的年龄是\"+this.getAge()+\"岁\");
}
}
Father:
public class Father extends Parents{
private String favor;
public Father(String name,int age, String favor){
super(name,age);
this.favor=favor;
}
public void setFavor(String favor) {
this.favor = favor;
}
public String getFavor() {
return favor;
}
void Sys()
{
System.out.println(\"我是父亲,\"+\"我的名字是\"+this.getName()+\",我的年龄是\"+this.getAge()+\"岁,我的爱好是\"+this.getFavor());
}
}
Mother:
public class Mother extends Parents{
private String hairColor;//头发颜色
public Mother(String name,int age,String hairColor){
super(name,age);
this.hairColor=hairColor;
}
public void setHairColor(String hairColor) {
this.hairColor = hairColor;
}
public String getHairColor() {
return hairColor;
}
void Sys(){
System.out.print(\"我是母亲,\"+\"我的名字是\"+this.getName()+\",我的年龄是\"+this.getAge()+\"岁,我头发的颜色是\"+this.getHairColor());
}
}
Test:
public class Test{
public static void main(String[] args)
{
Parents p=new Parents(\"王瑞\
Father f=new Father(\"张峰\打保龄球\");
Mother m=new Mother(\"孙娟\棕色\");
p.Sys();
f.Sys();
m.Sys();
}
因篇幅问题不能全部显示,请点此查看更多更全内容