java中易混肴知识点浅析

来源:互联网 发布:铜仁家长网校软件下载 编辑:程序博客网 时间:2024/06/05 23:51

1.&&&的区别

&&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运

算结果才为true,否则,只要有一方为false,则结果为false

&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式。

2.switch语句能否作用在byte上,能否作用在long上,能否作用在String?

switchc)中,c只能是一个整数表达式或者枚举常量(更大字体),整数表达式可以是int基本类型或

Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是

可以的。显然,longString类型都不符合

switch的语法规定,并且不能被隐式转换成int类型,所以,它们不能作用于switch语句中。

3."=="equals方法究竟有什么区别?

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,

要比较两个基本类型的数或两个引用变量是否相等,只能用==操作符。

equals方法是用于比较两个独立对象的内容是否相同,就好比去比较两个人的长相是否相同,它比较的两个对

象是独立的.如果一个类没有自己定义equals方法,它默认的equals方法(从Object 类继承的)就是使用==操作符,

也是在比较两个变量指向的对是否是同一对象,这时候使用equals和使用==会得到同样的结果,如果比较的是两

个独立的对象则总返回false如果你编写的类希望能够比较该类创建的两个实例对象的内容是否相同,那么你必须

覆盖equals方法,由你自己写代码来决定在什么情况即可认为两个对象的内容是相同的。

4.Integerint的区别

intjava提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integerjavaint提供的封装类。

int的默认值为0Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的

情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer

5.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

Math类中提供了三个与取整有关的方法:ceilfloorround,这些方法的作用与它们的英文名称的含义相对

应,例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果

-11floor的英文意义是地板,该方法就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12,

最难掌握的是round方法,它表示四舍五入,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,

所以,Math.round(11.5)的结果为12Math.round(-11.5)的结果为-11

6.OverloadOverride的区别

 Overload是重载的意思,Override是覆盖的意思,也就是重写

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类

型不同)。重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例

对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是

面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的

异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的

更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子

类中增加了一个全新的方法。

7.final, finally, finalize的区别

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

finally是异常处理语句结构的一部分,表示总是执行。

 finalizeObject类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃

圾收集时的其他资源回收,例如关闭文件等。

8.errorexception有什么区别?

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样

的情况。

  exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。

9.HashmapHashTable的区别

HashmapHashTable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于Hashmap

允许空(null键值(key,由于非线程安全,在只有一个线程访问的情况下,效率要高于HashTable

HashMap允许将null作为一个entrykey或者value,而Hashtable不允许。

 HashMapHashtablecontains方法去掉了,改成containsvaluecontainsKey。因为contains方法容易让

人引起误解。

Hashtable继承自Dictionary类,而HashMapJava1.2引进的Mapinterface的一个实现。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要

自己为它的方法实现同步,而HashMap 就必须为之提供外同步。

10.说出ArrayList,Vector, LinkedList的区别

ArrayListVector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们

都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector

由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按

序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

LinkedList也是线程不安全的,LinkedList提供了一些方法,使得LinkedList可以被当作堆栈和队列来使用。