堆栈溢出 java

您不应该错过的堆栈溢出问题集合:

这不是秘密; 我们都使用堆栈溢出。 它拥有生命,宇宙和几乎所有与代码相关的答案。 该平台为开发人员,工程师和其他人员提供了一个找到他们所面临问题的答案的地方,或者至少使他们处于解决方案的正确轨道上。

Java是Stack Overflow上最受欢迎的类别之一,总共提出了将近150万个问题,并且每天增加数百个问题。 它为您在日常任务中偶然发现的问题提供了一些非常有趣的答案,以及对您不知道应该问的问题的答案。

我们总是可以学习到一些新东西,而这正是我们决定要寻找的东西:对我们所不知道的问题的有趣答案。 让我们来看看。

Java难题

堆栈溢出是寻找答案的地方,但它也是解决更多问题和谜语的好地方。 来自荷兰的软件开发人员Kevin Cruijssen发表了以下问题:

为什么array [idx ++] + =“ a”在Java 8中增加一次idx,在Java 9和10中增加两次?

为了证明这一点,他创建了以下代码:

import java.util.*;
public class Main {public static void main(String[] args) {int size = 3;String[] array = new String[size];Arrays.fill(array, "");for(int i = 0; i <= 100; ) {array[i++%size] += i + " ";}for(String element: array) {System.out.println(element);}}
}

在Java 8中运行它,我们得到以下输出:

1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70 73 76 79 82 85 88 91 94 97 100
2 5 8 11 14 17 20 23 26 29 32 35 38 41 44 47 50 53 56 59 62 65 68 71 74 77 80 83 86 89 92 95 98 101
3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99

但是,在Java 10中,我们得到以下信息:

2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102
2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100

在继续阅读之前,您可以尝试猜测这里发生了什么吗? 是什么导致了版本之间的不同输出的神秘Java属性?

准备不知所措:这是javac中的一个错误,该错误始于JDK9。根据正式的错误报告,当对字符串操作数应用“ + =”时,可能会产生一些副作用,如上面的代码所示。

乔恩·韦尔尼 ( Jorn Vernee )将此答案向前迈了一步,并查看了该行的相应字节码:

array [i ++%size] + = i +”“;

这是输出:

21: aload_222: iload_323: iinc          3, 126: iload_127: irem28: aload_229: iload_330: iinc          3, 133: iload_134: irem35: aaload36: iload_337: invokedynamic #5,  0 // makeConcatWithConstants:(Ljava/lang/String;I)Ljava/lang/String;42: aastore

从好的方面来看,此问题已得到修复,并将与其他一些不错的功能一起在JDK 11中进行部署。

NullPointerException的重要性

您花了多少时间浏览日志,试图查找异常并处理它们? 我们已经知道答案了-太久了。 确实,Stack Overflow提供了一个地方,在这里我们可以咨询和搜索有关问题的正确答案,并且在大多数情况下,某些人过去已经遇到过同样的问题。

开发人员遇到的最常见的异常之一是NullPointerException。 实际上,这是Java生产环境中最常见的例外。 一个引起我们注意的问题是有人试图通过问“ 什么是NullPointerException,以及如何解决它? ”来找到问题的根本原因。 。”

票数最高的答案将其分解为步骤,因此更容易理解过程中发生的情况。 它首先声明一个对象的指针,再声明一个引用变量。

Integer num;
num = new Integer(10);

第一行是指针,由于我们没有说明要指向的内容,因此Java将其设置为null。 仅在第二行中创建对象类型Integer并将指针变量num分配给该对象。

在声明变量但未创建对象之后,在第一行发生NullPointerException。 如果在创建对象之前尝试取消引用num,则将得到NullPointerException。 在大多数情况下,编译器会发现问题,并告诉您“ num可能尚未初始化”,但有时您编写的代码不会直接创建该对象。

你怎么解决呢? Stack Overflow上最受关注的方法之一是在整个代码中添加空检查。 但是,您最终将获得太多如下所示的代码行:

if (someobject != null) {someobject.doCalc();
}

同样, Stack Overflow可以帮助我们提高此代码的效率。 在合同无效的情况下,或者在代码无效的情况下,在代码中检查null是有意义的。

第一个建议很简单:不要使用null作为响应。 但是,如果null为有效响应,则必须对其进行检查。 使用返回集合的方法会更容易。 我们可以返回空集合(或数组)而不是null。

如果不使用集合,则可以使用Null Object模式。 在此模式中,我们使用一个实现预期接口的对象,其方法主体为空。 要将其放入代码中,请进行以下比较:

Parser parser = ParserFactory.getParser();
if (parser == null) {// now what?// this would be an example of where null isn't (or shouldn't be) a valid response
}
Action action = parser.findAction(someInput);
if (action == null) {// do nothing
} else {action.doSomething();
}

对此:

ParserFactory.getParser().findAction(someInput).doSomething();

如果这是我们提到的第二种情况,null不是有效响应,则可以使用assert语句。 因此,它看起来像这样:

assert <condition>
//or
assert <condition> : <object>

您还可以通过其他方法来处理NullPointerExceptions以及为何它如此重要的解释- 看看 。

Java 10中的局部变量类型推断

Java 10中最受关注的更改之一是引入了局部变量类型推断,这为Java添加了一些语法糖–简化了语法并改善了开发人员的体验。

Java 10允许我们声明变量而不必指定关联的类型。 所以:

List<String> list = new ArrayList<String>();
Stream<String> stream = getStream();

将被以下新的简化语法取代:

var list = new ArrayList();
var stream = getStream();

这种变化导致了一个有趣的问题。 Kotlin和Java中的var有什么区别? 正如阿列克谢·罗曼诺夫(Alexey Romanov)解释的那样,它们的含义有很大不同。

