您的位置:首页 > 职场人生

java面试题基础

2018-03-04 15:59 363 查看
基础知识

面向对象的特征

final, finally, finalize 的区别

int 和 Integer 有什么区别

重载和重写的区别

抽象类和接口有什么区别

说说反射的用途及实现

说说自定义注解的场景及实现

HTTP 请求的 GET 与 POST 方式的区别

session 与 cookie 区别

session 分布式处理

JDBC 流程

MVC 设计思想

equals 与 == 的区别

面向对象的特征

抽象、封装、继承、多态

抽象

忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面.(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口).抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节。

抽象包括两个方面,一个数据抽象,而是过程抽象.

数据抽象 –>表示世界中一类事物的特征,就是对象的属性.比如鸟有翅膀,羽毛等(类的属性)

过程抽象 –>表示世界中一类事物的行为,就是对象的行为.比如鸟会飞,会叫(类的方法)

封装

封装就是把行为和数据包围起来,对数据的访问只能通过特定的界面.如私有变量,用set,get方法获取。对对象的使用者隐藏了数据的实现方式。

继承

一种联结类的层次模型,并且允许和鼓励类的重用,提供一种明确表达共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类).派生类可以从它的父类哪里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要.因此可以说,继承为了重用父类代码,同时为实现多态性作准备.

多态

多态是指允许不同类的对象对同一消息做出响应.多态性包括参数化多态性和包含多态性.多态性语言具有灵活/抽象/行为共享/代码共享的优势,很好的解决了应用程序函数同名问题.总的来说,方法的重写,重载与动态链接构成多态性.java引入多态的概念原因之一就是弥补类的单继承带来的功能不足.

动态链接 –>对于父类中定义的方法,如果子类中重写了该方法,那么父类类型的引用将调用子类中的这个方法,这就是动态链接.

注意继承与重载:子类与父类的关系,重载方法的调用问题

  子类对象可以直接当成父类对象用,但是反过来就不行.比如:人是父类,学生是人的子类,所以学生对象一定具备人对象的属性,但是人对象就未必具有学生对象的特性.但是子类对象当做父类来用,将失去子类所有特性,只保留与父类同名的属性和方法,此时可以对父类方法进行重写.

  一个类中如果定义了重载的方法,则系统在调用方法时,会根据参数的类型自动选择调用合适的方法

  

final, finally, finalize 的区别

final

final关键字可以用于类,方法,变量前,用来表示该关键字修饰的类,方法,变量具有不可变的特性。

(1)final关键字用于基本数据类型前:这时表明该关键字修饰的变量是一个常量,在定义后该变量的值就不能被修改

(2)final关键字用于方法声明前:这时意味着该方法时最终方法,只能被调用,不能被覆盖,但是可以被重载

(3)final关键字用于类名前:此时该类被称为最终类,该类不能被其他类继承

finally

当代码抛出一个异常时,就会终止方法中剩余代码的处理,并退出这个方法的执行。假如我们打开了一个文件,但在处理文件过程中发生异常,这时文件还没有被关闭,此时就会产生资源回收问题。对此,java提供了一种好的解决方案,那就是finally子句,finally子句中的语句是一定会被执行的,所以我们只要把前面说的文件关闭的语句放在finally子句中无论在读写文件中是否遇到异常退出,文件关闭语句都会执行,保证了资源的合理回收。

无论try和catch子句是否执行,finally都会执行 。

finalize

finalize方法来自于java.lang.Object,用于回收资源。

可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。

在实际应用中,不要依赖使用该方法回收任何短缺的资源,这是因为很难知道这个方法什么时候被调用。 

int 和 Integer 有什么区别

Ingeter是int的包装类,int的初值为0,Ingeter的初值为null

int和integer的==比较问题

1、无论值是否相同,Integer与new Integer都不会相等,结果为false。

情况一:

Integer 范围在-128-127,指向专门存放他的内存(常量池)

new Integer 引用指向堆

他们的内存地址不一样,所以无论值是否相同,作比较结果都为false

情况二:

Integer 范围不在-128-127,则编译的时候 Integer.valueOf(值)本质返回的是new Integer()

new Integer 引用指向堆

这样二者是两个不同的堆栈对象,无论堆上的值是否相同,引用地址不同,结果为false;

参见3

情况三:

两个Integer范围都不在-128-127之间,那么依然是两new Integer对象

参见3

2、两个都是非new出来的Integer,如果数在-128到127之间,值相同则是true,否则为false

java在编译Integer 的时候,被翻译成-> Integer i = Integer.valueOf(值);而valueOf()函数会对-128到127之间的数进行缓存

3、两个都是new出来的,无论堆上的值是否相同,引用地址不同,结果为false

4、int和integer(无论是new出来的/-128-127常量池中)比,值相同则是true,否则为false, 因为会把Integer自动拆箱为int再去比。

重载与重写的区别

重写 Overriding

重写是指子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。

重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。

在Java中覆盖继承父类的方法就是通过方法的重写来实现的。所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型

重载 Overloading

方法重载是多态性的体现

方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。

在使用重载要注意以下的几点:

在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。

不能通过访问权限、返回类型、抛出的异常进行重载。

方法的异常类型和数目不会对重载造成影响。

可以有不同的返回类型,只要参数列表不同就可以了。

可以有不同的访问修饰符。

可以抛出不同的异常。

抽象类和接口的区别

反射的用途和实现

允许我们在运行期间获取对象的类型信息
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: