Java:Java考试基础知识——名词解释、简答题

1.Java语言面向对象的特性?

封装性,继承性,多态性。

2.多态是怎样实现的?(封装,继承各自的特点?)

多态:对外一个接口,内部多种实现。Java支持运行时多态和编译时多态两种形式,多态使程序具有良好的可扩展性,并使程序易于编写维护,易于理解;

封装:将类设计成一个黑匣子,使用时只能通过类所提供的公共方法来实现对内部成员的操作和访问,而不能看见方法的实现细节。也不能直接访问对象内部成员优点类的封装可以隐藏类的实现细节,迫使用户只能通过方法去访问数据,增强了程序的安全性;

继承:当一个类是另一个类的特例是这两个类之间具有父子关系,子类继承了父类的变量和行为,子类可以重复利用的这部分代码。优点:继承关系减少了程序中相类似代码的重复说明。

3.Java中四种权限级别有什么作用?

private:限制最高的修饰符“私有的”被其修饰的属性及方法只能被该类的对象访问,其子类不能访问、更不容许跨包访问;

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

protected:介于前两种之间的一种修饰符“保护访问权限”被其修饰的属性及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问;

public:访问限制最低的修饰符称为“公共的”既允许跨类访问、也容许跨包访问。

4.接口是怎么实现的?

接口通过interface关键字实现定义接口,确定了对特定对象所能发出的请求,或者对象接收消息的方式。

5.集合类的分类(组成)?

·①.Collection接口是集合接口数的根;

·②.set 不能包含重复的元素;

·③.list有序集合列表,可以包含重复的元素;

·④.Map实现链值判断的映射;

·⑤.Queue是存放等待处理的数据的集合和队列;

·⑥.sorted与sorted map具有排序性能的seat和map。

6.类、线程、进程的定义?

·类是一个模板,它描述一类对象的行为和状态。

·进程是由代码、数据、内核状态和一组寄存器组成,而线程是由表示程序运行状态的寄存器(如程序计数器、栈指针)及堆栈组成;

·每个进程都有独立的代码和数据空间,而线程可以看成轻量级的进程;也是进程中负责程序执行的执行单元,还有就是,进程是系统资源分配和调度的独立单位,线程是CPU调度和分配的基本单位。

7.在Java程序中main方法的作用是什么

main方法是整个程序的入口,所有程序都是从public static void main(String[] args)开始执行的。

 8.Java程序的运行机制分为哪几个步骤

Java程序的运行机制分为编写、编译和运行三个步骤。

9.简述高级语言的特点

高级语言简化了程序中的指令、略去了很多细节,并且与计算机的硬件关系不大,更利于程序员编程。此外,高级语言经历了结构化程序设计和面向对象程序设计,使得程序可读性、可靠性、可维护性都增强。

10.简述结构式语言的特点

结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

11.简述什么是数组

数组是可以保存一组数据的一种数据结构,它本身也会占用一个内存地址,因此数组是引用类型。

12.简述如何定义一个数组

定义数组有两种不同的格式,具体如下:

       数据类型[] 数组名;

也可用另外一种形式,其语法格式如下:

       数据类型 数组名[];

13.简述数组初始化的方法。

数组初始化的方法有两种,即静态初始化和动态初始化。

静态初始化是指由程序员在初始化数组时为数组每个元素赋值,由系统决定数组的长度。

动态初始化是指由程序员在初始化数组时指定数组的长度,由系统为数组元素分配初始值。

14.简述使用数组需要初始化的原因。

使用数组之前都会对其进行初始化,这是因为数组是引用类型,声明数组只是声明一个引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使用该数组变量来访问数组元素。

15.简述数组初始化的实质。

所谓数组初始化就是让数组名指向数组对象的过程,该过程主要分为两个步骤,一是对数组对象进行初始化,即为数组中的元素分配内存空间和赋值,二是对数组名进行初始化,即为数组名赋值为数组对象的引用。

