【Java期末复习资料】(3)简答题

本文章主要是简答题,知识点、例题已经发过了,可以在主页专栏Java中找一下

1.请简述Java语言的特点:

  • 简单易学,Java风格类似于C++,但它摒弃了C++中的复杂,不安全的特性。
  • 面向对象:Java设计是完全面向对象的,它具有面向对象的封装,继承和多态三大特性
  • 安全性:Java提供了字节校验器、文件访问限制机制、类装载和运行时内存布局四级安全保证机制
  • 跨平台(体系结构中立):Java程序能够在网络上任何地方执行;语言版本完全统一;具有字节代码与平台无关性
  • 多线程:Java环境本身就是 多线程的,并且Java提供了对多线程的语言级支持
  • 动态性:Java所需要的类是运行时的动态装载的,也可从网络载入。在分布环境中动态地维护应用程序和类库的一致性,类库的更新不需要重新编译程序,不影响用户程序的执行
  • 健壮性:Java提供强类型机制、异常处理、垃圾自动收集等,并且Java摒弃了指针
  • 除了以上7点以外,Java还是一种分布的、解释的、可移植的、高性能的程序设计语言


2、请简述Java中异常处理的机制。

  • 首先Java的异常是面向对象的,一个Java的Exception是一个描述异常情况的对象。当出现异常情况时,一个Exception对象就产生了,并放到异常的成员函数里。
  • Java的异常处理是通过5个关键词来实现的:try,catch,throw,throws和finally。异常的处理结构由try, catch, finally三个块组成。其中try块存放将可能发生异常的Java语言,并管理相关的异常指针;catch块紧跟在try块后面,用来激发被捕获的异常;finally块包含清除程序没有释放的资源、句柄等。不管try块中的代码如何退出,都将执行finally块。
  • Java语言可以不在方法中直接捕获,而用throw语句将异常抛给上层的调用者。throw语句就是来明确地抛出一个异常。首先你必须得到一个throwable的实例句柄,通过参数传到catch中,或者采用new操作符来创建一个。

3、Java中有哪几种访问控制符?并说明各自的作用范围。

  • private:仅在本类内的代码可以访问。
  • 默认(无修饰符)default:在同一包内的代码可以访问。
  • protected:在同一包内及其子类中的代码可以访问。
  • public:所有包中的代码都可以访问。

4、请说明final和static各自的作用。

  • final:final修饰的变量的值不可以被改变,final修饰的方法不可以被重写,final修饰的类不可以被继承。
  • static: static修饰的成员变量称为静态变量,被类的所有的对象共享,可以通过类本身直接调用。static修饰的方法称为静态方法,可以通过类本身直接调用。静态方法中不能访问类的非静态成员变量和非静态成员方法,静态方法中不可以有this。

5、什么是继承?

  • 通过必要的说明能够实现某个类无需重新定义就拥有另一个类的某些属性和方法,这种关系就称为继承,并且允许多层的继承关系。先定义的类称为父类,后定义的类称为子类。

6、在Java中,实现代码复用主要有两种方式——继承和组合。请描述下这两种方式的区别。

  • 继承:复用父类的属性和方法,在编译期间就确定了类的层次结构。在实际编程中,不好的设计经常会导致父类中带有子类的行为,导致父类子类互相依赖,丧失了重用的好处,破坏了封装。
  • 组合:在运行期间通过对象之间的引用,动态确定彼此之间的关系,对象之间只能通过接口相互作用,对象的封装性就得到了良好的维护。在运行期间,任何对象都能够被替换为其他相同类型的对象。
  • 总而言之,在Java中优先使用组合,而不是继承。

7、请简述重载和重写的区别。

  • 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。
  • 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
  • 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载。重载的方法是可以改变返回值的类型。

8、构造方法是特殊的方法,请简述它的特殊之处。

  • 构造方法名必须与类名相同;
  • 构造方法没有返回值,但不用void声明;
  • 构造方法不能被static、final、abstract、synchronized和native等修饰符修饰;
  • 构造方法不能像一般方法那样用“对象,构造方法”显式地直接调用,应该用new关键字调用构造方法,给新对象初始化。

9、实例方法和类方法的区别是什么?

  • 被static修饰的方法称为类方法(或静态方法),而没有被static修饰的方法称为实例方法。
  • 二者的调用方式不同。实例方法属于实例,必须通过实例调用;类方法属于类,一般通过类名调用,也可以通过实例调用。
  • 二者访问的成员不同。实例方法可以直接访问该类的实例变量和实例方法,也可以访问类变量和类方法;类方法只能访问该类的类变量和类方法,不能直接访问实例变量和实例方法。类方法要访问实例变量或调用实例方法,必须首先获得该实例,然后通过该实例访问相关的实例变量或调用实例方法。

10、说明抽象类和接口的异同点。

  • 相同点:抽象类和接口都可以有抽象方法,都不可以被实例化。
  • 不同点:
  • 创建关键字不同:抽象类用关键字abstract创建,接口用interface关键字创建;
  • 成员变量不同:抽象类可以包含普通的变量,接口内的变量只能是final的;
  • 方法不同:抽象类可以包含普通的方法,接口内只能有抽象方法且都是public的:
  • 继承/实现不同:接口可以被继承,也可以被实现,而抽象类只能被继承。接口被接口继承时用关键字extends,且可以多继承;接口被类实现时用关键字implements,且可以多实现;抽象类被类继承时用关键字extends,且只能单继承。

11、在Java中怎样创建一个线程?

  • 法一:通过继承Thread类
public class MyThread extends Thread{
    @Override
    public void run() {
        super.run();
    }
}
class Test{
    public static void main(String[] args) {
        MyThread t=new MyThread();
        t.start();
    }
}
  • 通过实现Runnable接口
public class MyRunnable implements Runnable{
    @Override
    public void run() {
        
    }
}
class Test{
    public static void main(String[] args) {
        MyRunnable r=new MyRunnable();
        new Thread(r).start();
    }
}

12、Error和 Exception有什么区别?

  • Error是程序无法处理的错误,比如OutOiMemoryError、ThreadDeath等。这些异常发生时,Java虚拟机一般会选择线程终止。
  • Exception是程序本身可以处理的异常,这种异常分两大类——运行时异常和排运行时异常。程序中应当尽可能去处理这些异常。

13、finally的作用是什么?什么时候会被执行?

  • finally代码块主要用来释放资源,比如1/0缓冲区、数据库连接。无论是否抛出异常,finally代码块总是会被执行。就算是没有catch语句同时又抛出异常的情况下,finally代码块仍然会被执行。

14、finally、finalize有什么区别?

  • finally是异常处理语句结构的部分,表示总是执行。
  • finalize是java.lang.Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用。

15、字节流与字符流有什么区别?

  • 字节流操作的基本单元为字节,字符流操作的基本单元为Unicode码元;
  • 字节流默认不使用缓冲区,字符流使用缓冲区;
  • 字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串。
     

你可能感兴趣的:(Java,java,开发语言)