1. System.exit(0)会跳过finally块的执行

  System.setSecurityManager(new SecurityManager() {

  @Override

  public void checkExit(int status) {

  throw new ThreadDeath();

  }

  });

  try {

  System.exit(0);

  } finally {

  System.out.println("In the finally block");

  }

  这段代码为什么会输出In the finally block?为什么没有打印出堆栈跟踪信息呢? 2. String str = "Hello”;其中str是一个字符串对象跟C++不同的是,Java里的变量要么是基础类型,要么是引用。变量不可能是对象。这意味着像这样的表达式:

  String str = "Hello";

  String text = "Bye";

  str == text; // 比较两个引用,而不是内容

  str = text; // 把text的引用赋值给str

  大多数情况下其实没有太大的区别,不过这么写容易引起困惑。

  final StringBuilder sb = new StringBuidler();

  sb.append("Hello"); // 这个引用是final类型的,而不是这个实例。

  method(sb); // 可以通过方法来修改这个实例,不过这个变量是无法修改的

  Java的内存泄露跟C++程序员理解的一样内存泄露在维基百科上的定义是“在计算机科学中,如果程序没有正确地管理好内存分配,就会出现内存泄露。在面向对象编程中,如果内存中的一个对象无法在代码中访问不到的话,这就是内存泄露。” 不过在Java中,对象总是可达的,那些没有强引用的对象会被清除掉。内存泄露这个术语在Java中意味着:内存中存在着不该存在的对象,通常来说是有些不再使用的资源却仍存储在集合中。

  多线程编程很难,如果你没有经验的话,多线程编程的确很难。如果你只是把一堆代码扔到一堆线程中去执行,那样出了问题根本没法解决,只能是一团糟。但如果你能进行线程的按需分配,控制线程间的交互,使用一些团队中的成员也能明白的简单的模式,问题就变得简单多了。当然还有一个挑战就是你得让团队中的所有人都遵循你的这个规则。

  不用关心不同操作间性能的不同,最近听说有个问题,它涉及到了整数的相加,内存访问,取模,以及输出到控制台。尽管在这些操作里面,每一个都比前面一个要慢一个数量级,但这哥们就是想优化这里面最快的操作,加法,还用了些更昂贵的操作来替换它。如果你真的想要优化性能,你最好用一个廉价的操作来替换掉那些昂贵的操作,如果你的瓶颈在硬件这块,比方说要从硬盘里面读取大量的文件,修改软件的代码是没啥用了,因为问题根本就不在这。

  随机数都是随机的

  一组特定的随机数就像是某种模式的数字。这个问题我在这篇文章中已经讲到过了,很多人都不相信随机数生成器生成的数字其实是不随机的。

  应该尽量避免使用浮点数,因为它们会产生随机错误

  对于同一个操作而言,浮点数每次都会产生同样的错误。错误是可预测的,因此也是可控的。如果你清楚你要做的事情是什么,并且坚持使用一些简单的规则,比如说对结果进行舍入操作,那么浮点数出的错也不会比BigDecimal要多,除此之外它的可读性更强,而且效率快了百倍以上(同时产生的垃圾对象也更少了)。

  时区是永恒不变的

  之所以会有这个误解是因为,随着时间的变化,时区是在改变的。这意味着欧洲/伦敦在新纪元的时候是1970/1/1 01:00而不是00:00,为什么?因为伦敦在1968年到1971年这两年间的时间内使用的是夏令时。

  在过去的这些年里面,还有不少时区也发生了变化。莫斯科以前是东三区(GMT+3),现在是东四区(GMT+4)(从2011年3月27日开始)。如果你看下2010年的时间,你会发现它是东三区而不是东四区。

  还有些事你听起来或许会感觉很意外:

  1721年的瑞典的2月有30天。

  1751年英格兰的第一天是3月25日,和法国相比差了11天。

  美国采用公历纪年后,它往前追溯了上百年,这样原先记录的那些日期都可以用两种日历来进行表示(通常为了更精确会同时提供两个日期)。比如乔治华盛顿的生日从1731年2月11变成了1732年2月22。

  当你在线程中读取一个非volatile变量时,你最终能读取它更新的那个值。

  前几天这个问题在StackOverflow上出现过两回了。一般来说,JIT编译器优化代码的时候会将这个线程没有修改到的非volatile类型的字段进行内联。一旦这个代码被编译了(你可以通过-XX:+PrintCompilation看到),你在另一个线程对这个字段进行的修改它很可能就永远也看不到了。加上随机的同步块或者打印语句可以推迟这个优化的执行,或者扰乱JIT编译器,让它不去执行这个优化。

 为了让学习变得轻松、高效,今天给大家免费分享一套Java教学资源。帮助大家在成为Java架构师的道路上披荆斩棘。需要资料的欢迎加入学习交流群:9285,05736

