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

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

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

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

热门Java问题

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

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

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

最后的想法

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/346100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sequelize连接mysql_node.js通过Sequelize 连接MySQL

node.js通过Sequelize 连接MySQL一.通过koa2脚手架构建项目1.1 安装koa-generator在终端输入&#xff1a;$ npm install -g koa-generator11.2 使用koa-generator生成koa2项目$ koa2 HelloKoa21成功创建项目后&#xff0c;进入项目目录&#xff0c;并执行npm install命令$ cd H…

杀java_java怎么杀掉java进程

展开全部java中有调用外部程序的e69da5e887aa62616964757a686964616f31333337623431类&#xff0c;Runtime.getRuntime().exec("./**.exe");此函数返回的是一个Process 对象&#xff0c;该对象在创建后&#xff0c;可以对它进行 destroy () 杀掉子进程、 waitFor () …

高级java开发_我最喜欢的Java高级开发人员书籍

高级java开发我上一篇博客文章 &#xff08;我对高级Java开发人员的十个最喜欢的在线资源&#xff09;的想法&#xff0c;是由Xiaoran Wang发表的“面向高级Java开发人员的十大网站”的启发。 Wang还写了一篇名为“面向Java高级开发人员的十大书籍”的文章。 就像关于高级Java开…

Optional.isEmpty()在JDK 11 EA构建中可用

我最近发布的问题“ Optional.isEmpty&#xff08;&#xff09;即将加入Java吗&#xff1f; ”是由名为“ RFR&#xff1a;8184693 &#xff1a;&#xff08;选择&#xff09;添加Optional.isEmpty ”的core-libs-dev邮件列表帖子提示的。 当前的JDK 11 Early Access构建 &…

camera.swf java_java调用摄像头保存图片上传功能

在项目中要用到jsp页面实现网页采集摄像头图像&#xff0c;并实现上传的功能&#xff0c;页面主要js调用的&#xff0c;所以可以使用多种语言php,asp等都可以使用&#xff0c;而且是跨浏览器的。可以整合的到SSH项目中和struts1或者struts2项目中使用方法1&#xff1a;下载 pri…

java list 字段去重_如何实现java8 list按照元素的某个字段去重

