你尽管去做,其他的交给天意:读书笔记读书笔记

1、Java字符串的特点

当程序使用字符串、基本类型包装类实例是,尽量使用字符串直接量、基本类型值的直接量,避免通过new String()、new Integer()形式来创建字符串、基本类型包装类实例。对于Java程序中的字符串直接量,JVM会使用一个字符串池来保护它们,当程序再次使用该字符串时,无需创建一个新的字符串。JVM在编译时就可以确定字符串的值可以让该字符串指向字符串池中对应的字符串;如果程序中使用了变量或调用看方法,那就只能等到运行时才能确定字符串的值,也就无法在编译时确定字符串变量,从而无法使用JVM字符串池。如果字符串连接运算中所有变量执行了“宏替换”,那么JVM可以在编译时就确定字符串表达式的值。

2、String、StringBuilder和StringBuffer

当一个string对象创建完成后,该string类包含的字符序列就被固定下来了,以后永远不能变。因此如果程序需要一个字符序列会发生改变的字符串,考虑使用stringBuilder或StringBuffer。StringBuilder与StringBuffer的唯一区别是,StringBuffer是线程安全的,但效率会降低。在没有多线程的情况下,首先使用StringBuilder。

如果程序比较的是俩个字符串是否相同,用(==)就行了【比较俩个字符串引用变量是否指向同一个字符串对象】;但如果要判断俩个字符串所包含的字符序列是否相同,则应该用String重写过的equals方法进行比较。

3、表达式类型自动提升的陷阱

Java是一门强类型语言,强类型语言的俩个基本特征:所有变量不许声明,然后才能使用,声明变量时必须指定该变量的数据类型;一旦某个变量的数据类型确定下来了,那这个变量将永远只能接受该类型的值。

当一个算术表达式中包含多个基本类型变量,整个算术表达式的数据类型将自动提升:byte、short和char将自动提升为int——》long——》float——》double。

4、复合赋值运算符隐含的类型转换

复合赋值运算包含一个隐式类型转换:a+=5等价于a=(a的类型)(a+5),其于a=a+5不一样。

复合运算有:+=、-=、*=、%=、<<=、>>=、>>>=、&=、

如果把+=当成字符串连接符使用,则+=运算符左边的变量只能是String类型,不能是String的父类类型,如(object或CharSequence)。

5、输入法导致的陷阱

基本上,如果在编译时提示“非法字符串:\xxxxxx”的错误提示,可断定程序中国包含“全角字符”,逐个删除就行

6、必须使用合法的注释字符

\u后面的4个字符必须是0-F。

7、慎用字符的Unicode转义形式

\u000a是换行符,慎用

8、泛型中原始类型变量的赋值

当程序把一个原始类型的变量赋给一个带泛型信息的变量时,总是可以编译----只是会提示一些警告信息;如果只是简单的输出每个集合元素,并不涉及集合元素类型,程序不会出现异常 ;否则,程序要么编译异常,要么运行异常。

当程序试图访问带泛型声明的集合的元素集合时,编译器总是把集合元素当成泛型类型处理----它并不关心集合元素实际类型

当程序试图访问带泛型声明的集合的集合元素时,JVM会遍历每个集合元素自动只从强制转型,如果集合元素的实际类型与集合所带的泛型信息不匹配,运行时将引发ClassCastException。

9、原始类型带来的擦除

当把一个具有泛型信息的对象赋给另一个没有泛型信息的变量时,所有尖括号之间的类型信息都将被丢弃。

10、Java不支持泛型数组

11、正则表达式中(.)匹配任意字符

split(string regex)、replaceAll(string regex,String replacement)、replaceFirst(String regex,String replacment)

“\\.”代表转义,“\\\\”标识双斜杆

12、不要调用线程对象的run方法

3种方法创建、启动多线程:

继承Thread类来创建线程类、重写run()方法作为线程执行体;

实现Runnable接口来创建线程类,重写run()方法作为线程执行体

实现Callable接口来创建线程类,重写call()方法作为线程执行体。

第一种方式效果最差:线程继承了Thread类,无法继承其他父类;因为每条线程都是一个Thread子类实例,因此多个线程之间共享数据比较麻烦。

13、静态同步方法的同步监视器是类

Java提供synchronized关键字用于修饰方法,使用synchronized修饰的方法被称为同步方法。当然,还可以修饰普通代码块,被修饰的代码块称为同步代码块。java规定,任何线程进入同步方法、同步代码块之前,必须先获取同步方法、同步代码块对应的同步监视器。

14、多线程执行环境的线程安全问题

不考虑多线程环境的情况下,很多类代码都是正确的,但一旦将它们放在多线程环境下,这个类就变得很脆弱,这种类称为线程不安全,在多线程环境下,使用线程不安全的类是危险的。

使用synchronized关键字修饰方法,通过同步方法可以得到线程安全类。

