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

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

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

最后的想法

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

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

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

堆栈溢出 java

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

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

相关文章

Java 的面向接口编程

假设有这样的代码&#xff1a; F f new G(); f.do(); f.cook(); ...F 是一个接口&#xff0c;G 是 F 的一个实现类&#xff08;也叫具体类/派生类&#xff09;。 如果现在需要另外一个实现类 H 采用其他技术实现接口 F 的所有抽象方法&#xff0c;那么只要修改一条代码&…

mysql 表数据diff,mysqldiff使用笔记

背景手上有个项目&#xff0c;有三个环境:本地开发,测试环境,线上环境&#xff0c;历史原因怀疑数据库表字段可能出现不匹配&#xff0c;所以寻找合适的工具比较数据库表结构。找到了mysqldiff。准备工具正好手上有台windows机器&#xff0c;使用windows版本测试安装mysqldiff是…

java超出gc开销_通过这5个简单的技巧减少GC开销

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

JSTL(Java 标准标签库)

文章目录JSTL 简介JSTL 可以使用在哪里JSTL 使用步骤使用标签if 语句选择语句迭代遍历语句URL重写设置属性值删除属性值异常捕获导入其它 JSP 页面重定向输出指定的值JSTL 简介 Java Standard Taglib(Java 标准标签库)。 JSTL 是一种代替 JSP 中的 Java 代码的技术。sun 公司…

php hash代码下载,PHP中的哈希表 hash_insert

[php]代码库int hash_insert(HashTable *ht, char *key, void *value){// check if we need to resize the hashtableresize_hash_table_if_needed(ht); // 哈希表不固定大小&#xff0c;当插入的内容快占满哈表的存储空间// 将对哈希表进行扩容&#xff0c; 以便容纳所有的元素…

跟踪React流–将Spring Cloud Sleuth与Boot 2结合使用

Spring Cloud Sleuth在OpenZipkin Brave的基础上增加了对Spring工具的支持&#xff0c; 从而使Spring Boot应用程序的分布式跟踪变得异常简单。 这是关于使用此出色的库添加对分布式跟踪的支持所需内容的简要介绍。 考虑两个应用程序–一个使用上游服务应用程序的客户端应用程…

JDK命令之java -- 用来执行字节码文件,即用来执行Java程序

文章目录一、命令介绍二、用法格式三、常用选项四、常用选项详解-client&#xff0c;-server-hotspot-classpath,-cp-classpath-Dvalue-verbose[:class|gc|jni]-verbose:gc-verbose:jni-version-showversion-ea[:...|:] 和 -enableassertions[:...|:]-da[:...|:] 和 -disableas…

php中双引号的区别,PHP中单引号和双引号的区别

好久没有写博客了&#xff0c;都忘了积累知识啦……现在开始全新的生活&#xff0c;重拾记录的习惯。今天要写的就是PHP中单引号和双引号的区别。在PHP中&#xff0c;我们可以使用单引号或者双引号来表示字符串。不过我们作为开发者&#xff0c;应该了解其中的区别。一、字符串…

sbe 详解_内部简单二进制编码(SBE)

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

php调用swf文件上传,swfupload-jquery-plugin AJAX+PHP 文件上传

var listitem>file.name (Math.round(file.size/1024) KB)>>>Pending;$(#log).append(listitem);$(this).swfupload(startUpload);})//绑定开始上传文件事件.bind(uploadStart, function(event, file){$(#log li#file.id).find(p.status).text(Uploading...);$(#lo…

aws lambda使用_使用AWS Lambdas扩展技术堆栈

aws lambda使用面对现实吧。 调试性能问题很困难&#xff0c;但是更难解决。 假设您发现了有害的代码&#xff0c;这些代码正在拖慢您的应用的运行速度。 最终会有一段时间&#xff0c;您发现此代码减速是同步的或线性执行的。 解决这些有问题的代码段的最有效方法之一就是将最…

Java声明定义抽象类/接口/继承/实现

文章目录声明定义抽象类声明定义接口派生类、抽象类、接口的继承要点声明定义抽象类 public abstract class CRMSystem {public abstract Client add(Client newGuy); //添加用户方法public abstract Event add(Event e, Client guy); //重载添加事件、用户方法public abstrac…

cuba开发_使用CUBA进行开发–与Spring相比有很大的转变?

cuba开发阅读另一个供内部公司使用的Web项目的要求时&#xff0c;您&#xff08;至少是我自己&#xff09;通常会看到一个很普通的集合&#xff1a;定义明确的数据存储结构&#xff08;或有时是现有的旧数据库&#xff09;&#xff0c;大量的数据输入形式&#xff0c;非常复杂的…

imagettftext php7,mac php7 imagettftext

Mac OS X 自带PHP环境gd库安装扩展freetype问题&#xff1a; “Call to undefined function imagettftext()”解决方法&#xff1a;curl -s [http://php-osx.liip.ch/install.sh](https://link.jianshu.com/?thttp://php-osx.liip.ch/install.sh) | bash -s 7.3sudo vim ~/.ba…

图片授权模式

RM、RF、PE是3种不同的图片授权模式&#xff0c;由图片卖家设定&#xff0c;图片买家根据自己的需要来进行选择。这三种模式是图片行业在发展过程中&#xff0c;经过对图片用户需求的不断总结而确定的。摄影师可以根据自己的销售意愿&#xff0c;在编辑图片的时候&#xff0c;对…

java线程池延期执行一次_Java使用者的延期执行

java线程池延期执行一次在前面的博客文章&#xff08;“ 延迟执行Java的供应商 “&#xff09;&#xff0c;我引用礁HORSTMANN的陈述书中‘ 的Java SE8为真的很急关于lambda表达式’&#xff0c;‘所有的lambda表达式的点被推迟执行 。’ Horstmann在最后一年为Dobb博士的杂志写…

python时间序列数据分析,Python数据分析之时间序列

Python数据分析之时间序列发布时间&#xff1a;2020-07-10 06:56:27来源&#xff1a;51CTO阅读&#xff1a;808作者&#xff1a;up4ever1. 时间序列类型时间戳(timestramp)即特定的时刻固定时期(period)如2018年1月或2018年1月1日时间间隔(interval)由起始和结束时间戳表示2. P…

java jdk 序列化_JDK 11:Java序列化的终结开始了吗?

java jdk 序列化在博客文章“ 将Google的协议缓冲区与Java结合使用 ”中&#xff0c;我引用了乔什布洛赫&#xff08;Josh Bloch&#xff09;的第三版的有效Java &#xff0c;他写道&#xff1a;“没有理由在您编写的任何新系统中使用Java序列化。” Bloch建议使用“跨平台结构…

php+ksort+返回true,PHP preg_replace函数

mixed preg_replace( mixed pattern, mixed replacement, mixed subject [, int limit] )在PHP中用来执行正则表达式的匹配以及替换的函数。可以返回一个正则表达式转换后的值。在subject中搜索pattern模式的匹配项&#xff0c;并用replacement模式进行替换。如果指定了 limit&…