java笔记

来源:互联网 发布:妹子ui 和js 编辑:程序博客网 时间:2024/06/14 01:14

1、==比较引用类型时,比较的是虚地址。String类型比较特殊,当使用=赋值时,相同内容的字符串本质是同一个对象,虚地址相同。而使用new赋值时,每次都会创建一个新的对象。

2、equals()方法是在Object类中定义的,Java API中的类都默认有该方法,默认情况下是比较两个对象的虚地址。但是很多类对其进行类覆盖。String类就将equals方法进行了覆盖,修改为比较两个字符串序列,只要字符串序列相同的字符串,就返回值为true。

3、null指的是空指针,而空字符串指的是str已经被初始化,不过值为空,即" "。在判断的时候,一定先判断其是不是空指针,再调用equals方法判断其字符串序列是否为空,否则会发生空指针异常。

4、==比较的是引用的虚地址。对于字符串常量来说,存在于字符串共享池里,只要字符串序列相同的字符串,在共享池里被“合并”,引用一个对象,所以虚地址也相同。

5、StringBuilder是JDK5增加的一个新类,功能几乎与StringBuffer相同。区别在于StringBuffer是线程安全的,多个线程同时操作StringBuffer时,能保证同步。而StringBuilder是线程非安全的。如果只在单线程环境下使用,StringBuilder的效率会更高。

6、权限访问你修饰符包括public、protected、默认、private,其中类只能用public或默认的修饰,而类的属性、方法、构造方法可以使用四个中的任意一个修饰。方法的局部变量不能使用任何权限修饰符。

7、浮点数默认是以64位的double类型存储的,而float是32位的。高精度的数值赋值给低精度的变量会发生编译错误。可以使用后缀f,或者是使用(float)进行类型转换。

8、用==比较基本数据类型,比较的是数值的二进制值。小数默认是以64位的double类型存储,因此0.3和0.3f的二进制值不同,二0.5和0.5f的二进制相同。

9、==可以用来比较引用类型,也可以用来比较基本数据类型。值得注意的是,可以将基本数据类型与包装器类型比较。只要值相同,就返回true。

10、静态方法中不能使用this关键字。this关键字指的是当前的一个引用,而static方法与对象无关,是所有对象共享的,所以不能使用this。

11、使用父类类型声明变量,却使用子类初始化,在编译期是到父类中去检查是否存在要调用的方法,而运行时却是绑定到子类运行。

12、使用父类类型声明的变量,却使用子类初始化,在编译期是到父类中去检查是否存在要调用的方法,而运行时却绑定到子类运行。如果调用的方法父类中根本不存在,就会发生编译错误。

13、数组本身就是一个对象,不管数组中的元素是什么类型,数组都是Object类型。

14、Object[]指的是对象型数组,也就是数组的元素必须是引用类型,不能是基本数据类型。int[]类型的数组本身是引用类型,但是元素是基本数据类型,所以不是Object[]类型。

15、java.lang.ClassCastException。因为Arrays类中的sort方法,如果对Object[]数组排序,首先要求所有元素都实现了Comparable接口,其次在运行时,将把每个元素都强制转换成第一个元素的类型。

16、运行期异常又称为Unchecked异常。运行期异常都直接或者时间接继承于RuntimeException,这些异常可以在虚拟机正常运行期间被抛出,编译器不强制Java代码处理这些异常,如果运行时发生了运行期异常,系统会自行处理。

17、只要是对null调用方法、属性或者在throws中抛出,都会发生空指针异常。

18、Java中的异常分为两大类,即checked异常和unchecked异常。其中运行期异常即unchecked异常,其他的都统称checked异常。checked异常也称为检测异常,即编译期编译器强制Java程序处理这些异常,否则将有编译错误。而unchecked异常不强制处理,发生后由虚拟机接管。

19、throw是用在方法体中的,语法是throw 异常对象;throws是用在方法声明中的,语法是throws 异常类型;

20、异常发生后,最多只能被捕获一次,不能被多次捕获。除非捕获后,再次使用throw抛出异常。

21、使用throw抛出异常后,要么使用try catch处理,要么继续用throws声明。如果用throws进行声明,则调用该方法时进行捕获处理,也可以考虑继续声明抛出。

22、Java的接口中,不能声明变量,只能声明静态常量;不能声明具体方法,只能声明抽象方法。常量和方法的默认权都是public。本质是一个抽象类,不能实例化。用来规范其实现类的统一行为。

23、接口和抽象类一样,不能实例化,但是可以作为一种引用类型存在。只要是接口的实现类的对象,都是该接口的类型。

24、Collection是Java集合框架的一个顶级接口,其存储的元素可以是任意类型的对象。Map是Java集合框架中的映射接口,以键值对的形式存储对象。也就是说,Collection中存储的元素是一个一个的对象,而Map中存储的元素是一对一对的键值对。

25、ArrayList和LinkedList都是List的实现类,主要区别是其底层实现的数据结构不同,从而导致在不同的操作时性能不同。ArrayList底层使用一个数组实现,可以说是一个动态数组。当需要随机访问列表中的元素,使用ArrayList性能较高。LinkedList底层使用双向链表实现,当需要频繁的插入、删除列表中的元素,使用LinkedList性能较高。

26、ArrayList和Vector中的方法几乎相同,都是List的实现类,底层都是使用动态数组的实现。Vector是JDK1.0时就存在,而ArrayList是JDK1.2中增加的。二者的主要区别是Vector是线程同步的,也就是在同一时刻,只能有一个线程访问。而ArrayList不是线程同步的,如果需要对ArrayList同步,可以使用Collection.synchronizedList方法实现。

27、Hashtable是JDK1.0中的类,JDK1.2后开始实现Map接口,成为集合框架中的映射类之一。HashMap是JDK1.2中新增的类,实现Map接口。二者的主要区别是Hashtable默认是线程同步的,而HashMap不是同步的,可以使用Collections.synchronizedMap方法中进行同步。另外,HashMap中可以有一个null的key值,可以有多个value是null值。而Hashtable中的key和value都不能有null值。

28、代码中声明了泛型集合,对象可以使用父类声明类型,子类进行创建,而泛型类型不允许。

29、Math中的round方法是返回一个与参数最接近的长整型数值。正数“四舍五入”,负数“五舍六入”。

原创粉丝点击