程序员基本功05表达式中的陷阱相关推荐

  1. 程序员基本功 06 流程控制的陷阱

    1.switch语句中的default语句 switch语句用于判断某个表达式的值,根据不同的值执行不同的分支语句.default分支潜在的条件是:表达式的值与前面分支的值都不相等,也就是说,正常情况 ...

  2. 程序员基本功08异常捕捉的陷阱

    1.使用finally正确地关闭资源 在实际开发中,经常需要 在程序中打开一些物理资源,如数据库连接.网络连接.磁盘文件等,打开这些物理资源后必须显示关闭,否则将引起资源泄露.JVM的垃圾回收机制属于 ...

  3. 程序员如何快速准备面试中的算法 - 结构之法

    准备面试.学习算法,特别推荐最新出版的我的新书<编程之法:面试和算法心得>,已经上架京东等各大网店 前言 我决定写篇短文,即为此文.之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作 ...

  4. 程序员的私藏好书中,一定有这7本!

    众所周知,读一流的书,是人生最大的捷径.今天推荐异步社区的 7 本经典程序员必读书籍!并送出 7 本,赠送方式见文末! 无论是从书中得到提升专业技能的知识,还是增长见识.启迪智慧,这些都只有好书才能做 ...

  5. 程序员的私藏好书中,一定有这 7 本

    点击上方"逆锋起笔",关注领取视频教程 ☞ 程序员进阶必备资源免费送「各种技术!」 ☜ 来源 | 异步 | 文末赠书 众所周知,读一流的书,是人生最大的捷径. 无论是从书中得到提升 ...

  6. 程序员如何快速准备面试中的算法

    程序员如何快速准备面试中的算法 准备面试.学习算法,特别推荐最新出版的 新书<编程之法:面试和算法心得>,已经上架 京东等各大网店 前言 我决定写篇短文,即为此文.之所以要写这篇文章,缘于 ...

  7. html类名定义规则_好程序员分享Java语言中的标识符规则

    好程序员分享Java语言中的标识符规则,在编程过程中,经常需要在程序中定义一些符号来标记一些名称,如包名.类名.方法名.参数名.变量名等,这些符号被称为标识符.标识符可以由任意顺序的大小写字母.数字. ...

  8. 好程序员分享如何看待CSS中BEM的命名方式?

    好程序员分享如何看待CSS中BEM的命名方式?BEM的意识就是块(block).元素(element).修饰符(modifier),是由yandex团队提出的一种CSS Class命名方法. 任何一个 ...

  9. 程序员独白:经济危机中,一个老女人15万包我一年

    程序员独白:经济危机中,一个老女人15万包我一年! 这是一个真实的故事,为了好阅读,将采用第一人称来写.同时,为了保护隐私,略去了一些敏感信息.世界万千,生活百态,尽在程序员独白! 我在2008年的8 ...

最新文章

  1. 初识C语言---(4)
  2. 推荐:一本“高颜值”的R语言数据可视化图书(包邮送3本)
  3. python 重复输出字符串
  4. *** 隧道和加密技术知识要点
  5. vue中将md转成html,Vue/Vue中Html和Markdown互相转换/README.md · 倚栏听风/LearningNotes - Gitee.com...
  6. JS限制表单输入特效代码
  7. SQL SERVER2000将多行查询结果拼接到一行数据及函数的创建
  8. HDU 4635(强连通分量分解
  9. flex gallery / 产品展示
  10. Java多线程学习二十七:AtomicInteger 在高并发下性能不好,如何解决?为什么?
  11. 阿里云高级技术专家彦林:云原生架构下的微服务演进
  12. i.MX 8M Mini sai_low_power_audio
  13. Matlab入门教程 | 001 球的体积问题
  14. Mybatis-Plus入门案例、以及为什么不建议使用MP?
  15. 传媒论坛杂志传媒论坛杂志社传媒论坛编辑部2022年第13期目录
  16. 90后马来西亚女孩闯华为
  17. 2018NOIp爆零记
  18. ​“人工智能”初创公司所面临的问题
  19. 部分选主元matlab,列选主元的高斯消去法-matlab
  20. 对捕金猎人的买涨买跌交易感悟?(交易基础篇)

热门文章

  1. AXI_01 《AXI总线系列文章》由来
  2. webpack多个Html,少量修改webpack配置支持打包多页面
  3. iis下的php不显示报错信息,IIS环境下 PHP无法显示错误信息怎么办
  4. java 日历类_JAVA 的日历类型
  5. 2020年电赛题目,命题专家们怎么看?
  6. 漫画科普:芯片是如何设计出来的
  7. 电气控制原理动图22张,超赞!
  8. mysql workbench 6.2_如何在MySQL Workbench 6.2查询中运行.sql文件?
  9. 不礼让行人怎么抓拍的_【交通违法曝光2019年第11期】梅河口市公安局交警大队对电子警察抓拍的88台机动车不礼让行人车辆曝光如下...
  10. 计算机数据库技术的应用现状,数据库技术发展现状及趋势.doc