16.简述定义方法需要注意哪些方面。

定义方法时需注意以下几点:

修饰符:方法的修饰符比较多,有对访问权限进行限定的,有静态修饰符static,还有最终修饰符final等。

返回值类型:限定返回值的类型。

参数类型:限定调用方法时传入参数的数据类型。

参数名:是一个变量,用于接收调用方法时传入的数据。

return:关键字,用于结束方法以及返回方法指定类型的值。

返回值:被return返回的值,该值返回给调用者。

17.简答实例变量和类变量的区别?

① 不同对象的实例变量互不相同  

② 所有对象共享类变量  

③ 通过类名直接访问类变量

18.简述static关键字的作用,以及static关键字可以修饰哪些成员。

Static关键字表示静态的,用于修饰成员变量、成员方法以及代码块;

Static可修饰的成员变量,称为静态变量或类变量,它被类的所有对象共享,属于整个类所有,因此可以通过类名直接来访问;

Static可修饰的成员方法,称为静态方法,无须创建类的实例就可以调用静态方法,静态方法可以通过类名调用。

19.简述什么是类的封装及其特性。

封装是面向对象的三大特征之一,将类设计成一个黑匣子,使用时只能通过类所提供的公共方法来实现对内部成员的操作和访问,而不能看见方法的实现细节,也不能直接访问对象内部成员。类的封装可以隐藏类的实现细节,迫使用户只能通过方法去访问数据,这样就可以增强程序的安全性。

20.简述构造方法及其特征。

构造方法是在创建一个对象使用new关键字时被调用的。构造方法有三个特征:

① 构造方法名与类名相同。

② 构造方法没有返回值类型。

③ 构造方法中不能使用return返回一个值。

21.简述单例设计模式的特点。

单例模式有3个特点,具体如下:

① 单例模式的类只提供私有的构造方法。

② 类定义中含有一个该类的静态私有对象。

③ 提供一个静态的公有的方法用于创建或获取它本身的静态私有对象

22.简答方法重写的语法规则?

如果子类可以继承父类的某个实例方法,那么子类就有权利重写这个方法。子类中定义一个方法,这个方法的类型和父类的方法的类型一致或者是父类的方法的类型的子类型,并且这个方法的名字、参数个数、参数的类型和父类的方法完全相同。

23.简述接口的回调?

接口回调是指:可以把实现某一接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类重写的接口方法。实际上,当接口变量调用被类重写的接口方法时,就是通知相应的对象调用这个方法。

24.简述工厂设计模式及其分类。

工厂模式主要用来实例化有共同接口的类,它可以动态决定应该实例化哪一个类,不必事先知道每次要实例化哪一个类。工厂模式主要有三种形态:简单工厂模式、工厂方法模式和抽象工厂模式。

25.简述final关键字的作用及其特点。

final关键字可用于修饰类、方法和变量,表示“最终”的意思,即用它修饰的类、方法和变量不可改变,具体特点如下:

① final修饰的类不能被继承。

② final修饰的方法不能被子类重写。

③ final修饰的变量是常量,初始化后不能再修改。

26.简述抽象类和接口的关系。

抽象类和接口都用于为对象定义共同的行为,两者在很大程度上是可以互相替换的,但由于抽象类只允许单继承,所以当两者都可以使用时,优先考虑接口,只有当需要定义子类的行为,并为子类提供共性功能时才考虑选用抽象类。

27.简述如何继承接口。

在Java中使用extends关键字来实现接口的继承,它与类的继承类似,当一个接口继承父接口时,该接口会获得父接口中定义的所有抽象方法和常量,但又与类的继承不同,接口支持多重继承,即一个接口可以继承多个父接口。

28.Java中如何处理异常?

Java使用try-catch语句来处理异常,将可能出现的异常操作放在try-catch语句的try部分,将发生异常后的处理放在catch部分。