在Kotlin中,var表示“这是一个可变变量”,并且可以在推断类型和显式类型时使用。 另一方面,var在Java中的含义是“这是具有推断类型的变量”,并且可用于可变变量和最终变量。

最重要的是,Java中的var只能用于局部变量。 而Kotlin中的var也用于属性。

最后的想法

堆栈溢出不仅仅是一个问答站点。 这是一个社区,人们可以互相帮助,进行热烈的讨论,然后开始玩乐。

如果您需要一段代码的帮助或遇到无法解决的有趣谜语,那么这是理想的选择。 这些问题仅占您所能找到的一小部分,如果您已经看到值得认为的问题,我们想知道! 在下面的评论中发布您最喜欢的答案或未回答的问题。

翻译自: https://www.javacodegeeks.com/2018/07/stack-overflow-top-java-questions.html

堆栈溢出 java

堆栈溢出 java_堆栈溢出回答了我们所不知道的Java首要问题相关推荐

  1. 堆栈溢出回答了我们不知道的Java首要问题

    您不应该错过的堆栈溢出问题集合: 这不是秘密: 我们都使用堆栈溢出. 它掌握了生命,宇宙以及几乎所有与代码相关的内容的答案. 该平台为开发人员,工程师和其他人员提供了一个找到他们所面临问题的答案的地方 ...

  2. 从函数调用过程中的堆栈变化理解缓冲区溢出

    一.说明 本来是想直接写一个缓冲区溢出的例子,但是一是当前编译器和操作系统有溢出的保护措施没有完全弄清怎么取消,二是strcpy等遇到00会截断需要进行编码这比较难搞,所以最终没有实现. 但已经双看了 ...

  3. 内存溢出和堆栈溢出_使用堆栈溢出的最佳和最差方法

    内存溢出和堆栈溢出 Stack Overflow is an incredible collection of programming and software knowledge. Thousand ...

  4. javascript 堆栈_JavaScript调用堆栈-它是什么以及为什么它是必需的

    javascript 堆栈 The JavaScript engine (which is found in a hosting environment like the browser), is a ...

  5. c++ c6386 缓冲区 溢出_Office 远程溢出漏洞测试与分析

    本文作者:ghostkeeper(信安之路首次投稿作者) 获得奖励:加入信安之路核心群+免费邀请加入信安之路知识星球+免费获取 90sec 论坛邀请码 在 2017 年 11 月,微软发布的 11 月 ...

  6. java 内存 溢出_java内存溢出的几种原因和解决办法是什么?

    java内存溢出的几种原因和解决办法是什么? java内存溢出的几种原因和解决办法是: 第一类内存溢出,也是大家认为最多,第一反应认为是的内存溢出,就是堆栈溢出: 那什么样的情况就是堆栈溢出呢?当你看 ...

  7. 软件安全实验——pre6(整数溢出、堆溢出、栈溢出漏洞预习)

    这里写目录标题 一级目录 1.阅读Basic Integer Overflows 这篇文章,大概描述整数溢出的原因和危害. 2.阅读堆溢出的文章Once upon a free()... 3.(一定要 ...

  8. linux信号机制 - 用户堆栈和内核堆栈的变化【转】

    转自:http://itindex.net/detail/16418-linux-%E4%BF%A1%E5%8F%B7-%E5%A0%86%E6%A0%88 此文只简单分析发送信号给用户程序后,用户堆 ...

  9. 【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )

    文章目录 一. 安卓应用任务栈管理 二. 任务与返回堆栈回顾 三. 返回堆栈清除 四. 关于亲和性回顾 五. Activity 启动模式 LaunchMode 补充 ( standard | sing ...

最新文章

  1. 微软旷视人脸识别100%失灵!照片「隐身衣」,帮你保护照片隐私数据
  2. OpenCV的支持向量机SVM的程序
  3. 回馈粉丝,送30本技术书。
  4. 如何用命令隐藏文件夹
  5. Angularjs实现下拉框自动匹配键值对对象技巧
  6. Java偏向锁、轻量级锁、重量级锁
  7. 蓝桥杯c语言a组省赛试题及答案,2016-蓝桥杯-省赛-C语言大学A组全部真题.doc
  8. javascript提醒
  9. 优先队列priority_queue的比较函数
  10. 提升数据建模的10种技术措施
  11. 线程生命周期与创建线程的多种方式
  12. 台式电脑怎么组装步骤_台式电脑组装教程图解,手把手教您组装(零基础也能搞定)...
  13. Collecting stars
  14. ubuntu shuru zhic
  15. 【软开云】基于华为软开云用敏捷思想管理项目团队一点思路(2)
  16. Adobe Reader无法将数值DisableExceptionChainValidation写入键
  17. 【Blog】解决CSDN博客修改头像后依旧显示默认头像问题的方法
  18. centos 安装scp
  19. 5 JMeter断言-Jmeter响应中出现乱码时
  20. 计算机系技能比赛黑板报,关于技能比武主题的黑板报

热门文章

  1. [2021-07-19 内测NOIP] 操作(状压DP),异或(字典树),等级(线段树),矩阵(DP)
  2. ssl2645-线段树练习2【线段树】
  3. [集训队作业2018] 三角形(贪心,堆,线段树合并)
  4. Shell变量的初始值赋值
  5. BATJ面试必会|Jvm 虚拟机篇
  6. 面试-线程池的成长之路
  7. 【php】正则无法截取\反斜杠的解决方法
  8. 【Css】基础属性(一)
  9. java中的泛型类型擦除
  10. ssm(Spring+Spring mvc+mybatis)Dao层实现类——DeptDaoImpl