Java SE 学习笔记 第三记

2012-07-17

1、java.lang包在编译的时候会自动导入,无需显示导入。此包内包含object类还有一些常用类。

2、Object的equals方法实质是判断两个引用值是否一致,相当于==,即两个对象是否是同一个对象。String的equals方法是比较两个字符串的每个字符是否一样,而不是两个字符串对象的引用值。

3、“==”比较的是值,无论是原生数据类型还是对象引用都是比较值,只是对象引用的值是引用地址,因此比较的结果是同一个对象才会返回true。

4、String是一种特殊的对象,除了可以用new创建新对象之外,还可以使用字面值直接创建新对象,字面值就是类似于原生数据类型一样赋值,如String string="abc",只有String可以使用字面值创建对象。并且,String对象是一种常量对象,java通过字符串池来管理这些常量。当使用字面值创建对象后,字符串池内会创建相应的String对象,而且创建后的String内容不能再改变。因此,字符串池类会有很多不能再改变的字符串对象,如“abc”是不能再改变的,所以,当使用字面值创建String的时候,会先在字符串池内搜索是否存在要创建的字符串对象,如果存在则不用再创建,直接返回该对象的引用。也就是说,字符串池内的字符串对象只创建一次,并且创建后不能再改变值,可以供多个字符串引用使用。基于这个原理,当使用字面值创建相同内容的字符串对象时,用==比较这些对象的结果是true,因为它们的值都是字符串池中同个字符串对象的引用地址。而使用new创建的字符串对象不同,因为new是在堆中创建新对象,字符串池存在于栈中,new无论怎样都会在堆中创建新的对象,并返回对象的引用。如果字符串池中已经存在要创建的字符串,则new直接在堆中创建新对象;如果字符串池中不存在要创建的对象,则java会先在字符串池中创建要创建的字符创对象后,堆中也会创建这个要创建的对象,并返回堆中这个对象的引用。因此,即使String内容相同,但是不同对象引用地址不同,==比较的结果也是false。

5、String的intern()方法,如“abc”.intern(),该方法会在字符串池中查询abc是否存在,如果不存在,则会在字符串池中创建abc对象,并返回字符串池中这个对象的引用,如果字符串池中已存在,则直接返回字符串池中这个对象的引用。因此,s.intern()==q.inern()为true的必要条件是s.equals(q)为true。

6、String和StringBuffer的区别:String对象是常量,定义后值不能再改变;StringBuffer是变量对象,值可以修改,修改后StringBuffer引用变量还是指向原来的StringBuffer对象(String修改的实质是String引用变量指向一个新的String对象),常用append()方法追加字符,可以用toString()方法返回当前字符串内容。

7、+号不能直接用于布尔值的拼接。

8、字符串字面量的拼接,返回值也是字符串池中字面量的引用,如“abc”+“def”,返回的结果是字符串池中的“abcdef”引用;而字符串字面量和字符串引用变量的拼接,其过程是在堆中创建新的对象,返回值是堆中该对象的引用。

9、java中对应8个原生数据类型,有8个包装类:Boolean、Integer、Short、Long、Byte、Float、Double、Character。

10、数组是一种由相同类型的变量组成的集合的特殊类,类名为数组元素类型+[](一个或多个),如int[]。创建数组相当于创建对象,用new创建,需指明数组的长度,特别的,可以{}指定数组元素的同时创建数组,此时不用指明数组的长度。每一个数组元素相当于数组对象的成员变量,而且数组含有一个final类型的public成员变量length,表示数组的长度。

11、对于二维数组type[][](行列),实质上相当于数组的数组,可以分隔为'type[]'[]:以type[]数组作为一维数组元素类型,type类型作为二维数组元素类型,分成两层形成最终复合二维数组,所以type表示的整个二维数组(值为地址,二维数值也是对象,其length值是二维数组中一维数组的个数),type[i]表示的是第i个一维数组(值为地址,因为数组是对象,其length值是第i个一维数组的长度)。二维数组每一行的列数可以不相同,也正是因为这个原因。类比二维数组,高维数组也遵循同样的道理。

12、数组声明的元素的类型可以是interface,因为数组创建后的元素interface是引用类型,但是具体每个元素赋值时使用new的必须是interface的实现子类。

13、java的java.util.Arrays类提供了各种静态数组辅助操作方法,包括数组比较,排序等,详见jdk文档。

——————————————————————————————————————————————————

2012-07-18

1、java.lang.System类包含许多辅助方法,如数组拷贝方法arraycopy()。

2、冒泡排序是交换排序的一种。

3、java中约定常量命名规则:全部由大写字母组成,多个单词之间用下划线隔开。

4、修饰常量成员常用final与static并用,因为final不允许修改,static为类常量,节省内存。

5、Eclipse中快捷键Alt+/,自动补充相关代码。Ctrl+/,自动注释掉光标所在行。Ctrl+D,删除光标所在行。将鼠标放置在一个类名上,再按Ctrl,类名将变成一个超链接指向定义该类的代码。

6、java提供了集合的概念,集合也就是一堆元素的集合体。集合在java以接口的形式定义为Collection,但是JDK并没有提供Collection的实现类,而是提供了向下继承了Collection的另外两个接口Set和List,并且提供了Set和List的一系列实现类。

7、实现List接口的一个实现类ArrayList(数组列表),类似于数组,但是元素可以是各种类(只要是Object的继承类)(数组是同一类类型的集合),定义的时候也不用指定数组列表的长度,使用add()向数组列表添加元素,使用get()向数组列表获取指定索引值的元素(索引顺序与数组一样,从0计数),使用clean()清除数组列表所有元素,使用remove()以元素索引或元素值删除指定元素。详细方法查询JDK文档。

8、使用get获取ArrayList数组列表元素后,需要将元素强制转换为该元素的类型,如果强制转换的类型不符合元素类型,编译的时候不会报错,在运行时会把抛出类型转换错误异常。

9、使用ArrayList的toArray()方法,将ArrayList数组类表元素转换为数组,返回的数组类型是Object[],Object[]不能强制转换为具体类型数组,原因在于具体数组类型并不是Object[]的子类。

10、ArrayList的toString()方法是按照ArrayList元素的顺序分别调用各个元素类型的toString()方法,并将返回结果使用[]括起来,元素之间的返回结果用,号隔开。

11、集合的元素依然是对象的引用,不是对象本身。

12、ArrayList的底层实际是一个Object[]数组,所以数组列表元素可以是任意类型的对象,因为任何类都继承Object类。使用ArrayList默认构造方法会实际会在ArrayList底层生成一个长度为10的Object[]数组。当使用add方法向ArrayList添加新元素的时候,add方法会先判断Object数组长度够不够,如果够则直接将新元素添加进Object数组;如果长度不够,则会创建新的Object数组,长度为原来数组长度的1.5倍+1,然后将原数组的内容复制到新数组当中。如此循环,直到数组长度不够的时候,再按照以上方法增加数组长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值