29.简述如何自定义异常。

在程序中使用自定义异常类,大体可分为以下几个步骤:

① 创建自定义异常类并继承Exception基类,如果自定义Runtime异常,则继承RuntimeException基类。

② 在方法中通过throw关键字抛出异常对象。

③ 当前抛出异常的方法中处理异常,可以使用try-catch语句块捕获并处理,否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。

④ 在出现异常方法的调用者中捕获并处理异常。

30.简述使用异常的原则

编写代码处理某个方法可能出现的异常时,可遵循以下几条原则:

① 在当前方法声明中使用try-catch语句捕获异常。

② 一个方法被覆盖时,覆盖它的方法必须抛出相同的异常或其子类。

③ 如果父类抛出多个异常,则覆盖方法必须抛出那些异常的一个子集,不能抛出新异常。

31.简述异常和Error的区别。

error:是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。

Exception:表示可恢复的例外,这是可捕捉到的。

32.Java中的异常处理机制的简单原理和应用。

当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Throwable的子类。

33.简述Try-catch-finally的执行过程。

try{}语句块中放的是要检测的java代码,可能会抛出异常,也可能会正常执行

catch(异常类型){}块是当java运行时系统接收到try块中所抛出异常对象时,会寻找处理这一异常catch块来进行处理(可以有多个catch块)

finally{}不管系统有没有抛出异常都会去执行,一般用来释放资源。除了在之前执行了System.exit(0)。

 34.什么是Java线程转储(Thread Dump),如何得到它?

线程转储是一个JVM活动线程的列表,它对于分析系统瓶颈和死锁非常有用。有很多方法可以获取线程转储——使用Profiler,Kill -3命令,jstack工具等等。我更喜欢jstack工具,因为它容易使用并且是JDK自带的。由于它是一个基于终端的工具,所以我们可以编写一些脚本去定时的产生线程转储以待分析。

35.什么是死锁(Deadlock)?如何分析和避免死锁?

死锁是指两个以上的线程永远阻塞的情况,这种情况产生至少需要两个以上的线程和两个以上的资源。  分析死锁,我们需要查看Java应用程序的线程转储。我们需要找出那些状态为BLOCKED的线程和他们等待的资源。每个资源都有一个唯一的id,用这个id我们可以找出哪些线程已经拥有了它的对象锁。  避免嵌套锁,只在需要的地方使用锁和避免无限期等待是避免死锁的通常办法。 

36.为什么Thread类的sleep()和yield()方法是静态的?

Thread类的sleep()和yield()方法将在当前正在执行的线程上运行。所以在其他处于等待状态的线程上调用这些方法是没有意义的。这就是为什么这些方法是静态的。它们可以在当前正在执行的线程中工作,并避免程序员错误的认为可以在其他非运行线程调用这些方法。

37.字符类输出流有哪些

字符类输出流继承自Writer类,实现向数据目的地输出Unicode码序列的操作。

PrintWriter和OutputStreamWriter是Writer的子类;

PrintWriter类用于输出字符,其方法println()实现向输出流写入字符数据;

OutputStreadWriter类的子类FileWriter,实现向文本文件写入字符数据;

Writer类包含的方法:writer() flush()等;

OutputStreamWriter类包含的方法:OutputStreamWriter(),close()等;

BufferedWriter类包含的方法:newLine(),BufferedWriter()等。

38.IO的分类有哪些

IO流按操作数据单位不同可分为字节流(8 bit)和字符流(16 bit);按数据流的流向不同分为输入流和输出流。

39.PrintStream和PrintWriter有何不同

PrintStream:属于字节流,既可以打印字节也可以打印数组。

PrintWriter:属于字符流,只可以打印字符或字符串。

40.根据你的理解,说明Java中"=="和"="的区别。

=:赋值运算符,将左边的值赋值到右边

==:关系运算符,必将两个值是否是一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是蟹老板

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值