大家对Java的一些误解相关推荐

  1. Java 9的误解和Java 10的愿望清单:Java影响者的全部访谈

    是时候消除那些Java 9的误解了 Java 9将在9月到达,即使我们已经准备好了也没有,但是在到达Java 9之前,仍有一些事情需要理解. 我们需要停止思考Maven在Java 9上不起作用,并且如 ...

  2. java常见_关于Java的常见误解

    java常见 Java是世界上使用最广泛的语言(需要引用),每个人对此都有自己的见解. 由于它是主流,所以通常会嘲笑它,有时是对的,但有时批评并没有触及现实. 我将尝试解释我最喜欢的5个关于Java的 ...

  3. 关于Java的常见误解

    Java是世界上使用最广泛的语言(需要引用),每个人对此都有自己的见解. 由于它是主流,所以通常会嘲笑它,有时是正确的,但有时批评只是不切合实际. 我将尝试解释我最喜欢的5个关于Java的误解. Ja ...

  4. 未来趋势分析:Linux有可能成为java OS

    发布时间:2009.03.17 04:48     来源:赛迪网    作者:fen [赛迪网-IT技术报道]Sun公司已经开放了对java技术的最后限制,并且鼓励在linux发行版中集成java平台 ...

  5. 张季跃201771010139《面向对象程序设计(java)》第一周学习总结(改)

    张季跃201771010139<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.co ...

  6. Java核心技术卷1心得笔记1---Java程序设计概述

    第一章 Java程序设计概述 本章主要介绍了Java程序设计平台,Java关键术语,Java applet,Java发展史以及常见几个易误解的概念. 主要了解下Java关键术语,Java applet ...

  7. 后端技术:Java 程序员常犯的 10 个 SQL 错误!

    Java程序员编程时需要混合面向对象思维和一般命令式编程的方法,能否完美的将两者结合起来完全得依靠编程人员的水准: 技能(任何人都能容易学会命令式编程) 模式(有些人用"模式-模式" ...

  8. review_core_basic_java(1)java程序设计概述

    [0]README 1)本文部分文字描述转自 "core java volume 1" 旨在review "review_core_basic_java(1)java程序 ...

  9. 细数人们对安卓的误解

    误解一:安卓是iOS的后辈 不知不觉,安卓已经成为了世界上最流行的移动智能系统,就市场占有率来看,安卓甚至要高于引领了智能机和平板电脑革命的iOS.安卓的红火深远地影响了IT行业,全球最大的社交网络F ...

最新文章

  1. Android库so文件及skia函数的调用
  2. 机器学习中的没有免费的午餐定律是什么?“没有免费的午餐”对你意味着什么?没有免费午餐定律定律能给数据科学家提供什么启示?
  3. java浮点数误差_浮点数运算的误差
  4. 分享几点Android 开发中的小技巧吧。不知道算不算?
  5. 每天一道LeetCode-----找到给定数组中第三大的值
  6. php类精确验证身份证号码
  7. java关键字和标识符_Java数据类型和标识符
  8. asp单元格合并后宽度没有合并_宅在家里跟着大牛从零开始学excel第五课-合并,边框,列宽行高...
  9. idea mysql错误提示_idea提示错误:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
  10. 栈溢出笔记1.6 地址问题(1)
  11. 2015 ACM/ICPC Asia Regional Shenyang Online题解
  12. 如何在Win7 x64上的配置32位的PostgreSQL ODBC数据源
  13. Photometric Stereo 光度立体三维重建(四)——光源标定
  14. 如何查看Linux虚拟机ip地址
  15. vlan的理解以及华为access、trunk、hybrid三种链路对比
  16. 【MyBatis】 MyBatis与MyBatis-Plus的区别
  17. Guava学习笔记(转)
  18. 散转程序c语言,单片机 散转表程序的使用
  19. Python matplotlib 柱状图 添加平均线
  20. 关于平面图到对偶图的转化

热门文章

  1. linux的驱动开发——交叉编译器
  2. maven安装与项目创建
  3. daz模型导入marvelous_传世工坊自制Daz Studio 4.10 系列入门教程
  4. spoon无法初始化至少一个步骤_手机怎么设置无线路由器 手机设置无线路由器步骤【详解】...
  5. python关系运算符和逻辑运算符的优先级_python中逻辑运算符的优先级问题
  6. python是后端语言还是前端语言_从前端到后台-语言选择
  7. C语言二维数组找出交集,【leetcode C语言实现】剑指 Offer 04. 二维数组中的查找...
  8. openMP的简单使用
  9. 安卓逆向_15( 二 ) --- Android Studio 3.6.3 JNI 环境配置 和 so 生成开发 demo
  10. Hack.Chat 在浏览器里快速建立简单、随用即丢线上聊天室,无须下载安装软体