一、基础知识
1.简述使用文本编辑器和JDK创建并运行Java应用程序的基本步骤。
2. 对比分析Java与其它高级语言的编译和运行过程,说明Java具有平台独立性的原因?
3.简述break和continue语句在使用时的区别?
1、①打开文本编辑器输入Java源程序;②保存文件,文件名为源程序中public修饰类的类名,扩展名为.java;
③打开命令行工具;④编译程序,在命令行输入:javac 源程序文件名;⑤运行程序,在命令行输入:java 源程序中public修饰的类名。
2、因为Java程序编译之后的代码不是能被硬件系统直接运行的代码,而是一种“中间码”——字节码。然后不同的硬件平台上安装有不同的Java虚拟机(JVM),由JVM来把字节码再“翻译”成所对应的硬件平台能够执行的代码。因此对于Java编程者来说,不需要考虑硬件平台是什么。所以Java可以跨平台。
而C/C++不可以跨平台的原因就是编译后的代码在特定的硬件上可以直接执行,换个硬件平台这些代码就不能被执行了。不过正是因为可以直接执行,所以C/C++程序的执行效率要比Java程序高
4. Java对标识符命名有什么规定?
答:Java对标识符的命名规定如下:
1) Java语言的标识符必须由字母、下划线(“_”)或美元符号(“$”)开始,其余字符可以是上述三种符号或数字(0-9)。Java语言使用Unicode字符集,所以字母包括‘A’-‘Z’、‘a’-‘z’以及Unicode字符集中序号大于0xC0的所有符号。
2) 保留字不能用于标识符如:abstract boolean 等等。
3) 标识符区分大小写。
5. 请列出Java主要的基本数据类型。
答:Java主要的基本数据类型有:布尔型boolean、字节型byte、字符型char、短整型short、整型int、长整型long、浮点型(单精度型)float、双精度型double。
二、类和对象1
1.什么是类?什么是对象?类和对象有何联系?
2.方法的重载和方法的覆盖有什么不同?
3.类变量和实例变量有何区别?
4.Java的成员变量修饰符有哪几种?其中哪种修饰符限定的范围最大?
5.说明对象的基本概念和主要特征?
1. 答:在面向对象程序设计里,类是定义一个对象的属性和方法的蓝本。对象就是一组变量和相关方法的集合,其中变量表明对象的状态,方法表明对象所具有的行为。类是对象的模板,对象是类的实例,可以从一个类中创建许多对象。
2. 答:方法重载,指的是在类中创建多个具有相同名称,但使用不同参数的方法,Java虚拟机根据传递给方法的参数个数和类型决定调用哪个重载方法。方法的覆盖指在子类中重新定义父类中已有的方法,对于重写的方法,运行时系统根据调用该方法的实例的类型来决定选择哪个方法调用。
3.答:由static修饰的变量称为类变量,当系统在程序中第一次遇到一个类时,便会拷贝一份所有的类变量在内存里。然后那些由此类产生的实例便可分享这些类变量。
实例变量指不是用static修饰的变量,可供实例方法使用。实例变量会复制于每一个从类产生的实例中。
4. 答:成员变量的修饰符有public、protected、private、static、final、transient、volatile七种。Public修饰符的限定范围最大。
5.对象是对客观世界实体及其实体关系的抽象。特点:(1)以数据为中心;(2)实现了数据封装;(3)模块独立性好;(4)对象是主动的;(5)本质上具有并行性。
三、类和对象2
1.抽象类和抽象方法有什么特点?
2.接口和抽象类有什么区别?
3.什么是包?为什么要使用包?
4.简述在类的继承关系中,子类可以继承父类的哪些成员,不能继承的有哪些成员。
1.答:①一个抽象类里可以没有抽象方法,但含有抽象方法的类必定为抽象类。
②抽象类不能被实例化为对象,而只能作为其它类的超类,并且必须被继承。
③若某子类继承自一个抽象类,而该子类不是抽象类,则子类需用覆盖的方式来实例化超类中的所有
抽象方法。抽象方法可再与public、protected复合使用,但不能与final、private和static复合使用。
④抽象方法只有方法声明,不能有方法体。
2..答:从本质上讲,接口是一种特殊的抽象类,然而它们又有区别:
①接口只包含常量,而抽象类则不一定。
②接口中不能有非抽象的方法,但抽象类中可以有。
③一个类能实现多个接口,但只能有一个父类。
④接口并不属于继承结构,它实际与继承无关,无关的类可以实现同一个接口。
3.答:包(package)是类的容器。由于Java编译器为每个类生成一个字节码文件,且文件名与类名相同,因此同名的类有可能发生冲突。为了解决这一问题,Java提供包来管理类名空间。此外一旦创建了一个类,并想重复地使用它,那么把它放在一个包中将是非常有效的。
4.答:可继承:①父类中公开级的成员;②父类中保护级的成员;③如果子类和父类在同一个包中,则子类继承父类中缺省的包访问级的成员。
不可继承:④父类中私有级的成员;⑤不在同一包的缺省成员和父类的同名成员。
5.多态
多态:相同类型的变量,调用相同的方法,执行的具体代码却不同的现象称为多态
继承与多态表现形式:变量隐藏 (属性的不同表现)方法重写(方法的不同表现) 上转型对象(实例的不同表现)
方法的覆盖
规则:父类和子类方法同名;返回值类型形同;参数类型顺序相同;子类方法的权限不小于父类方法权限;子类方法只能抛出父类方法声明抛出的异常或异常子类。(异常应比父类方法更具体)p119 继承关系图
注意:子类只有在能够访问到父类方法时才能对该方法进行重写
函数重载:函数名称相同,函数的参数个数不同或参数类型不同或参数顺序不同
四、异常
1.Error类和Exception类有什么区别?
2.什么是异常?为什么要进行异常处理?
3.简述异常处理的过程。
4.写出下列关键字的意义和运用场合:①final;②finalize;③finally。
1.答:Error类及Exception类是Throwable类的两个直接子类。Error类描述的是内部系统错误,包括动态链接失败、虚拟机错误等,Java程序不做处理。Exception类描述的是程序和外部环境引起的错误,这些错误能通过程序捕获和处理,Exception类是Java程序中需要大量处理的。
3.答:程序运行时出现错误时,创建异常对象,抛出异常对象,捕获该异常对象并进行处理。
4. 答:final, finally, finalize的区别如下:
final 用于声明属性、方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方
法提供垃圾收集时的其他资源回收,例如关闭文件等。
1.答:异常,是指由于程序运行时发生错误,从而导致程序错误结束。
在进行程序设计时,错误的产生是不可避免的,没有异常处理代码的程序,在运行时发生错误则可能非正常结束,引起严重问题。因此,Java给程序员提供了处理运行时错误的功能,称为异常处理。
五、常用类库
1.Vector对象的大小与容量之间有什么区别?
2.String类和StringBuffer类的主要区别是什么?
1.答:一个Vector对象的大小是包含的Object引用的实际数量。而容量是指为Object引用分配的存储空间的数量。
2.答:String类:用于比较两个字符串,查和抽取串中的字符或子串,字符串与其他类型的转换等,String 类对象的内容一旦被初始化就不能再改变。StringBuffer类:用于内容可以改变的字符串,可以将其他各种类型的数据增加、插入到字符串中,也可以翻转字符串中原来的内容。
七、输入输出流
1.简述读写文本文件的基本步骤。
①导入输入/输出包;②创建文件对象;③创建读出/写入操作的对象;④数据文件的读/写操作;⑤关闭文件。
1. 编写一个Application,接受用户从键盘输入的10个整数,并输出这10个整数的最大值和最小值。  import  java.io.* ;
public class  abc
{
public static void  main(String  args[ ])
{  int  i , n = 10 , max = 0 , min = 0 ,  temp = 0;
try {
BufferedReader br = new BufferedReader( new  InputStreamReader(System.in));
max = min = Integer.adLine( ));
} catch ( IOException  e ) { } ;
for  ( i = 2 ; i <= n ; i ++ )  {
try {
BufferedReader br = new BufferedReader(new  InputStreamReader(System.in));
temp = Integer.adLine( ));
if  (temp > max ) max=temp;
if  (temp < min) min=temp;
} catch ( IOException  e ) { } ;
}
System.out.println("max="+max+"\nmin="+min);
}
}
1. 编写一个Application,从键盘输入整数n,并计算从1到n的累加和。
import java.io.*;
public class Application1 {
public static void main(String[] args) {
String s = "";
int n, sum = 0;
System.out.println("计算从1 到n 的累加和。");
System.out.print("请输入n 的值:");
// 从键盘读入字符串s
try {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
s = br.readLine();
}
catch(Exception e) { }
// 将字符串s 转为整型数n
n = Integer.parseInt(s);
// 计算1 到n 的累加和
for(int i=1; i<=n; i++)
sum += i;
// 输出结果
System.out.println("你刚才的输入是:" + n);
System.out.println("1 到n 的累加和是:" + sum);
}
}
2.import java.io.* ;
public class Reverse
{ public static void main(String args[ ])
{ int i , n =10 ;
int a[ ] = new int[10];
for ( i = 0 ; i < n ; i ++ )
try {
java语言使用的字符码集是BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
a[i] = Integer.adLine( )); // 输入一个整数
} catch ( IOException    e ) { } ;
for ( i = n-1 ; i >= 0 ; i ――)
System.out.print(a[i]+" ");
System.out.println( );
}
}
答:从标准输入(即键盘)读入10个整数存入整型数组a中,然后逆序输出这10个整数。
4.import java.io.*;
public class Class1
{
public static void main(String args[ ]){
int i , Max , Min ;
int a[ ] = { 12,67,8,98,23,56,124,55,99,100 };
Max = Min = a[0];
for ( i = 1 ; i < a.length; i ++ ) {
if ( a[i]<Min ) Min = a[i];
if ( a[i]>Max ) Max = a[i];
}
System.out.println( Max+" "+Min );
System.out.println( );
}
}
答:在数组中查并输出最大值和最小值
3.编写一个完整的Java Applet 程序使用复数类Complex验证两个复数1+2i 和3+4i 相加产生一个新的复数4+6i 。
复数类Complex必须满足如下要求:
(1) 复数类Complex 的属性有:
RealPart : int型,代表复数的实数部分
ImaginPart : int型,代表复数的虚数部分
(2) 复数类Complex 的方法有:
Complex( ) : 构造函数,将复数的实部和虚部都置0
Complex( int r , int i ) : 构造函数,形参r 为实部的初值,i为虚部的初值。
Complex complexAdd(Complex a) : 将当前复数对象与形参复数对象相加,所得的结果仍是一个复数值,返回给此方法的调用者。
String ToString( ) : 把当前复数对象的实部、虚部组合成a+bi 的字符串形式,其中a 和b分别为实部和虚部的数据。
答:参考程序如下:
import java.applet.* ;
import java.awt.* ;
public class abc extends Applet
{
Complex a,b,c ;
public void init( )
{
a = new Complex(1,2);
b = new Complex(3,4);
c = new Complex();
}
public void paint(Graphics g)
{
c=aplexAdd(b);
g.drawString("第一个复数:"+a.toString(),10,50);
g.drawString("第二个复数:"+b.toString(),10,70);
g.drawString("两复数之和:"+c.toString(),10,90);
}
}
class Complex
{
int RealPart ; // 复数的实部
int ImaginPart ; // 复数的虚部
Complex() { RealPart = 0 ; ImaginPart = 0 ; }
Complex(int r , int i)
{ RealPart = r ; ImaginPart = i ; }
Complex complexAdd(Complex a)
{
Complex temp = new Complex( ); // 临时复数对象
temp.RealPart=RealPart+a.RealPart;
temp.ImaginPart=ImaginPart+a.ImaginPart;
return temp;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。