java编程思想阅读笔记

  1. i++先调用i的值,再进行加一计算,++在前则相反。
  2. 与或非操作只可以用于布尔值。
  3. +的一个操作数如果是String类,另外一个基本类型变量也会被转换成String。用于String的+和+=是java中仅有的两个重载过的操作符,而java中并不允许程序员重载任何操作符。
  4. 短路现象:当使用逻辑操作符时,一旦能够准确的确定整个表达式的值,则不会再计算表达式后面的部分。
  5. 0x表示16进制,0表示八进制。
  6. boolean-exp ? valua0 : valua1
  7. 其他基本类型不能强制转换成boolean。也不允许将一个数字作为布尔值使用。
  8. 通过使用逗号操作符,可以在for语句内定义多个变量,但是它们类型必须相同。
  9. 如果自己定义了构造器,那么编译器将不提供默认构造器(无参),构造器是static方法。
  10. static方法的内部不能调用非静态方法。
  11. this:在方法的内部获得对当前对象的引用。
  12. switch只能用整数值来选择分支(char也可以,自动转换成int),但是可以结合enum使用。
  13. 访问权限控制等级,从最大权限到最小权限,public、protected、包访问权限(无关键词)和private。作为一名库类设计员,应该尽可能将一切方法都定为private,而仅向客户端程序员公开你愿意让他们使用的方法。
  14. 访问权限控制(public、protected、包权限、private)常被称为是具体实现的隐藏。把数据和方法包装进类中,以及具体实现的隐藏,常共同被称作是封装。
  15. 控制对成员的访问权限主要有二个原因,第一是为了使用户不要碰触那些他们不该碰触的部分;第二是为了让类库设计者可以更改类的内部工作方式,而不必担心这样会对客户端程序员产生重大的影响。
  16. 如果没有默认的基类构造器(无参),或者想调用一个带参数的基类构造器,就必须用关键字super显式地编写调用基类构造器的语句,并且配以适当的参数列表。
  17. try{…}finally{…}:无论try块是怎么样退出的,finally子句中的代码总是要被执行。
  18. final数据:对于基本类型,final使数值恒定不变;对于对象,final使引用不变,而对象本身可以发生变化。final参数意味着你无法在方法中更改参数引用所指向的对象。final方法意味着禁止任何继承类修改其含义。final类无法被继承,其中所有方法隐式指定为final。
  19. 多态,也叫后期绑定、动态绑定、运行时绑定。多态是一项让程序员"将改变的事物与未变的事物分离开来"的重要技术,想下几何形状的例子。从基类中继承而来相同的接口,导出类中各自有自己的实现方式。
  20. 导出类调用构造器的顺序:1、递归基类构造器;2、按声明顺序调用成员的初始化方法;3、调用导出类构造器主体。
  21. 子类如果有多个构造函数的时候,父类要么没有构造函数, 让编译器自动产生,那么在执行子类构造函数之前先执行编译器自动产生的父类的缺省构造函数;要么至少要有一个显式的缺省构造函数可以让子类的构造函数调用。使用super()显式调用父类的某个构造方法后不再调用缺省构造函数。
  22. 重写父类方法时不可以降低访问权限。实现接口时,所有实现的方法的权限都必须是public。
  23. 内部类自动拥有外围类所有成员的访问权(包括private)。构建内部类对象时,需要一个指向其外围类对象的引用,如果编译器访问不到这个引用就会报错。
  24. Queue(只是接口,有2个实现LinkedList和PriorityQueue)相关方法peek()返回队头或者null;poll()移除并返回队头或者null;remove()移除队头或者抛出异常;offer()插入对象时,如果插入PriorityQueue(构造函数可指定比较器Comparator),这个对象在队列中会被排序,add()重写过,和offer()一样,就是调用offer()。
  25. List建立索引与对象的关联。如果要进行大量是随机访问,使用ArrayList;如果要经常从表中间插入或删除元素,使用LinkedList。
  26. Map将一个对象和另一个对象关联。HashMap设计用来快速访问;TreeMap保持"键"始终处于排序状态,没有HashMap快;LinkedHashMap保持元素插入的顺序,同时也通过散列提供了快速访问的能力。
  27. Set不接受重复元素。HashSet提供最快的查询速度;TreeSet保持元素处于排序状态;LinkedHashSet以插入顺序保存元素。
  28. String对象是不可变的,String类中每一个看起来会修改String值的方法,实际上都是创建了一个全新的String对象,以包含修改后的字符串内容,而最初的String对象则丝毫未动。
  29. StringBuffer线程安全,可同步,StringBuilder不保证同步,在字符串缓冲区被单个线程使用时,应该优先使用StringBuilder,该类速度更快。
  30. 用Pattern.compile(String )编译正则表达式,根据一个String对象生成Pattern对象,然后把想要检索的字符串传入Pattern对象的matcher()方法中,返回一个Matcher对象,然后调用Matcher对象的find()方法来查找匹配,每次调用后自动指向下一个匹配或者null,group()返回前一次匹配的结果。import java.util.regex.*
  31. Scanner:一个可以使用正则表达式来分析基本类型和字符串的简单文本扫描器。Scanner使用分隔符模式将其输入分解为标记,默认情况下该分割模式与空白匹配。然后可以使用不同的next方法将得到的标记转换为不同类型的值,如nextInt()。可以用useDelimiter()方法来设置分隔符,参数为正则表达式。
  32. 每个类都有一个Class对象,所有类都是在第一次使用时动态加载到JVM中,Class.forName("className")是取得Class对象引用的一种方法,很多时候调用只是为了它产生的"副作用":如果类className没有加载就加载它。
  33. a instanceof A 返回一个布尔值,判断对象a是否是类A的一个实例,可以用于向下转型前做判断。也可以用Class类的isInstance()方法。
  34. 通过使用代理类可以添加或者移除一些不希望其合并到应用中的代码,比如希望度量某些调用的开销,跟踪某些调用。
  35. Java泛型的一个局限性:基本类型不能作为类型参数。不过Java SE5具备自动打包和自动拆包的功能,可以很方便的在其基本类型和相应的包装器类型之间进行转换。
  36. 适配器(adapter)模式:希望令某个类实现某个接口,但是不能拥有源代码的控制权,或者不愿意重写这个类,那么就可以选择创建适配器来实现所需的接口。
  37. static方法无法访问泛型类的类型参数,所以如果static方法需要使用泛型能力,必须使其成为泛型方法(在返回值前面加泛型参数列表,如<T>)。使用泛型类时,必须在创建对象时指定类型参数的值,而使用泛型方法的时候,通常不需要指明参数类型,因为编译器会为我们找出具体的类型(叫做类型参数推断,只对赋值操作有效,我的理解是非赋值操作无法推断具体类型)。
  38. 在泛型函数内部,无法获得任何有关泛型参数类型的信息。比如调用泛型函数内部调用T.f()会编译错误,可以用<T extends HasF>来声明T是类HasF(其中有个f()函数)或者其导出类,这样就可以了。extends后可以跟多个类,接口,用&连接,类在前接口在后,顺序错误无法编译。
  39. Arrays.deepToString()方法可以将多维数组转换为多个String(用[]和,分隔,代码中用{}和,分隔),对基本类型数组和对象数组都起作用。
  40. Arrays有一套用于数组的static实用方法,常用的如下:equals()用于比较两个数组是否相等,长度相等,其中每一个元素也相等,每一个元素是否相等用equals()判断( deepEquals()用于多维数组); fill()用于填充数据,可以指定填充内容和位置; sort()用于对数组排序,参数为数组和Comparator(可选),可以对任意的基本数据类型,也可以对任意的对象数组进行排序,该对象必须实现了Comparable接口(compareTo()方法)或者具有相关联的Comparator(例如:class MyType implements Comparator<MyType>),Collection.reverseOrder()返回一个反序的Comparator;binarySearch()用于在已经排序的数组中查找元素,参数为数组,查找元素,与sort()相同的比较器,注意查找失败时返回值为-(插入点)- 1,插入点指第一个大于查找对象的元素在数组中的位置; toString()产生数组的String表示; hashCode()产生数组散列码;asList()方法会生成一个List,它基于一个固定大小的数组,任何会引起对底层数据结构的尺寸修改的方法都会产生一个UnsupportedOperationException异常。
  41. 数组强调的是性能而不是灵活性,应该优先选择容器而不是数组,只有在已证明性能成为问题(并且切换到数组对性能提高有所帮助时),才应该将程序重构为使用数组。
  42. System.arraycopy(i, 0, j, 0, length)用于复制数组,参数为源数组,索引,目标数组,索引,长度。基本类型和对象都可以复制,如果复制对象数组,那么只是复制了对象的引用,而不是对象本身。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值