list 按照元素的某个字段去重DataAllArgsConstructorNoArgsConstructorpublic class Student {private Integer age;private String name;}测试数据List studentList Lists.newArrayList();studentList.add(new Student(28, "river"));studentList.add(new Student(…

cassandra使用心得_使用Cassandra和Nutch爬网

cassandra使用心得因此&#xff0c;您想从互联网上收集大量数据吗&#xff1f; 有什么比Cassandra更好的存储机制&#xff1f; 使用Nutch可以轻松做到这一点。 人们经常在Nutch后面使用Hbase。 这可行&#xff0c;但是如果您是&#xff08;或想成为&#xff09;Cassandra商店&…

java 北理工 教材_北理工《Java技术与应用》在线作业

北理工《Java技术与应用》在线作业可以代做所有奥鹏平台的作业、小论文、毕业论文、离线作业、考核作业、在线作业、在线测试&#xff0c;有需要的请联系本人一、单选题(共 20 道试题&#xff0c;共 40 分。)V1. Socket对象中____函数获取远程端口。A. getPort( )B. getLocalPo…

占用内存的Enum.values()方法

我是Java 枚举的忠实拥护者 。 似乎我们一直在等待获得它&#xff0c;但是当我们最终获得它&#xff08; J2SE 5 &#xff09;时&#xff0c;该枚举比C和C 提供的枚举要好得多&#xff0c;在我看来&#xff0c;这“ 值得等待” 。 与Java enum一样好&#xff0c;它也不是没有问…

Apache Spark Job的剖析

Apache Spark是通用的大规模数据处理框架。 了解spark如何执行作业对于获取大部分作业非常重要。 关于Spark评估范式的简短回顾&#xff1a;Spark使用的是惰性评估范式&#xff0c;在该范式中&#xff0c;Spark应用程序在驱动程序调用“ Action”之前不会执行任何操作。 惰性…

scala本地调试_如何编写自己的Java / Scala调试器

scala本地调试在本文中&#xff0c;我们将探讨Java / Scala调试器的编写和工作方式。 诸如Windows的WinDbg或Linux / Unix的gdb之类的本机调试器通过操作系统直接提供给它们的钩子来获取其功能&#xff0c;以监视和操纵外部进程的状态。 JVM充当OS之上的抽象层&#xff0c;它提…

java content()_Java contentEquals() 方法

全屏Java contentEquals() 方法contentEquals() 方法用于将将此字符串与指定的 StringBuffer 比较。语法public boolean contentEquals(StringBuffer sb)参数sb -- 要与字符串比较的 StringBuffer。返回值如字符串与指定 StringBuffer 表示相同的字符序列&#xff0c;则返回 tr…

java 加法 溢出_StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~

阅读本文大概需要 2 分钟。作者&#xff1a;Aaron_涛问题在之前刷题的时候遇见一个问题&#xff0c;需要解决int相加后怎么判断是否溢出&#xff0c;如果溢出就返回Integer.MAX_VALUE解决方案JDK8已经帮我们实现了Math下&#xff0c;不得不说这个方法是在StackOverflow找到了的…

通过这5个简单的技巧减少GC开销

编写代码的五种简单方法&#xff0c;可提高内存效率&#xff0c;而无需花费更多时间或降低代码可读性 垃圾回收会为您的应用程序增加多少开销&#xff1f; 您可能不知道确切的数字&#xff0c;但您确实知道总有改进的余地。 尽管自动GC是最有效的过程&#xff0c;但是如果它过…

xml 数字签名 破解_JAVA中带有数字签名的XML安全性

xml 数字签名 破解介绍 如您所知&#xff0c;XML在我们的产品或项目开发中起着重要作用&#xff0c;并且从XML文档中我们收集了很多信息&#xff0c;并且我们可以对XML文件执行CRUD操作。 但是&#xff0c;关于如何确保XML文件中可用的数据是真实的以及数据来自受信任的可靠来源…

centos 远程安装java程序_centos7远程服务器中redis的安装与java连接

1.下载安装redis在远程服务器中你想下载的位置执行以下命令来下载redis文件到服务器中$ wget http://download.redis.io/releases/redis-4.0.9.tar.gz说明&#xff1a;$是指你的当前目录&#xff0c;不是命令的一部分&#xff0c;wget命令用来下载网上资源&#xff0c;后面的地…

内部简单二进制编码(SBE)

SBE是用于金融行业的非常快速的序列化库&#xff0c;在本博客中&#xff0c;我将介绍一些使其快速发展的设计选择。 序列化的全部目的是对消息进行编码和解码&#xff0c;并且有很多可用的选项&#xff0c;从XML&#xff0c;JSON&#xff0c;Protobufer&#xff0c;Thrift&…

mingw64 下 java_在 Windows 10 64 位下安装 Mingw-w64

1、MinGW 的全称是&#xff1a;Minimalist GNU on Windows 。打开网址&#xff1a;http://www.mingw-w64.org/doku.php/download &#xff0c;选择 MingW-W64-builds。如图1图12、下载包名&#xff1a;mingw-w64-install.exe。安装时报错&#xff1a;Cannot download repositor…

java实现layui分页_layui如何实现数据分页功能

我们先来看下官网的演示画面。具体代码&#xff1a;页面引入layui.css、 layui.js前台jsvar limitcount 10;var curnum 1;//列表查询方法function productsearch(productGroupId,start,limitsize) {layui.use([table,laypage,laydate], function(){var table layui.table,la…

java 正则表达式使用_如何用正则表达式杀死Java

java 正则表达式使用我们最近偶然发现了一个我们绝对不了解的现象&#xff1a;您可以使用简单的正则表达式杀死任何Java IDE以及任何Java进程… 回到大学后&#xff0c;我被告知正则表达式&#xff08;称为正则语法或3型语法&#xff09;总是以有限状态的自动机结束&#xff0…