JAVA简答题

1.接口和抽象类相同点和区别是什么,以及它们应用在哪方面?

答案:
1).抽象类可以有构造方法,接口中不能有构造方法。

2).抽象类中可以有普通成员变量,接口中没有普通成员变量

3).抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4). 抽象类中的抽象方法的访问类型可以是public,protected 和(默认类型,虽然eclipse 下不报错,但应该也不行),但接口中的抽象方法只能是public 类型的,并且默认即为

public abstract 类型。

5). 抽象类中可以包含静态方法,接口中不能包含静态方法

6). 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,

但接口中定义的变量只能是public static final 类型,并且默认即为public static final 类型。

7). 一个类可以实现多个接口,但只能继承一个抽象类。
难度等级:简单

2.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,请问传递的是对象的地址还是对象的克隆版本?

答案:
传递的是对象的地址,也可以叫对象的引用
难度等级:简单

3.简述static final,finally的作用和区别

答案:
final关键字

1、final修饰类,表示该类不能被继承,因此,一个类不能同事被声明为abstract抽象类和final的类;

2、final修饰变量,则该变量必须赋初值,而且它的取值在整个过程都不会改变;

3、final修饰方法,称为最终方法。它不可被子类重新定义,即不可被覆盖,也不能被重载;

static关键字

(1)static定义的数据或方法,可以不用new出类的实例而让类直接调用;

(2)static代码块;static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。

finally:java的一种异常处理机制。

(1) finally是对Java 异常处理模型的最佳补充。finally 结构使代码总会执行,而不管有无异常发生。

(2)使用 finally 可以维护对象的内部状态,并可以清理非内存资源。

(3)特别是在关闭数据库连接这方面,如果程序员把数据库连接的close()方法放到finally中,就会大大降低程序出错的几率。

finalize:Java中Object类中的一个方法名。

ava技术使用finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。

这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。

它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。

finalize()方法是在垃圾收集器删除对象之前对这个对象调用的。

难度等级:简单

4.简述抽象、继承、封装、多态等基本概念。

答案:
1.抽象

抽象是人们认识事物的常用方法,比如地图的绘制。抽象的过程就是如何简化、概括所观察到的现实世界,并为人们所用的过程。

抽象是软件开发的基础。软件开发离不开现实环境,但需要对信息细节进行提炼、抽象,找到事物的本质和重要属性。

抽象包括两个方面:过程抽象和数据抽象。过程抽象把一个系统按功能划分成若干个子系统,进行”自顶向下逐步求精”的程序设计。数据抽象以数据为中心,把数据类型和施加在该类型对象上的操作作为一个整体(对象)来进行描述,形成抽象数据类型ADT。

所有编程语言的最终目的都是提供一种”抽象”方法。一种较有争议的说法是:解决问题的复杂程度直接取决于抽象的种类及质量。其中,”种类”是指准备对什么进行”抽象”。汇编语言是对基础机器的少量抽象。后来的许多”命令式”语言(如FORTRAN、BASIC和C)是对汇编语言的一种抽象。与汇编语言相比,这些语言已有了较大的进步,但它们的抽象原理依然要求程序设计者着重考虑计算机的结构,而非考虑问题本身的结构。在机器模型(位于”方案空间”)与实际解决的问题模型(位于”问题空间”)之间,程序员必须建立起一种联系。这个过程要求人们付出较大的精力,而且由于它脱离了编程语言本身的范围,造成程序代码很难编写,而且要花较大的代价进行维护。由此造成的副作用便是一门完善的”编程方法”学科。

为机器建模的另一个方法是为要解决的问题制作模型。对一些早期语言来说,如LISP和APL,它们的做法是”从不同的角度观察世界”、”所有问题都归纳为列表”或”所有问题都归纳为算法”。PROLOG则将所有问题都归纳为决策链。对于这些语言,可以认为它们一部分是面向基于”强制”的编程,另一部分则是专为处理图形符号设计的。每种方法都有自己特殊的用途,适合解决某一类的问题。但只要超出了它们力所能及的范围,就会显得非常笨拙。

面向对象的程序设计在此基础上则跨出了一大步,程序员可利用一些工具来表达问题空间内的元素。由于这种表达非常普遍,所以不必受限于特定类型的问题。人们将问题空间中的元素以及它们在方案空间的表示物称作”对象”。当然,还有一些在问题空间没有对应体的其他对象。通过添加新的对象类型,程序可进行灵活的调整,以便与特定的问题配合。所以在阅读方案的描述代码时,会读到对问题进行表达的话语。与以前的方法相比,这无疑是一种更加灵活、更加强大的语言抽象方法。

