一,谈谈final, finally, finalize的区别。java
final—修饰符(关键字) 修饰类,则该类不能被继承;修饰方法,不能被重写;修饰成员变量,不能被二次赋值(因此说必须给定初始值);不能和abstract同时使用;程序员
finally—专门用于在try-catch块以后,通常用于关闭某些流之类的。面试
finalize—方法名。专门用在垃圾回收机制的时候;每个对象都有一个finalize()方法;编程
当回收对象的时候,在进行可达性分析后发现没有与GC Roots相链接的引用链,会被第一次标记且进行一次筛选,筛 选的条件就是是否有必要执行该方法,当对象没有覆盖该方法或者已经被调用过,就不会再执行该方法了;该方法是对 象逃脱死亡的惟一办法数组
二,Anonymous Inner Class (匿名内部类) 是否能够extends(继承)其它类,是否能够implements(实现)interface(接 口)?安全
匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类能够做为一个接口,由另外一个内部类实现。架构
三,Static Nested Class 和 Inner Class的不一样,说得越多越好(面试题有的很笼统)。编程语言
Nested Class (通常是C++的说法),Inner Class (通常是JAVA的说法)。Java内部类与C++嵌套类最大的不一样就在因而否 有指向外部的引用上。ide
静态内部类(Inner Class)意味着建立一个static内部类的对象,不须要一个外部类对象;不能从一个static内部类的一个对 象访问一个外部类对象函数
Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现
HashMap容许将null做为一个entry的key或者value,而Hashtable不容许
还有就是,HashMap把Hashtable的contains方法去掉了,改为containsvalue和containsKey。由于contains方法容易让 人引发误解。最大的不一样是,Hashtable的方法是Synchronize的,而HashMap不是,在 多个线程访问Hashtable时,不须要本身为它的方法实现同步,而HashMap 就必须为之提供外同步。
四,&和&&的区别。
&是位运算符;无论前面对与错,后面都参与运算。
&&是布尔逻辑运算符;只要前面第一个为true,则后面的就不进行运算。
五,HashMap和Hashtable的区别。
一、HashMap和Hashtable都是Map接口的实现类
二、Hashtable是线程安全的,而HashMap是线程不安全的;
三、HashMap容许key-value做为null值,可是Hashtable不容许
四、HashMap是采用的快速安全失败机制来进行访问的
六,Collection 和 Collections的区别。
都是java.util包下面的
--- Collections是类,它包含有各类有关集合操做的静态方法。
--- Collection是接口,它是各类集合的父接口.
七,何时用assert。
断言是一个包含布尔表达式的语句,在执行这个语句时假定该表达式为 true。若是表达式计算为 false,那么系统会报告一个 AssertionError。它用于调试目的:
assert(a > 0); // throws an AssertionError if a <= 0
断言能够有两种形式:
assert Expression1 ;
assert Expression1 : Expression2 ;
Expression1 应该老是产生一个布尔值。
Expression2 能够是得出一个值的任意表达式。这个值用于生成显示更多调试信息的 String 消息。
断言在默认状况下是禁用的。要在编译时启用断言,须要使用 source 1.4 标记:
javac -source 1.4 Test.java
要在运行时启用断言,可以使用 -enableassertions 或者 -ea 标记。
要在运行时选择禁用断言,可以使用 -da 或者 -disableassertions 标记。
要系统类中启用断言,可以使用 -esa 或者 -dsa 标记。还能够在包的基础上启用或者禁用断言。
能够在预计正常状况下不会到达的任何位置上放置断言。断言能够用于验证传递给私有方法的参数。不过,断言不该该用于验证传递给公有方法的参数,由于不论是否启用了断言,公有方法都必须检查其参数。不过,既能够在公有方法中,也能够在非公有方法中利用断言测试后置条件。另外,断言不该该以任何方式改变程序的状态。
八,GC是什么? 为何要有GC?
GC是垃圾收集器。Java 程序员不须要担忧内存管理,由于垃圾收集器会自动进行管理。要请求垃圾收集,能够调用下面的方 法之一:
System.gc()
Runtime.getRuntime().gc()
九,String s = new String("xyz");建立了几个String Object?
两个对象,一个是“xyx”;一个是指向“xyx”的引用对象s。
十,Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math.round(11.5)返回(long)12,Math.round(-11.5)返回(long)-11
十一,short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改成s1 =(short)(s1 + 1) 。 short s1 = 1; s1 += 1正确。
十二,sleep() 和 wait() 有什么区别?
wait();不必定须要指定等待时间;释放执行权的时候释放锁
sleep():必须指定等待时间;释放执行权,可是不会释放锁;从运行状态变为临时阻塞状态
十三,Java有没有goto?
有,做为java的保留字存在
十四,数组有没有length()这个方法? String有没有length()这个方法?
数组没有length()这个方法,有length的属性。
String有length()这个方法。
十五,Overload(重载、过载)和Override(重写、覆盖)的区别。Overloaded的方法是否能够改变返回值的类型?
重写是父类与子类之间多态性的一种表现,重载是同一个类中多态性的一种表现。
override(重写)是覆盖了一个方法而且对其重写,以求达到不一样的做用。
overload(重载)它是指咱们能够定义一些名称相同的方法,经过定义不一样的输入参数来区分这些方法,而后再调用时,JVM就会根据不一样的参数样式,来选择合适的方法执行。
Overload(重载)的方法是能够改变返回值的类型。
十六,Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==仍是equals()? 它们有何区别?
Set里的元素是不能重复的,用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真值。
十七,给我一个你最多见到的runtime exception。
ArithmeticException,ArrayStoreException,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException, ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException, UnsupportedOperationException
十八,error和exception有什么区别?
error 表示统错误或低层资源的错误,老是不可被控制的。好比说内存溢出。
exception 表示一种设计或实现问题。 程序员致使的错误,好比算数异常等。
我有一个扣扣群,群里不按期分享技术干货,行业秘闻,聚集各种奇妙好玩的话题和流行动向!若是你喜欢个人分享,能够用扣扣搜索650385180加群关注。
十九,List, Set, Map是否继承自Collection接口?
List,Set是
Map不是
二十,abstract class和interface有什么区别?
接口中全部的方法隐含的都是抽象的。而抽象类则能够同时包含抽象和非抽象的方法。 类能够实现不少个接口,可是只能继承一个抽象类,类若是要实现一个接口,它必需要实现接口声明的全部方法。可是,类能够不实现抽象类声明的全部方法,固然,在这种状况下,类也必须得声明成是抽象的。抽象类能够在不提供接口方法实现的状况下实现接口。
Java 接口中声明的变量默认都是 final 的。抽象类能够包含非 final 的变量。
Java 接口中的成员函数默认是 public 的。抽象类的成员函数能够是 private,protected 或者是 public。接口是绝对抽象的,不能够被实例化。抽象类也不能够被实例化,可是,若是它包含 main 方法的话是能够被调用的。
二十一,abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不能
二十二,接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?
接口能够继承接口。抽象类能够实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。
二十三,启动一个线程是用run()仍是start()?
启动线程使用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所表明的虚拟处理机处于可运行状态,这意味着它能够由JVM调度并执行。这并不意味着线程就会当即运行。当cpu分配给它时间时,才开始执行run()方法(若是有的话)。START()是方法,它调用RUN()方法.而RUN()方法是你必须重写的. run()方法中包含的是线程的主体
二十四,构造器Constructor是否可被override(重写)?
重写是发生在父类与子类之间的事情,然而构造器Constructor不能被继承,所以不能重写,但能够被重载
二十五,是否能够继承String类?
String类是final类故不能够继承。
public final class Stringextends Objectimplements Serializable, Comparable, CharSequence二十六,当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?
不能,一个对象的一个synchronized方法只能由一个线程访问。
二十七,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,何时被执行,在return 前仍是后?
会执行,在return前执行。
二十八,编程题: 用最有效率的方法算出2乘以8等於几?
2 << 3
二十九,两个对象值相同(x.equals(y) == true),但却可有不一样的hash code,这句话对不对?
不对,有相同的hashcode。
三十,当一个对象被看成参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里究竟是值传递仍是引用传递?
是值传递。Java 编程语言只有值传递参数。当一个对象实例做为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容能够在被调用的方法中改变,但对象的引用是永远不会改变的。
三十一,swtich是否能做用在byte上,是否能做用在long上,是否能做用在String上?
switch(expr1)中,expr1是一个整数表达式。所以传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能做用于swtich。
三十二,编程题: 写一个Singleton出来。
//恶汉式
class singeleton{
//1.私有化构造器,让在这个类的外部类不能调用这个构造器
private singeleton(){
}
//二、建立这个类的对象,由于构造器被私有化,外部类是不能再 对这个类建立对象,因此只能本类本身建立对象
//由于这个对象是放在属性的位置,因此能够进行私有化,提供对外的方法,让外部类经过方法来调用这个对象
private static singeleton instence=new singeleton();
//3.私有化此instance对象,经过公共的方法来调用
//4.此公共的方法,只能经过类来调用,由于设置为static的,同时类的的实例也必须为static
public static singeleton getSingeleton(){//返回类型是singeleton***********调用对象的只能是方法或者类,由于这个类中
//的对象被私有化,只能 是经过类来进行访问,那么就要对这个类进行静态化static修饰
//这个方法的做用就是返回对象instence
return instence;
}
}
//懒汉式
class singeleton2{
private singeleton2(){
}
private static singeleton2 instence2=null;
public static singeleton2 getSingeleton(){
if(instence2!=null){
instence2=new singeleton2();
}
return instence2;
}
}
要朝这java程序员发展或者真心有兴趣的。能够找我要一些java的学习视频java架构交流群:650385180,这个是免费的,但愿同窗找我要的时候不要有理所应当的态度,毕竟都是个人心血,但愿你是真的有一颗想要学好java的心,我也会尽所能的去帮助你成为一名优秀的程序员。
注:喜欢的朋友能够点赞加关注,一块儿学习进步