面试整理(1)

1.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思? 重写和重载的区别?java

答:   Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同可是参数不一样的状况。与此相对,方法覆盖是说子类从新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。程序员

重载(Overloading)多线程

(1) 方法重载是让类以统一的方式处理不一样类型数据的一种手段。多个同名函数同时存在,具备不一样的参数个数/类型。重载Overloading是一个类中多态性的一种表现。框架

(2) Java的方法重载,就是在类中能够建立多个方法,它们具备相同的名字,但具备不一样的参数和不一样的定义。调用方法时经过传递给它们的不一样参数个数和参数类型来决定具体使用哪一个方法, 这就是多态性。eclipse

(3) 重载的时候,方法名要同样,可是参数类型和个数不同,返回值类型能够相同也能够不相同。没法以返回型别做为重载函数的区分标准。                                                                                                                                                               重写(Overriding)函数

(1) 父类与子类之间的多态性,对父类的函数进行从新定义。若是在子类中定义某方法与其父类有相同的名称和参数,咱们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不须要从新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想做必定的修改,这就须要采用方法的重写。方法重写又称方法覆盖。this

(2)若子类中的方法与父类中的某一方法具备相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中原有的方法,可以使用super关键字,该关键字引用了当前类的父类。(3)子类函数的访问修饰权限不能少于父类的;spa

2.Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?线程

答:   当新对象被建立的时候,构造函数会被调用。每个类都有构造函数。在程序员没有给类提供构造函数的状况下,Java编译器会为这个类建立一个默认的构造函数。设计

Java中构造函数重载和方法重载很类似。能够为一个类建立多个构造函数。每个构造函数必须有它本身惟一的参数列表。

Java不支持像C++中那样的复制构造函数,这个不一样点是由于若是你不本身写构造函数的状况下,Java不会建立默认的复制构造函数。

3.Java支持多继承么?

答:   Java中类不支持多继承,只支持单继承(即一个类只有一个父类)。 可是java中的接口支持多继承,,即一个子接口能够有多个父接口。(接口的做用是用来扩展对象的功能,一个子接口继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类就扩展了相应的功能)。

4.接口和抽象类的区别是什么?

答:   接口(interface)能够说成是抽象类的一种特例,接口中的全部方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final (这里须要说一点,既然一个变量被final修饰了,那么这个变量就是一个常量!!!!!变量必须初始化成常量!!!!!)

下面比较一下二者的语法区别:

1.抽象类能够有构造方法,接口中不能有构造方法。

2.抽象类中能够有普通成员变量,接口中没有普通成员变量!!!!!!!(注意重点在 普通 即 非静态  和  变量!!!!)

3.抽象类中能够包含非抽象的普通方法,接口中的全部方法必须都是抽象的,不能有非抽象的普通方法。

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

5. 抽象类中能够包含静态方法(static),接口中不能包含静态方法.

6. 抽象类和接口中均可以包含静态成员变量(static),抽象类中的静态成员变量的访问类型能够任意,但接口中定义的变量只能是public static final类型,而且默认即为public static final类型。

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

什么时候用接口,什么时候用抽象类?

子类继承抽象类就不能再继承其余类(java的单继承原则),因此有抽象方法时优先使用接口定义.

若是全部方法都没有实现,优先使用接口.

一些方法已经能够实现,而另外一些方法没法或不想实现时,且继承(实现)关系很简单时,考虑用抽象类定义,留给后代去实现。jdk8以后,也能够在接口中定义default方法或static方法来实现.

5.什么是值传递和引用传递?

答:   值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量.

引用传递通常是对于对象型变量而言的,传递的是该对象地址的一个副本, 并非原对象自己 。 因此对引用对象进行操做会同时改变原对象.

通常认为,java内的传递都是值传递.

6.建立线程有几种不一样的方式?你喜欢哪种?为何?

答:   有两种方式能够用来建立线程:

继承Thread类

实现Runnable接口

实现Runnable接口这种方式更受欢迎,由于这不须要继承Thread类。在应用设计中已经继承了别的对象的状况下,这须要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是很是高效的,很容易实现和使用。

7.归纳的解释下线程的几种可用状态。

答:   1. 新建( new ):新建立了一个线程对象。

2. 可运行( runnable ):线程对象建立后,其余线程(好比 main 线程)调用了该对象 的 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 取 cpu 的使用权 。

3. 运行( running ):可运行状态( runnable )的线程得到了 cpu 时间片( timeslice ) ,执行程序代码。

4. 阻塞( block ):阻塞状态是指线程由于某种缘由放弃了 cpu 使用权,也即让出了 cpu timeslice ,暂时中止运行。直到线程进入可运行( runnable )状态,才有 机会再次得到 cpu timeslice 转到运行( running )状态。阻塞的状况分三种:

(一). 等待阻塞:运行( running )的线程执行 o . wait ()方法, JVM 会把该线程放 入等待队列( waitting queue )中。

(二). 同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁 被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。

(三). 其余阻塞: 运行( running )的线程执行 Thread . sleep ( long ms )或 t . join ()方法,或者发出了 I / O 请求时, JVM 会把该线程置为阻塞状态。当 sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程从新转入可运行( runnable )状态。

5. 死亡( dead ):线程 run ()、 main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。

8.同步方法和同步代码块的区别是什么?

答:   区别:

同步方法默认用this或者当前类class对象做为锁;

同步代码块能够选择以什么来加锁,比同步方法要更细颗粒度,咱们能够选择只同步会发生同步问题的部分代码而不是整个方法;

9.什么是死锁(deadlock)?如何确保N个线程能够访问N个资源同时又不致使死锁?

答:   两个线程或两个以上线程都在等待对方执行完毕才能继续往下执行的时候就发生了死锁。结果就是这些线程都陷入了无限的等待中.

使用多线程的时候,一种很是简单的避免死锁的方式就是:指定获取锁的顺序,并强制线程按照指定的顺序获取锁。所以,若是全部的线程都是以一样的顺序加锁和释放锁,就不会出现死锁了。

10.Java集合类框架的基本接口有哪些?

答:   集合类接口指定了一组叫作元素的对象。集合类接口的每一种具体的实现类均可以选择以它本身的方式对元素进行保存和排序。有的集合类容许重复的键,有些不容许。

Java集合类提供了一套设计良好的支持对一组对象进行操做的接口和类。Java集合类里面最基本的接口有:

Collection:表明一组对象,每个对象都是它的子元素。

Set:不包含重复元素的Collection。

List:有顺序的collection,而且能够包含重复元素。

Map:能够把键(key)映射到值(value)的对象,键不能重复。

11.sleep()和wait()的区别?

1.sleep方法来自Thread类,wait方法来自Object类;

2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得线程可使用同步控制块或者方法。

3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep能够在任何地方使用(使用范围)

4.sleep必须捕获异常,而wait,notify和notifyAll不须要捕获异常。

相关文章
相关标签/搜索