总之,OOP允许人们根据问题,而不是根据方案来描述问题。然而,仍有一个联系途径回到计算机。每个对象都类似一台小计算机;它们有自己的状态,而且可要求它们进行特定的操作。与现实世界的”对象”或者”物体”相比,编程”对象”与它们也存在共通的地方:它们都有自己的特征和行为。

2.封装

封装是面向对象编程的特征之一,也是类和对象的主要特征。封装将数据以及加在这些数据上的操作组织在一起,成为有独立意义的构件。外部无法直接访问这些封装了的数据,从而保证了这些数据的正确性。如果这些数据发生了差错,也很容易定位错误是由哪个操作引起的。

如果外部需要访问类里面的数据,就必须通过接口(Interface)进行访问。接口规定了可对一个特定的对象发出哪些请求。当然,必须在某个地方存在着一些代码,以便满足这些请求。这些代码与那些隐藏起来的数据叫作”隐藏的实现”。站在过程化程序编写(Procedural Programming)的角度,整个问题并不显得复杂。一种类型含有与每种可能的请求关联起来的函数。一旦向对象发出一个特定的请求,就会调用那个函数。通常将这个过程总结为向对象”发送一条消息”(提出一个请求)。对象的职责就是决定如何对这条消息作出反应(执行相应的代码)。

若任何人都能使用一个类的所有成员,那么可对这个类做任何事情,则没有办法强制他们遵守任何约束—所有东西都会暴露无遗。

有两方面的原因促使了类的编制者控制对成员的访问。第一个原因是防止程序员接触他们不该接触的东西—通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,无需明白这些信息。类向用户提供的实际是一种服务,因为他们很容易就可看出哪些对自己非常重要,以及哪些可忽略不计。进行访问控制的第二个原因是允许库设计人员修改内部结构,不用担心它会对客户程序员造成什么影响。例如,编制者最开始可能设计了一个形式简单的类,以便简化开发。以后又决定进行改写,使其更快地运行。若接口与实现方法早已隔离开,并分别受到保护,就可放心做到这一点,只要求用户重新链接一下即可。

封装考虑的是内部实现,抽象考虑的是外部行为。符合模块化的原则,使得软件的可维护性、扩充性大为改观。

3.继承

继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类的继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且派生类可以修改或增加新的方法使之更适合特殊的需求。这也体现了大自然中一般与特殊的关系。继承性很好地解决了软件的可重用性问题。比如说,所有的Windows应用程序都有一个窗口,它们可以看作都是从一个窗口类派生出来的。但是有的应用程序用于文字处理,有的应用程序用于绘图,这是由于派生出了不同的子类,各个子类添加了不同的特性。

4.多态性

多态性是指允许不同类的对象对同一消息作出响应。比如同样的加法,把两个时间加在一起和把两个整数加在一起肯定完全不同。又比如,同样的选择”编辑”、”粘贴”操作,在字处理程序和绘图程序中有不同的效果。多态性包括参数化多态性和运行时多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序函数同名问题。

最后,以Alan Kay的话作为本节的结束语。他总结了Smalltalk(这是第一种成功的面向对象程序设计语言,也是Java的基础语言)的五大基本特征。通过这些特征,读者可以理解”纯粹”的面向对象程序设计方法。

(1)所有东西都是对象。可将对象想象成一种新型变量,它保存着数据,但可要求它对自身进行操作。理论上讲,可从要解决的问题上,提出所有概念性的组件,然后在程序中将其表达为一个对象。

(2)程序是一大堆对象的组合。通过消息传递,各对象知道自己该做些什么。为了向对象发出请求,需向那个对象”发送一条消息”。更具体地讲,可将消息想象为一个调用请求,它调用的是从属于目标对象的一个子例程或函数。

(3)每个对象都有自己的存储空间,可容纳其他对象。或者说,通过封装现有对象,可制作出新型对象。所以,尽管对象的概念非常简单,但在程序中却可达到任意高的复杂程度。

(4)每个对象都有一种类型。根据语法,每个对象都是某个”类(Class)”的一个”实例”。其中,”类”是”类型(Type)”的同义词。一个类最重要的特征就是”能将什么消息发给它?”。

