Java期末复习

1.请列举Java语言中的8种基本数据类型,并说明每种数据类型所占用的空间大小。

答:Java语言的8种基本数据类型有:

        byte字节型,占1个字节;

        short短整型,占2个字节;

        int整型,占4个字节;

        long长整型,占8个字节;

        float单精度浮点型,占4个字节;

        double双精度浮点型,占8个字节;

        char字符型,占两个字节;

        boolean型,表示逻辑值,有true和false两个值,分别占1个字节。

2.什么是方法重载?(overload)

答:方法重载是指在一个类中可以声明多个同名的方法,而方法中参数的个数或者数据类型不一致。调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。

3.什么是方法重写/覆盖?(override)

答:在继承关系中,子类的方法与父类的某一方法具有相同的方法名、返回类型和参数列表,则称子类的该方法重写或覆盖父类的方法。

4.什么是容器?

答:在Java当中,如果有一个类专门用来存放其它类的对象,这个类就叫做容器

5.什么是事件?

答:当用户在界面上执行一个操作,就会产生一个事件。Java中事件是用来描述不同类型用户操作的对象。

6.什么是事件源?

答:事件源,即产生事件的组件。例如:当在Button上单击鼠标时,会产生一个ActionEvent类型的事件,Button就是事件源。

7.什么是事件监听器?

答:调用事件处理方法的对象。当界面操作事件产生并被发送到产生事件的组件时,该组件将把事件发送给能接受和处理该事件的监听器

8.请简述GUI中实现事件监听的步骤。

答: (1)通过实现ActionListener接口或者继承ActionAdapter类实现一个事件监听器类,并对处理监听动作的方法进行重写;

        (2)创建事件源对象和事件监听器对象;

        (3)调用事件源的addActionLisntener()方法,为事件源注册事件监听器对象

9.线程的生命周期

答:新建、就绪、执行、阻塞、死亡

10.区别:构造方法和普通方法

答: (1)构造方法是类的一个特殊成员,它会在类实例化对象时被自动调用。

        (2)普通方法只有在使用的时候才会被调用。

        在定义构造方法时要求方法名与类名相同、在方法名的前面没有返回值类型的声明、在方法中不能使用return语句返回一个值。

11.匿名内部类的访问

答: (1)匿名内部类与局部类对作用域内的变量拥有相同的访问权限。

        (2)匿名内部类只能访问外部的静态变量 和final修饰的变量

12.区别:继承和多态

答: (1)多态意味着一个对象有着多种形态,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。简单的说,多态就是使用父类的变量引用子类对象,根据被引用子类对象的特性,程序会得到不同的运行效果。

        (2)继承是指可以使用现有类的所有功能,并在无需重写原来的类的情况下对这些功能进行扩展。子类继承父类中所有的属性和方法,但是对于private的属性和方法,是父类的隐私,所以子类虽然是继承了,但是不能访问这些属性和方法的引用,所以相当于没有继承。

13.区别:抽象类和接口

答: (1)在Java中,使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。

        (2)接口可以说是一种特殊的抽象类,接口中只能定义常量和抽象方法。由于接口的特殊性,在定义时需要使用interface关键字。

14.区别:sleep() 和 wait()

答: (1)调用sleep()方法,正在执行的线程主动让出CPU去执行其他线程,在sleep()方法指定的时间过后,CPU才会回到这个线程上继续往下执行,如果当前线程进入了同步锁,sleep()方法并不会释放锁,即使当前线程使用sleep()方法让出了CPU,但其它被同步锁挡住了的线程也无法得到执行。

        (2)wait()在一个已经进入了同步锁的线程内进行调用,让当前线程暂时让出同步锁,以便其它正在等待此锁的线程可以得到同步锁并运行。当其它线程调用了notify()方法后,调用wait()方法的线程就会解除wait状态,当再次获得同步锁后,程序可以继续向下执行。

15.区别:String和StringBuffer

答: (1)String类是不可变类,即字符串值一旦初始化后就不可能改变。

        (2)StringBuffer是可变字符串类,类似String的缓冲区,可以修改字符串的值。

16.区别:Date和Calender类

