java误解问题_关于Java的10个误解
下面的这些都算是比较高级的问题了,面试中一般也很少问到,因为它们可能会把面试者拒之门外。不过你可以自己找个时间来实践一下。
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); // 可以通过方法来修改这个实例,但不能改变引用
3. Java的内存泄露跟C++程序员理解的一样
内存泄露在维基百科上的定义是”在计算机科学中,如果程序没有正确地管理好内存分配
,就会出现内存泄露。在面向对象编程中,如果内存中的一个对象无法在代码中访问不到的话,这就是内存泄露。”
不过在Java中,对象总是可达的,那些没有强引用的对象会被清除掉。内存泄露这个术语在Java中意味着:内存中存在着不该存在的对象,通常来说是有些不再使用的资源却仍存储在集合中。
4. 多线程编程很难
如果你没有经验的话,多线程编程的确很难。如果你只是把一堆代码扔到一堆线程中去执行,那样出了问题根本没法解决,只能是一团糟。
但如果你能进行线程的按需分配,控制线程间的交互,使用一些团队中的成员也能明白的简单的模式,问题就变得简单多了。当然还有一个挑战就是你得让团队中的所有人都遵循你的这个规则:-)
5. 不用关心不同操作间性能的不同
最近听说有个问题,它涉及到了整数的相加,内存访问,取模,以及输出到控制台。尽管在这些操作里面,每一个都比前面一个要慢一个数量级,但这哥们就是想优化这里面最快的操作,加法,还用了些更昂贵的操作来替换它。
如果你真的想要优化性能,你最好用一个廉价的操作来替换掉那些昂贵的操作,如果你的瓶颈在硬件这块,比方说要从硬盘里面读取大量的文件,修改软件的代码是没啥用了,因为问题根本
就不在这。
6. 随机数都是随机的
一组特定的随机数就像是某种模式的数字。这个问题我在这篇文章中已经讲到过了。很多人都不相信随机数生成器生成的数字其实是不随机的。
7. 应该尽量避免使用浮点数,因为它们会产生随机错误
对于同一个操作而言,浮点数每次都会产生同样的错误。错误是可预测的,因此也是可控的。如果你清楚你要做的事情是什么,并且坚持使用一些简单的规则,比如说对结果进行舍入操作,那么浮点数出的错也不会比BigDecimal要多,除此之外它的可读性更强,而且效率快了百倍以上(同时产生的垃圾对象也更少了)。
8. 时区是永恒不变的
之所以会有这个误解是因为,随着时间的变化,时区是在改变的。这意味着欧洲/伦敦在新纪元的时候是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。
9. 当你在线程中读取一个非volatile变量时,你最终能读取它更新的那个值。
前几天这个问题在StackOverflow上出现过两回了。一般来说,JIT编译器优化代码的时候会将这个线程没有修改到的非volatile类型的字段进行内联。一旦这个代码被编译了(你可以通过-XX:+PrintCompilation看到),你在另一个线程对这个字段进行的修改它很可能就永远也看不到了。加上随机的同步块或者打印语句可以推迟这个优化的执行,或者扰乱JIT编译器,让它不去执行这个优化。
10. Java面试题都是正确的
有很多Java面试题要么是过时了(超过10年没有更新了,和现在的Java版本已经脱节),要么是误导大家的,甚至可能是错的。不幸的是这些答案都没有检查过就被到处传来传去。
我会参考Stackoverflow上面的答案,因为这里的答案同行审查做的更好些。总的来说,像rose india这样的网站就不要上了,上面的答案的质量差的离谱。存在这些问题的一个原因在于没有一个有效的反馈机制来纠正这些错误。
本文标题:关于Java的10个误解
本文链接:https://www.toobug.cn/post/448.html
作者授权:除特别说明外,本文由 toobug 原创编译并授权 TOOBUG信息安全网 刊载发布。
版权声明:本文不使用任何协议授权,您可以任何形式自由转载或使用。
用TOOBUG官方小程序阅览更加简洁
java误解问题_关于Java的10个误解相关推荐
- java 数组 反射_【译】10. Java反射——数组
===================================================================================== 用Java反射来处理数组有时 ...
- java核心教程_核心Java教程
java核心教程 Welcome to Core Java Tutorial. I have written a lot on Core Java and Java EE frameworks. Th ...
- java array缓存_有java数组
[JAVA零基础入门系列]Day10 Java中的数组 [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 D ...
- java 分割一个_分割java
[java]分割字符串工具类,霸气 jdk自带的 java 分割字符串,分割string,可以根据多个条件去分割.比如逗号,分号,逗号或者分号. 比如一个字符串:"abc,def;gh,ij ...
- java 字符串包_包java字符串
Java核心技术卷I基础知识3.6.3 不可变字符串 3.6.3 不可变字符串 String类没有提供用于修改字符串的方法.如果希望将greeting的内容修改为"Help!",不 ...
- 云南大学软件学院java实验九_云南大学java实验9
java实验 (9) 6页 2下载券 Java实验9 4页 2下载券 JAVA实验9 7页 1下载券 java 实验9 暂无评价 1页 免费 Java上机实验9 4页 免费 云大JAVA 实验9图形. ...
- java初始化数据报_初始化java原因
虚拟机的类加载机制 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类 即虚拟机的类加载机制. 在Java中,类型的加载.链接 ...
- java swing计算机_使用java swing仿window7标准计算器界面
完整代码 ----- package com.lfd.view; import java.awt.BorderLayout; import java.awt.Color; import java.aw ...
- java 数据结构实例_数据结构(Java)——栈的实例
惟大英雄能本色,是真名士自风流 --易中天(百家讲坛) 1.表达式的转换 1.1 中缀表达式转前缀表达式 中缀表达式转前缀表达式有许多的方式,有加括号去除法.语法树遍历法.堆栈处理法1. 测试程序的实 ...
最新文章
- 【django轻量级框架】(Python3.6.8+Django2.0)第一个Django项目与基础环境搭建
- DevExpress ChartControl大数据加载时有哪些性能优化方法
- php递归函数return会出现无法正确返回想要值的情况
- 接口传参为formData类型,实现文件/图片上传功能
- [leetcode]102.二叉树的层序遍历
- ae toolbarcontrol运行时没有_想办法让AE跑起来
- Andros系列排爆机器人原理_中国製造2025系列M之二:高档数控机床和机器人
- CDQZ_Training 2012-05-24 聪明的打字员
- UI设计超干货素材!小图标里的大学问!
- day02.1 爬取豆瓣网电影信息
- 解决“Macbook外接显示器后键盘音量键无法使用以及Numlock失效”的问题
- Redisson分布式锁学习总结:RedissonMultiLock 如何同时锁住N个资源
- 图片拼图微信小程序源码下载支持多模板制作和流量主
- 微信公众号背景音乐自动播放
- dp 最佳加法表达式
- 初始化Linux数据盘(fdisk)
- Cowboy 用户指南 (二) - Erlang and the Web
- Android固件简介
- http://hi.baidu.com/megachan/blog/item/61e1bb6cb7ab2de64316941b.html
- 阿里视频云点播解决方案,直播转点播最佳实践
热门文章
- html页面手机端console,GitHub - MobileHTML5/vConsole: 一个针对手机网页的前端 console 调试面板。...
- html 右下角弹窗,javascript实现的右下角弹窗实例
- linux 报错 E: 无法定位软件包 python-lzma
- python去掉txt文件行尾换行
- Python操作excel文件创建workbook和批量创建Sheet
- Python 中引入多个模块,包的概念
- android另开进程,android在一个app程序中,打开另一个app的方法
- 考研预报名一直显示服务器错误,2021考研预报名 | 往年预报名出错的同学,问题出在这里!...
- C语言sprintf函数(发送格式化输出到 str 所指向的字符串)(format 标签属性)(字符串拼接)(数字转字符串、浮点数转字符串)
- 如何遍历numpy数组?