(5)同一类所有对象都能接收相同的消息。这实际是别有含义的一种说法,读者不久便能理解。由于类型为”圆(Circle)”的一个对象也属于类型为”形状(Shape)”的一个对象,所以一个”圆”完全能接收”形状”的消息。这意味着可让程序代码统一指挥”形状”,令其自动控制所有符合”形状”描述的对象,其中自然包括”圆”。这一特性称为对象的”可替换性”,是OOP最重要的概念之一。

难度等级:简单

5.GC是什么?GC的作用

答案:
GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,

忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,

Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()或Runtime.getRuntime().gc(),但JVM可以屏蔽掉显示的垃圾回收调用。

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
难度等级:简单

6.JDK的类,包。接口各写5个

答案:
类:ArrayList、HashSet、HashMap、File、Thread
包:java.lang、java.io、java.util、java.sql、javax.servlet
接口:Collection、List、Set、HttpServletRequest、HttpServletResponse
难度等级:简单

7.如果有两个类A、B(注意不是接口),你想同时使用这两个类的功能,那么你会如何编写这个C类呢?

答案:

因为类A、B不是接口,所以是不可以直接继承的,但可以将A、B类定义成父子类,那么C类就能实现A、B类的功能了。假如A为B的父类,B为C的父类,此时C就能实现A、B的功能。

难度等级:简单

8.作用域:public,private,protected,以及不写时的区别

答案:
java的四个访问修饰符:
访问权限    类    包    子类   其他包
public       ∨     ∨     ∨      ∨
protect      ∨     ∨      ∨      ×
default      ∨     ∨      ×       ×
private      ∨      ×      ×       ×

难度等级:简单

9.abstract class 和interface有什么区别

答案:
1).抽象类可以有构造方法,接口中不能有构造方法。

2).抽象类中可以有普通成员变量,接口中没有普通成员变量

3).抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。

4). 抽象类中的抽象方法的访问类型可以是public,protected 和(默认类型,虽然eclipse 下不报错,但应该也不行),但接口中的抽象方法只能是public 类型的,并且默认即为

public abstract 类型。

5). 抽象类中可以包含静态方法,接口中不能包含静态方法

6). 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,

但接口中定义的变量只能是public static final 类型,并且默认即为public static final 类型。

7). 一个类可以实现多个接口,但只能继承一个抽象类。

难度等级:简单

10.面向对象的三大基本特性是什么?

答案:
三大特性是:封装,继承,多态

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。

难度等级:简单

11.Java类在继承中使用三个关键字来设定访问权限,分别是什么?

答案:
难度等级:

12.请写出下面输出值(内部类)

public class Demo5 {
class A{
    private int i=11;
    public int value(){return i;}
}
class B{
    private String lable;
    B(String whereto){
        lable=whereto;
        //print(whereto);
        System.out.println(whereto);

    }
    String readLable(){return lable;}
}
public void showdata(String dest){
    A a=new A();
    B b=new B(dest);
    //print(b.readLable)
    System.out.println(b.readLable());
}
public static void main(String[] args){
    Demo5 p=new Demo5();
    p.showdata("我是People");
}

}

答案:
我是People
我是People

难度等级:简单

13.”static”关键字是什么意思?Java中是否可以覆盖(overrride)一个private或者是static的方法?

答案:
static是静态的修饰符
静态的方法只能访问静态的变量或静态方法,非静态的方法即可以访问静态的方法或静态的变量,也可以访问非静态的方法或非静态的变量
静态的变量或方法属于类而不属于对象,所以在访问范围允许的情况下,静态的变量或方法都可以通过类名访问。虽然可以通过对象来访问静态的变量或静态的方法,但不推荐。

可以覆盖

难度等级:简单

14.

public class Test{
    public static Test eee=new Test();
    public static int a;
    public static int b=0;
    public Test(){
        a++;
        b++;
    }
    public void printAB(){
    System.out.plintln(a+","+b);
    }
    public static void main(String[] args){
        new Test().printAB();
    }
}

请问执行main函数后打打印结果;并说明原因:

答案:
2,1
首先a和b变量都是静态的
先执行public static Test eee=new Test();这时的a和b都是1
然后执行public static int b=0; 这时a是1,而b是0
然后执行new Test(),这时a和b都分别加1,所以结果是2,1
难度等级:

15.请简单描述什么是OOP,它的中文全称及主要特征是什么?

答案:
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。

三大特性是:封装,继承,多态

所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。继承概念的实现方式有二类:实现继承与接口继承。实现继承是指直接使用基类的属性和方法而无需额外编码的能力;接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。
难度等级:

generated by haroopad

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小乔同学Online

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

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

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

打赏作者

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

抵扣说明:

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

余额充值