答:Date类用来表示某个特定的瞬间,能够精确到毫秒。而在实际应用中,往往需要把一个日期中的年、月、日等信息单独返回进行显示或处理,这个类中的大部分方法都已被标记过时。

        Calender类基本取代了Date类,该类中定义了一系列用于完成日期和时间字段操作的方法。

        Calendar的getTime()方法,getTime()返回一个表示Calendar时间值的Date对象,同时Calendar有一个setTime(Date date)方法,setTime()方法接收一个Date对象,将Date对象表示的时间值设置给Calendar对象,通过这两个方法就可以完成Date和Calendar对象之间的转换。 

17.区别:AWT和Swing 

答: (1)AWT提供了一套与本地图形界面进行交互的接口。AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。

        (2)Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。由于在Swing 中没有使用本地方法来实现图形功能,我们通常把Swing控件称为轻量级控件。

        AWT和Swing之间的基本区别:AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。在标准版的Java中则提倡使用Swing。

18.区别:continue和break

答: (1)用break语句可以使流程跳出switch语句体,也可以用break语句在循环结构终止本层循环体,从而提前结束本层循环。只能在循环体内和switch语句体内使用break;当break出现在循环体中的switch语句体内时,只是跳出该switch语句体,并不能终止循环体的执行。若想强行终止循环体的执行,可以在循环体中,但并不在switch语句中设置break语句,满足某种条件则跳出本层循环体。

        (2)continue语句的作用是跳过本次循环体中余下尚未执行的语句,立即进行下一次的循环条件判定,可以理解为仅结束本次循环。continue语句并没有使整个循环终止。

19.区别:throws和throw

答: (1)throws出现在方法函数头;而throw出现在函数体。

        (2)throws表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。

        两者都是消极处理异常的方式(这里的消极并不是说这种方式不好),只是抛出或者可能抛出异常,但是不会由函数去处理异常,真正的处理异常由函数的上层调用处理。

20.区别:封装和隐藏

答: 对父类变量封装就是将变量设置为private通过set和get方法获取。

        对父类方法的隐藏就是子类中复写父类的方法,然后实现多态来隐藏。

21.区别:类方法和实例方法

答: (1)类方法是属于整个类,而不属于某个对象。

        (2)类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量。

        (3)类方法的调用可以通过类名.类方法和对象.类方法,而实例方法只能通过对象.实例方法访问。

        (4)类方法只能访问类方法,而实例方法可以访问类方法和实例方法。

        (5)类方法不能被覆盖,实例方法可以被覆盖。

22.区别:final和finally

答: (1)final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。内部类要访问局部变量,局部变量必须定义成final类型。

        (2)finally是异常处理语句结构的一部分,表示总是执行。

23.区别:throws和try-catch

答: (1)throws是表明方法抛出异常,需要调用者来处理,如果不想处理就一直向外抛,最后会有JVM来处理;

        (2)try catch 是自己来捕获别人抛出的异常,然后在catch里面去处理;

一般情况下,第二种情况要好一些,这样可以清楚地看到异常的原因,并加以修正。

24.catch语句中处理异常时,异常之间是否有继承关系,若有关系,父类在子类的后面,若无关系,顺序任意

25.java中有几种方法可以实现一个线程?请举例说明

答:(1)继承java.lang包下的Thread类,重写Thread类的run()方法,在run()方法中实现运行在线程上的代码。

new Thread() {

    public void run(){}

}.start();

(2)实现java.lang.Runnable接口,同样是在run()方法中实现运行在线程上的代码。

new Thread(new Runnable(){

     public void run(){}

}).start()

26.多线程有几种实现方法?同步有几种实现方法

答:多线程有两大实现方法:extends Thread类、implements Runnable接口

(1)继承Thread类,由子类重写run()方法

        自定义子类继承Thread类

        将让线程运行的代码存储到run()方法中

        通过创建Thread的子类对象,创建线程对象

        通过子类调用start()方法,开启线程

(2)实现Runnable接口

        自定义类实现Runnable接口

        将让线程运行的代码存储到run()方法中

        创建Thread类线程对象

        创建自定义类对象,将自定义类对象作为实际参数传递给Thread类的构造函数(为了让线程对象明确要运行的run方法所属的对象)

        调用Thread对象的start方法开启线程,并运行Runnable接口中的run方法synchronized,wait 与notify 都可以实现同步

你可能感兴趣的:(期末复习,java,开发语言,经验分享)