java简答题 *全是精华* (期末考试复习)

1、简述Java语言的特点。

简单易学:Java风格类似于C++,但它摒弃了C++中复杂、不安全的特性;

面向对象:Java的设计是完全面向对象的,它具有面向对象的封装、继承和多态三大特点;

安全性:Java提供了字节校验器、文件访问限制机制、类装载器和运行时内存布局四级安全保证机制;

跨平台(体系结构中立):Java程序能够在网络上任何地方执行;语言版本完全同一;具有字节代码与平台无关性;

多线程:Java环境本身就是多线程的,并且Java提供了对多线程高级语言支持;

动态:Java所需要的类是运行的动态装载的。在分布环境中动态地维护应用程序和类库的一致性,类库的更新不需要重译程序,不影响用户程序的执行;

健壮性:Java提供强类型机制、异常 、垃圾自动收集等,并且Java摒弃了指针。除上述七点以外,Java还是一种分布的、可移植的、高性能的程序设计言。

2、请简述String类中“==”和equals()方法比较的区别。

==比较基本数据类型 比较的是值

==比较引用数据类型 比较的是地址

equals() 本身也比较地址,但是我们可以重写按照我们自己的比较规则来比较内容

3、请简述方法覆写和方法重载的区别。

重载:同一个类中,方法名相同,形式参数不同(参数类型或者长度),重载和修饰符和返回类型无关。

一是方法的参数列表必须改变,包括参数的类型,参数的个数多少,参数顺序。二是重载对返回类型,访问修饰符,异常声明没有任何限制,可以作任意的修改。实质上,重载只是创建了一个方法而已,特殊的地方在于方法的名字。

重写:在子类中,可以对父类的方法进行重写,不能比父类的更严格。两同两小一大(规则)

两同:方法名相同 参数类型 相同

两小:返回值类型(基本数据类型要一致,引用类型可以是其子类)

抛出的异常要小(也可以抛出父类型的异常的部分异常,或者不抛出异常)

一大:访问控制修饰符大

(1)重写方法必须和被重写方法具有相同的参数列表,返回类型必须和被重写方法的返回类型相同或者是返回类型的子类型。

(2)重写方法的访问控制修饰符不能比被重写方法更严格(比如一个在父类中声明为public的方法重写成一个protected的方法)。

(3)只有实例方法才能被重写,超类中的final方法不能被重写。

(4)重写方法不能抛出新的检查异常,或者是抛出比被重写方法声明的检查异常更广泛的检查异常。

4、请简述Java中访问控制权限public 、private、 protected、 default的区别(重点)

private:java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的属性即方法只能被该类自身的对象访问,其子类不能访问,更不允许跨包访问。

default:即不加任何访问权限修饰符,通常称为“默认访问权限”或者“包访问权限”。该模式下,只允许在同一个包中访问。

protected:介于public和private之间的一种访问修饰符,一般称之为“保护访问权限”。被其修饰的属性以及方法只允许被类本身及其子类访问,即使子类在不同的包中也可以访问。

public:java语言中访问权限最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包访问。

5、实现Runnable接口和继承Thread类都可以实现多线程,请简述二者的区别。

(1)创建线程的方式不同:

实现Runnable接口是代理模式,交给Thread()类去start;

一个类继承Thread类以后本身就是一个线程对象,可以直接start。

(2)设置线程名方式不同

实现Runnable接口可以在创建线程时Thread类的构造器设置线程名;

继承Thread类,可以super()调用父类构造器起名。

(3)获取线程名方式不同:

        由于Java是单继承,一个类继承Thread类以后不能继承其他类,扩展性不好,而实现Runnable接口则可以侧面实现了多继承;

        继承Thread类不能实现线程变量资源共享,注意,是线程里的变量,实现Runnable 接口线程变量是可以共享的,也可以不共享,看创建线程的方式。

6、请简述抽象类的定义及使用规则。

抽象方法:只声明而未实现的方法我们称为抽象方法,所有的抽象方法都需要用abstract关键字声明,包含抽象方法的类也需要使用abstract关键字声明,抽象类和普通类相比,区别在于抽象类带有抽象方法,抽象方法可以只声明,而不需要方法体。

使用规则:

(1)抽象类必须有子类(abstractfinal不能同时使用)。
(2)子类覆写抽象类所有的抽象方法(abstractprivate不能同时使用)。
(3)抽象类实例化对象,必须通过子类向上转型来实例化对象(抽象类无法直接实例化对象)。

7、使用final关键字声明类、属性、方法时,需要注意哪几点?

Final关键字的基本用法:

        在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。

Final修饰类时:

        当用final修饰一个类时,表明这个类不能被继承,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。  

Final修饰成员方法时:

        父类的final方法是不能被子类所覆盖(重写)的,也就是说子类是不能够存在和父类一模一样的方法的。但是可以被重载,也就是可以写相同名字但是具有不同参数的成员方法(类的private方法会隐式地被指定为final方法,构造函数默认也是有final的特性)。

Final修饰成员变量时:

赋值有两种种实现方式:

1)定义成员变量的时候手动赋值(所对象都有一个相同的属性);

2)利用构造器对成员变量进行赋值。

总而言之就是在对象生成之前就必须给定值,之后不再变更。

Final修饰局部变量时:

        当final修饰一个基本数据类型时,表示该基本数据类型的值一旦在初始化后便不能发生变化;如果final修饰一个引用类型时,则在对其初始化之后便不能再让其指向其他对象了,但该引用所指向的对象的内容是可以发生变化的。本质上是一回事,因为引用数据类型的值是一个地址,final要求值--即地址的值不发生变化。

8、简述 java 开发环境的安装过程以及环境变量的配置。

1)下载JDK(Java Development Kit开发工具包)

2)配置环境变量

1.安装完成后,右击"我的电脑",点击"属性",选择"高级系统设置";

2.选择"高级"选项卡,点击"环境变量";

3.在 "系统变量" 中设置 3 项属性,JAVA_HOME、PATH、CLASSPATH(大小写无所谓),若已存在则点击"编辑",不存在则点击"新建"。

9、举例说明项目中出现的 Bug 及处理过程。

1)400异常:参数有问题

2)idea找不到配置文件

解决方案:把maven的项目clear一下

3) java.lang.IndexOutOfBoundsException:数组下标越界异常

4)java.lang.NullPointerException:空指针异常

10、请写出常见的异常及出现异常的原因。

1)Java 内部错误发生异常,Java虚拟机产生的异常。

2)编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。

3)通过 throw语句手动生成的异常,一般用来告知该方法的调用者一些必要信息。

11、异常的分类?它们的区别是什么?

Error:称为错误,由Java虚拟机生成并抛出,包括动态连接失败、虚拟机错误等,程序对其不作处理。

Exception:所以异常类的父类,其子类对应了各种各样可能出现的异常事件,-般需要用户显式的声明或捕获。

Runtime Exception: 一类特殊的异常,如被0除、数组下标超范围等,其产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序的可读性和运行效率影响很大。因此由系统自动检测并将它们交给缺省的异常处理程序。

12、请简述 final 关键字。

final可以修饰类,方法,变量

final 修饰的类,不能再被继承

final修饰的方法,不能覆盖final方法

final 修饰的变量:

final 的局部变量,只能初始化不能改

final的方法参数,不能改

final的引用,引用指向不能改,但是对象的属性可以改

这些都是笔者期末考试复习整理的,真的很有用,也考到了好几道题!希望能够帮助到你们!

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值