<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Java - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Java - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 23 May 2026 08:28:45 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/java/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Ep. 1 刘睿（牧云踏歌）：从编程中找到乐趣，用程序员的思维指导生活 ]]>
                </title>
                <description>
                    <![CDATA[ 这是 freeCodeCamp 中文播客第一期，非常感谢大家收听！在这个播客中，开发者、技术内容创作者等等科技从业者们将分享学习经验和职业发展经历，以及对于行业的见解，相信这些故事会带给你启发和动力。 我们这一期的嘉宾是 Java 工程师刘睿。1999 年，在刘睿读初中时，喜欢尝试新东西的父亲花了好几个月工资给家里买了一台电脑，自己探索学习编程，研究各种软件。父亲的学习热情也影响了他对计算机和编程产生兴趣。 刘睿和他的女儿在读大学选择专业的时候，刘睿并没有选择当时不热门的计算机专业，但是因为高考分数不够高，被调剂到计算机专业，开始了真正的编程学习之旅，并且自学 Java。 大学时他曾做过社团主席，但是因为没有学位证，在很长一段时间极度不自信，甚至在最初找工作时他只想当个网管。后来，他通过不断摄取知识，重拾自信，在职业发展中逐渐从公司最边缘的开发者成长为上市公司的软件架构师。 刘睿有 15 年 Java 开发经验。在业余时间，他热爱阅读，坚持每天学习，发布了很多关于学习、求职、工作和生活各种主题的视频。同时，他在 freeCodeCamp 社区中写文章、创建视频教程，分享的经验帮 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/interview-liu-rui-enjoy-coding-and-live-with-developer-mindset/</link>
                <guid isPermaLink="false">64c79a6e1071b2066bd03caf</guid>
                
                    <category>
                        <![CDATA[ 播客 ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 自学编程 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Thu, 03 Aug 2023 04:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/08/Chinese--1-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>这是 freeCodeCamp 中文播客第一期，非常感谢大家收听！在这个播客中，开发者、技术内容创作者等等科技从业者们将分享学习经验和职业发展经历，以及对于行业的见解，相信这些故事会带给你启发和动力。</p><p>我们这一期的嘉宾是 Java 工程师刘睿。1999 年，在刘睿读初中时，喜欢尝试新东西的父亲花了好几个月工资给家里买了一台电脑，自己探索学习编程，研究各种软件。父亲的学习热情也影响了他对计算机和编程产生兴趣。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://chinese.freecodecamp.org/news/content/images/2023/07/LumixSync_copy_2022-11-06_065117_0000JpegFile.jpg" class="kg-image" alt="LumixSync_copy_2022-11-06_065117_0000JpegFile" srcset="https://chinese.freecodecamp.org/news/content/images/size/w600/2023/07/LumixSync_copy_2022-11-06_065117_0000JpegFile.jpg 600w, https://chinese.freecodecamp.org/news/content/images/size/w1000/2023/07/LumixSync_copy_2022-11-06_065117_0000JpegFile.jpg 1000w, https://chinese.freecodecamp.org/news/content/images/size/w1600/2023/07/LumixSync_copy_2022-11-06_065117_0000JpegFile.jpg 1600w, https://chinese.freecodecamp.org/news/content/images/size/w2400/2023/07/LumixSync_copy_2022-11-06_065117_0000JpegFile.jpg 2400w" sizes="(min-width: 720px) 720px" width="600" height="400" loading="lazy"><figcaption>刘睿和他的女儿</figcaption></figure><!--kg-card-begin: html--><iframe width="100%" height="180" frameborder="no" scrolling="no" seamless="" src="https://share.transistor.fm/e/3ee7384d" title="嵌入内容" loading="lazy"></iframe><!--kg-card-end: html--><p>在读大学选择专业的时候，刘睿并没有选择当时不热门的计算机专业，但是因为高考分数不够高，被调剂到计算机专业，开始了真正的编程学习之旅，并且自学 Java。</p><p>大学时他曾做过社团主席，但是因为没有学位证，在很长一段时间极度不自信，甚至在最初找工作时他只想当个网管。后来，他通过不断摄取知识，重拾自信，在职业发展中逐渐从公司最边缘的开发者成长为上市公司的软件架构师。</p><p>刘睿有 15 年 Java 开发经验。在业余时间，他热爱阅读，坚持每天学习，发布了很多关于学习、求职、工作和生活各种主题的视频。同时，他在 freeCodeCamp 社区中写文章、创建视频教程，分享的经验帮助了社区中的很多人。</p><p>在这期节目里，他分享了自己的一些鲜为人知的往事，分享他的学习和工作经历，以及如何用程序员的思维指导生活，言谈之间透着哲思。</p><p>如果这期节目让你产生一些共鸣，请记得给我们好评，并把节目分享给更多朋友。</p><p>欢迎在 <a href="https://chinese.freecodecamp.org/">https://chinese.freecodecamp.org/</a> 查看免费的编程学习资源。</p><h2 id="-">更多关于嘉宾的信息</h2><ul><li><a href="https://space.bilibili.com/24370353">bilibili 主页</a></li><li><a href="https://github.com/aruis">GitHub 主页</a></li></ul><h2 id="--1"><strong>主要话题</strong></h2><ul><li>03:28 初中时独立解决游戏 bug</li><li>05:42 编程初体验</li><li>11:30 被调剂到计算机专业</li><li>13:16 大学选专业时考虑的五个维度</li><li>16:32 告别颓废，自学 Java</li><li>18:39 自学编程需要注意加强哪些知识</li><li>24:17 “源码在手，天下我有”</li><li>26:41 打破“不自信”的成长障碍</li><li>28:30 如何保持技术知识的更新</li><li>29:28 给 Java 学习者的建议</li><li>31:20 第一次给知名开源项目贡献代码</li><li>33:05 大厂和小厂招聘的区别</li><li>34:55 即时反馈是从编程中获得的最大乐趣</li><li>37:31 优秀程序员的三个特质</li><li>41:29 程序的本质是什么</li><li>44:42 是否担心被 AI 取代</li><li>48:54 大龄程序员如何克服焦虑</li><li>50:12 开发 iOS 应用督促自己和女儿每天阅读</li><li>53:18 特别想推荐给刚入门编程的人们的一本书</li></ul><h2 id="--2"><strong>提到的资源</strong></h2><ul><li><a href="https://www.freecodecamp.org/chinese/news/java-you-have-not-know-about/">文章《你不知道的 Java》</a></li></ul><!--kg-card-begin: markdown--><ul>
<li>《Java 新手课》视频教程
<ul>
<li><a href="https://www.bilibili.com/video/BV1vo4y127rn/">入门课</a></li>
<li><a href="https://www.bilibili.com/video/BV1Ch411b7qs/">通过编写一个 2048 小游戏学习面向对象相关思想</a></li>
<li><a href="https://www.bilibili.com/video/BV1gg411y7ur/">用 Vert.x 开发简易 Web 聊天室</a></li>
</ul>
</li>
</ul>
<!--kg-card-end: markdown--><ul><li><a href="https://apps.apple.com/hk/app/booktime-%E6%82%A8%E7%9A%84%E9%98%85%E8%AF%BB%E8%AE%A1%E6%97%B6%E4%BC%B4%E4%BE%A3/id1600654269">BookTime - 您的阅读计时伴侣</a></li><li><a href="https://testflight.apple.com/join/qeASLI8d">免费试用链接</a></li><li><a href="https://obsidian.md">Obsidian</a></li><li><a href="https://vertx.io">Vert.x</a></li><li><a href="https://quarkus.io">Quarkus</a></li><li>书籍《程序员修炼之道：从小工到专家》</li></ul> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 在 Java 中如何将整数转换成字符串 ]]>
                </title>
                <description>
                    <![CDATA[ 在 Java 中，你可以用不同的方法将变量从一种数据类型转换为另一种。 在这篇文章中，你将学习如何在 Java 中通过以下方式将整数转换成字符串：  * 使用 Integer.toString() 方法  * 使用 String.valueOf() 方法  * 使用 String.format() 方法  * 使用 DecimalFormat 类 如何在 Java 中使用 Integer.toString() 将整数转换成字符串 Integer.toString() 方法接收要转换的整数作为参数，语法如下： Integer.toString(INTEGER_VARIABLE) 这是一个例子： class IntToStr {     public static void main(String[] args) {   ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-convert-integer-to-string-in-java/</link>
                <guid isPermaLink="false">63c16ff342d274071ebbeb0a</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Chengjun.L ]]>
                </dc:creator>
                <pubDate>Wed, 11 Jan 2023 02:22:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/01/marcel-eberle-rendLSpkDtY-unsplash--1-.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/how-to-convert-integer-to-string-in-java/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Int to String in Java – How to Convert an Integer into a String</a>
      </p><p>在 Java 中，你可以用不同的方法将变量从一种数据类型转换为另一种。</p><p>在这篇文章中，你将学习如何在 Java 中通过以下方式将整数转换成字符串：</p><ul><li>使用 <code>Integer.toString()</code> 方法</li><li>使用 <code>String.valueOf()</code> 方法</li><li>使用 <code>String.format()</code> 方法</li><li>使用 <code>DecimalFormat</code> 类</li></ul><h2 id="-java-integer-tostring-">如何在 Java 中使用 Integer.toString() 将整数转换成字符串</h2><p><code>Integer.toString()</code> 方法接收要转换的整数作为参数，语法如下：</p><pre><code>Integer.toString(INTEGER_VARIABLE)</code></pre><p>这是一个例子：</p><pre><code class="language-java">class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        String AGE_AS_STRING = Integer.toString(age);
        
        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}</code></pre><p>在上面的例子中，我们创建了一个整数——<code>age</code>——并给它赋值为 2。</p><p>为了将 <code>age</code> 变量转换为字符串，我们将其作为参数传递给 <code>Integer.toString()</code> 方法：<code>Integer.toString(age)</code>。</p><p>我们将这个新的字符串值存储在一个名为 <code>AGE_AS_STRING</code> 的字符串变量中。</p><p>然后我们将新的字符串变量与其他字符串连接起来：<code>"The child is " + AGE_AS_STRING + " years old"</code>。</p><p>但是，如果我们只是将年龄变量与这些其他字符串连接，而不进行任何形式的转换，是否会出现错误？</p><pre><code class="language-java">class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        System.out.println("The child is " + age + " years old");
        // The child is 2 years old
    }
}</code></pre><p>上面的输出与我们必须将整数转换为字符串的例子相同。</p><p>那么，我们如何知道类型转换是否真的成功了呢？</p><p>我们可以使用 Java 的 <code>getClass()</code> 对象来检查变量类型，即：</p><pre><code class="language-java">class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        String AGE_AS_STRING = Integer.toString(age);
        
        
        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer
        
        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String
    }
}</code></pre><p>现在我们可以验证，当 <code>age</code> 变量被创建时，它是一个 <code>Integer</code>，经过类型转换，它变成了一个 <code>String</code>。</p><h2 id="-java-string-valueof-">如何在 Java 中使用 String.valueOf() 将一个整数转换成一个字符串</h2><p><code>String.valueOf()</code> 方法也以要转换为字符串的变量为参数。</p><pre><code class="language-java">class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        String AGE_AS_STRING = String.valueOf(age);
        
        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
    }
}</code></pre><p>上面的代码与上一节的代码类似：</p><ul><li>我们创建了一个名为 <code>age</code> 的整数。</li><li>我们把 <code>age</code> 整数作为参数传给 <code>String.valueOf()</code> 方法：<code>String.valueOf(age)</code>。</li></ul><p>你也可以使用 <code>getClass()</code> 对象来检查类型转换是否成功：</p><pre><code class="language-java">System.out.println(((Object)age).getClass().getSimpleName());
// Integer
        
System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String</code></pre><h2 id="-java-string-format-">如何在 Java 中使用 <code>String.format()</code> 将整数转换为字符串</h2><p><code>String.format()</code> 方法接收两个参数：一个格式指定器和要格式化的变量。</p><p>下面是一个例子：</p><pre><code class="language-java">class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        String AGE_AS_STRING = String.format("%d", age);
        
        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
        
    }
}
</code></pre><p>在上面的例子中，我们向 <code>String.format()</code> 方法传入了两个参数：<code>"%d"</code> 和 <code>age</code>。</p><p><code>"%d"</code> 是一个格式指定符，表示要被格式化的变量是一个整数。</p><p><code>age</code> 是第二个参数，将被转换为字符串并存储在 <code>AGE_AS_STRING</code> 变量中。</p><p>你也可以检查转换前后的变量类型：</p><pre><code class="language-java">System.out.println(((Object)age).getClass().getSimpleName());
// Integer
        
System.out.println(AGE_AS_STRING.getClass().getSimpleName());
// String</code></pre><h2 id="-java-decimalformat-">如何在 Java 中使用 DecimalFormat 将整数转换成字符串</h2><p><code>DecimalFormat</code> 类用于在 Java 中格式化十进制数字。你可以用不同的方式来使用它，我们将用它来把一个整数转换为一个字符串。</p><p>下面是一个例子：</p><pre><code class="language-java">import java.text.DecimalFormat;

class IntToStr {
    public static void main(String[] args) {
        
        int age = 2;
        
        DecimalFormat DFormat = new DecimalFormat("#");
        
        
        String AGE_AS_STRING = DFormat.format(age);
        
        System.out.println("The child is " + AGE_AS_STRING + " years old");
        // The child is 2 years old
        
        
        System.out.println(((Object)age).getClass().getSimpleName());
        // Integer
        
        System.out.println(AGE_AS_STRING.getClass().getSimpleName());
        // String
        
    }
}</code></pre><p>让我们把代码分解一下：</p><ul><li>为了能够在上面的例子中使用 <code>DecimalFormat</code> 类，我们导入了它：<code>import java.text.DecimalFormat;</code>。</li><li>我们创建了整数的 <code>age</code> 变量。</li><li>然后我们创建了一个名为 <code>DFormat</code> 的 <code>DecimalFormat</code> 类的新对象。</li><li>使用该对象的 <code>format()</code> 方法，我们将 <code>age</code> 转换为字符串：<code>DFormat.format(age);</code>。</li></ul><h2 id="-"><strong>小结</strong></h2><p>在这篇文章中，我们谈到了在 Java 中把整数转换为字符串。</p><p>我们看到的例子显示了如何使用三种不同的方法——<code>Integer.toString()</code>、 <code>String.valueOf()</code>、<code>String.format()</code>——和 <code>DecimalFormat</code> 类来将变量从整数转换成字符串。</p><p>每个例子都显示了如何在转换前后检查变量的数据类型。</p><p>Happy coding!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何在 Java 中将字符串转换为整数 ]]>
                </title>
                <description>
                    <![CDATA[ 在使用编程语言时，你可能想把字符串转换为整数。一个例子是使用一个字符串变量的值进行数学运算。 在本文中，你将学习如何使用 Integer 类的两个方法——parseInt() 和 valueOf() 在 Java 中把字符串转换成整数。 如何在 Java 中使用 Integer.parseInt 将字符串转换为整数 parseInt() 方法把要转换为整数的字符串作为参数，即： Integer.parseInt(string_varaible) 在看它的使用例子之前，让我们看看当你把一个字符串值和一个整数加在一起而不进行任何形式的转换时会发生什么。 class StrToInt {     public static void main(String[] args) {         String age = "10";        ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-convert-a-string-to-an-integer-in-java/</link>
                <guid isPermaLink="false">6375fc0b7cdd940712f7c7f3</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Chengjun.L ]]>
                </dc:creator>
                <pubDate>Tue, 15 Nov 2022 03:26:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/11/marcel-eberle-rendLSpkDtY-unsplash-1.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/how-to-convert-a-string-to-an-integer-in-java/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">String to Int in Java – How to Convert a String to an Integer</a>
      </p><p>在使用编程语言时，你可能想把字符串转换为整数。一个例子是使用一个字符串变量的值进行数学运算。</p><p>在本文中，你将学习如何使用 <code>Integer</code> 类的两个方法——<code>parseInt()</code> 和 <code>valueOf()</code> 在 Java 中把字符串转换成整数。</p><h2 id="-java-integer-parseint-">如何在 Java 中使用 Integer.parseInt 将字符串转换为整数</h2><p><code>parseInt()</code> 方法把要转换为整数的字符串作为参数，即：</p><pre><code class="language-txt">Integer.parseInt(string_varaible)</code></pre><p>在看它的使用例子之前，让我们看看当你把一个字符串值和一个整数加在一起而不进行任何形式的转换时会发生什么。</p><pre><code class="language-java">class StrToInt {
    public static void main(String[] args) {
        String age = "10";
        
        System.out.println(age + 20);
        // 1020
    }
}</code></pre><p>在上面的代码中，我们创建了一个 <code>age</code> 变量，字符串值为 “10”。</p><p>当与一个整数值 20 相加时，我们得到的是 1020，而不是 30。</p><p>这里有一个使用 <code>parseInt()</code> 方法的快速修复方法：</p><pre><code class="language-java">class StrToInt {
    public static void main(String[] args) {
        String age = "10";
        
        int age_to_int = Integer.parseInt(age);
        
        System.out.println(age_to_int + 20);
        // 30
    }
}</code></pre><p>为了将 <code>age</code> 变量转换为整数，我们将其作为参数传递给 <code>parseInt()</code> 方法——<code>Integer.parseInt(age)</code>——并将其存储在一个名为 <code>age_to_int</code> 的变量中。</p><p>当与另一个整数相加时，我们得到了一个正确的加法：<code>age_to_int + 20</code>。</p><h2 id="-java-integer-valueof-">如何在 Java 中使用 Integer.valueOf 将一个字符串转换成一个整数</h2><p><code>valueOf()</code> 方法的工作原理与 <code>parseInt()</code> 方法相同。它把要转换为整数的字符串作为其参数。</p><p>下面是一个例子：</p><pre><code class="language-java">class StrToInt {
    public static void main(String[] args) {
        String age = "10";
        
        int age_to_int = Integer.valueOf(age);
        
        System.out.println(age_to_int + 20);
        // 30
    }
}</code></pre><p>上述代码的解释与上一节相同：</p><ul><li>我们把字符串作为参数传给 <code>valueOf()</code>: <code>Integer.valueOf(age)</code>。它被存储在一个名为 <code>age_to_int</code> 的变量中。</li><li>然后我们在创建的变量中加入 20：<code>age_to_int + 20</code>。结果值是 30，而不是 1020。</li></ul><h2 id="-"><strong>小结</strong></h2><p>在这篇文章中，我们谈到了在 Java 中把字符串转换为整数。</p><p>我们看到了如何使用 <code>Integer</code> 类的两个方法——<code>parseInt()</code> 和 <code>valueOf()</code> 在Java中把字符串转换为整数。</p><p>Happy coding!</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java 中的二维数组和嵌套数组 ]]>
                </title>
                <description>
                    <![CDATA[ 多维数组只是数组的数组 [https://chinese.freecodecamp.org/news/java-array-how-to-declare-and-initialize-an-array-in-java-example/] 。你可以将其视为存储多个容器的单个容器。 在本文中，我们将讨论 Java 中的二维数组。你将看到创建一个数组的语法，以及如何在二维数组中添加和访问项目。 如何在 Java 中声明一个二维数组 要在 Java 中创建二维数组，你必须指定要存储在数组中的项目的数据类型，后跟两个方括号和数组的名称。 语法如下所示： data_type[][] array_name; 让我们看一个代码示例。 int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} }; 如果你还没有理解上面发生的事情，请不要担心。在下一节中，你将了解有关二维数组如何工作以及如何访问存储在其中的项目的更多信息。 如何在 Java 中访问二维数组中的项目 我们可以使用两个方括号来访问二维中的项目。 第一个表示我们要从中访问项目的数 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/2d-array-in-java-two-dimensional-and-nested-arrays/</link>
                <guid isPermaLink="false">6300eb2960480505ded7a975</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Tue, 16 Aug 2022 14:12:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/08/pawel-czerwinski-dYjFmiQb_aE-unsplash.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/2d-array-in-java-two-dimensional-and-nested-arrays/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">2D Array in Java – Two-Dimensional and Nested Arrays</a>
      </p><p>多维数组只是数组的<a href="https://chinese.freecodecamp.org/news/java-array-how-to-declare-and-initialize-an-array-in-java-example/">数组</a>。你可以将其视为存储多个容器的单个容器。</p><p>在本文中，我们将讨论 Java 中的二维数组。你将看到创建一个数组的语法，以及如何在二维数组中添加和访问项目。</p><h2 id="-java-">如何在 Java 中声明一个二维数组</h2><p>要在 Java 中创建二维数组，你必须指定要存储在数组中的项目的数据类型，后跟两个方括号和数组的名称。</p><p>语法如下所示：</p><pre><code class="language-txt">data_type[][] array_name;</code></pre><p>让我们看一个代码示例。</p><pre><code class="language-java">int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} };</code></pre><p>如果你还没有理解上面发生的事情，请不要担心。在下一节中，你将了解有关二维数组如何工作以及如何访问存储在其中的项目的更多信息。</p><h2 id="-java--1">如何在 Java 中访问二维数组中的项目</h2><p>我们可以使用两个方括号来访问二维中的项目。</p><p>第一个表示我们要从中访问项目的数组，而第二个表示我们要访问的项目的索引。</p><p>让我们用一个例子来简化上面的解释：</p><pre><code class="language-java">int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15} };

System.out.println(oddNumbers[0][0]);
// 1</code></pre><p>在上面的示例中，<code>oddNumbers</code> 数组中有两个数组——<code>{1, 3, 5, 7}</code> 和 <code>{9, 11, 13, 15}</code>。</p><p>第一个数组——<code>{1, 3, 5, 7}</code>——用 0 表示。</p><p>第二个数组——<code>{9, 11, 13, 15}</code>——用 1 表示。</p><p>第一个数组是 0，第二个是 1，第三个是 2，依此类推。</p><p>因此，要访问第一个数组中的项目，我们将 0 分配给第一个方括号。由于我们试图访问数组中的第一项，我们将使用它的索引，即 0：<code>oddNumbers[0][0]</code>。</p><p>让我们进一步分解它。</p><p>这是访问项目的代码：<code>oddNumbers[?][?]</code>。</p><p>我在两个方括号中都加上了问号——我们会随着我们的进展填写它们。</p><p>因此，假设我们要访问第二个数组中用 1 表示的项目，我们的代码将如下所示：<code>oddNumbers[1][?]</code>。</p><p>现在我们在第二个数组（<code>{9, 11, 13, 15}</code>）中，让我们尝试访问其中的一个项目。就像常规数组一样，每个项目都有一个从零开始的索引。</p><p>因此，要访问第三项 <code>13</code>，我们将其索引号传递给第二个方括号：<code>oddNumbers[1][2]</code>。</p><p>在下一节中，我们将从一个新示例开始。</p><h2 id="-java--2">如何在 Java 示例中访问二维数组中的项目</h2><pre><code class="language-java">int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };</code></pre><p>这里的目标是访问第三个数组中的 21。我们的访问代码仍然有问号：<code>oddNumbers[?][?]</code>。</p><p>我们将首先给第一个问号一个指向要访问的特定数组的值。</p><p>数组 0 =&gt; <code>{1, 3, 5, 7}</code><br>数组 1 =&gt; <code>{9, 11, 13, 15}</code><br>数组 2 =&gt; <code>{17, 19, 21, 23}</code></p><p>我们要查找的数字在第三个数组中，数组索引为 2。所以我们找到了第一个方括号的值：<code>oddNumbers[2][?]</code>。</p><p>第二个方括号的值将指向要访问的实际项目。为此，我们必须指定项目的索引号。以下是该数组中的索引：</p><p>17 =&gt; 索引 0<br>19 =&gt; 索引 1<br>21 =&gt; 索引 2<br>23 =&gt; 索引 3</p><p>21 的索引为 2，因此我们可以继续将其添加到第二个方括号：<code>oddNumbers[2][2]</code>。当你将其打印到控制台时，你将打印出 21。</p><p>代码如下所示：</p><pre><code class="language-java">int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };

System.out.println(oddNumbers[2][2]);
// 21</code></pre><p>你可以使用嵌套循环遍历二维数组中的所有项目。这是一个例子：</p><pre><code class="language-java">int[][] oddNumbers = { {1, 3, 5, 7}, {9, 11, 13, 15}, {17, 19, 21, 23} };

for(int i = 0; i &lt; oddNumbers.length; i++){
    for(int j = 0; j &lt; oddNumbers[i].length; j++){
        System.out.println(oddNumbers[i][j]);
    }   
}

// 1
// 3
// 5
// 7
// 9
// 11
// 13
// 15
// 17
// 19
// 21
// 23</code></pre><p>上面的代码打印出 <code>oddNumbers</code> 数组中的所有项目。</p><h2 id="-"><strong>小结</strong></h2><p>在本文中，我们讨论了 Java 中的二维数组。</p><p>我们看到了创建二维数组的语法，还看到了展示如何访问存储在其中的项目的示例。</p><p>最后，我们看到了如何循环并打印二维数组中的项目。</p><p>祝你编程愉快！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java 中的 Hello World 示例程序 ]]>
                </title>
                <description>
                    <![CDATA[ 当你学习一门新的编程语言时，你经常会看到第一个程序叫作 “hello world”。它在大多数情况下是初学者需要写的简单程序。 我假设你是作为 Java 编程语言的初学者阅读本文，或者你是为了回忆古老的 hello world 程序。 本文不仅包括 Java 中的 hello world 程序，我们还将讨论一些初学者学习使用 Java 时应该知道的术语。 要继续进行，你需要一个集成开发环境（IDE）。这是你编写和编译代码的地方。你可以在你的 PC 上安装一个，或者如果你不想完成安装过程，则可以使用任何在线 IDE。 Java 中的 Hello World 程序 在本节中，我们将创建一个简单的 hello world 程序。然后，我们将对其进行分解，以便你了解它的工作原理。 代码如下： class HelloWorld {     public static void main(String[] args) {       ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/hello-world-in-java-example-program/</link>
                <guid isPermaLink="false">62f8c085376dd807bffc4342</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Wed, 10 Aug 2022 09:30:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/08/helloWorld.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/hello-world-in-java-example-program/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Hello World in Java – Example Program</a>
      </p><p>当你学习一门新的编程语言时，你经常会看到第一个程序叫作 “hello world”。它在大多数情况下是初学者需要写的简单程序。</p><p>我假设你是作为 Java 编程语言的初学者阅读本文，或者你是为了回忆古老的 hello world 程序。</p><p>本文不仅包括 Java 中的 hello world 程序，我们还将讨论一些初学者学习使用 Java 时应该知道的术语。</p><p>要继续进行，你需要一个集成开发环境（IDE）。这是你编写和编译代码的地方。你可以在你的 PC 上安装一个，或者如果你不想完成安装过程，则可以使用任何在线 IDE。</p><h2 id="java-hello-world-"><strong>Java 中的 Hello World 程序</strong></h2><p>在本节中，我们将创建一个简单的 hello world 程序。然后，我们将对其进行分解，以便你了解它的工作原理。</p><p>代码如下：</p><pre><code class="language-java">class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!"); 
        // Hello World!
    }
}</code></pre><p>上面示例中的代码将打印 “Hello World！” 到控制台中。这在代码中被注释掉了。我们将很快讨论注释。</p><p>让我们分解代码。</p><h3 id="java-"><strong>Java 中的类</strong></h3><p>类充当 Java 中整个应用程序的构建块。你可以为不同的功能设置单独的类。</p><p>类还可以具有定义类的内容和作用的属性和方法。</p><p>一个例子是 Human 类。它可以具有头发颜色、高度等属性。它可以有跑步、吃饭和睡觉等方法。</p><p>在我们的 Hello World 程序中有一个名为 <code>HelloWorld</code> 的类。作为惯例，始终将类的名称的首字母大写。</p><p>要创建一个类，请使用 <code>class</code> 关键字，后跟类的名称。这是一个使用我们的 Hello World 程序的示例：</p><pre><code class="language-java">class HelloWorld {
    
}</code></pre><h3 id="java-main-"><strong>Java 中的 <code>main</code> 方法</strong></h3><p>每个 Java 程序都必须有一个 <code>main</code> 方法。当 Java 编译器开始执行我们的代码时，它从 <code>main</code> 方法开始。</p><p>这是 <code>main</code> 方法的样子：</p><pre><code class="language-java">public static void main(String[] args) {
        
    }
</code></pre><p>为了使本文保持简单，我们不会讨论上面代码中的其他关键字，例如 <code>public</code>、<code>static</code> 和 <code>void</code>。</p><h3 id="system-out-println-">System.out.println() 语句</h3><p>我们使用 <code>System.out.println()</code> 语句将信息打印到控制台。该语句需要一个参数。参数写在括号之间。</p><p>这是语法：</p><pre><code class="language-txt">System.out.println(Argument) </code></pre><p>在例子中，我们传入了 “Hello World！” 作为参数。你会注意到文本被引号包围。这告诉编译器参数是一个字符串 <code>string</code>。编程中的字符串只是字符的集合——与我们编写常规文本的方式相同，但它们必须用引号引起来。</p><p>这是我们的代码的样子：</p><pre><code class="language-java">class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!"); 
        // Hello World!
    }
}
</code></pre><p>当我们运行此代码时，将打印 “Hello World”。</p><p>我使用 <code>//Hello World！</code>向你展示代码输出。这部分代码不会被编译器执行，因为它是一个注释。</p><p>我们使用两个正斜杠（<code>//</code>）在 Java 中开始单行注释。</p><h2 id="-"><strong>小结</strong></h2><p>在本文中，我们讨论了 Java 中的 Hello World 程序。</p><p>我们从创建程序开始，然后将其分解以了解用于创建程序的每一行代码。</p><p>我们讨论了 Java 中的类、<code>main</code> 方法、<code>System.out.println()</code> 语句、字符串和注释。</p><p>祝你编程愉快！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java 新手课——用 Vert.x 开发简易 Web 聊天室 ]]>
                </title>
                <description>
                    <![CDATA[ Java 是最流行的编程语言之一，已经有超过 25 年的历史。它可以在所有主流的操作系统上运行，并可用于编写 Android 应用程序。 如果你对学习 Java 感兴趣，我们在 freeCodeCamp 中文 YouTube 频道发布了 Java 新手课第三部分——用 Vert.x 开发简易 Web 聊天室。Vert.x 是一个用于在 JVM 上构建响应式应用程序的工具包。 这个教程的作者是牧云踏歌 [https://chinese.freecodecamp.org/news/author/muyuntage/]，他是一位资深的 Java 开发者。在这一个多小时的视频里，他将引导大家理解何谓工程化的 Java 项目开发，以及如何利用已有的 Java 生态，站在巨人的肩膀上完成自己的项目。 教程的内容包括：  * 铺垫  * 使用 gradle 作为构建工具创建项目  * Vert.x 项目开发入门  * 使用 vertx-web 开发 Web 项目 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/java-for-beginner-build-a-simple-web-chat-room-with-vert-x/</link>
                <guid isPermaLink="false">62eb35588d13aa0845c639cd</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Vert.x ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Thu, 04 Aug 2022 03:06:08 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/08/VERTX.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Java 是最流行的编程语言之一，已经有超过 25 年的历史。它可以在所有主流的操作系统上运行，并可用于编写 Android 应用程序。</p><p>如果你对学习 Java 感兴趣，我们在 freeCodeCamp 中文 YouTube 频道发布了 Java 新手课第三部分——用 Vert.x 开发简易 Web 聊天室。Vert.x 是一个用于在 JVM 上构建响应式应用程序的工具包。</p><p>这个教程的作者是<a href="https://chinese.freecodecamp.org/news/author/muyuntage/">牧云踏歌</a>，他是一位资深的 Java 开发者。在这一个多小时的视频里，他将引导大家理解何谓工程化的 Java 项目开发，以及如何利用已有的 Java 生态，站在巨人的肩膀上完成自己的项目。</p><p>教程的内容包括：</p><ul><li>铺垫</li><li>使用 gradle 作为构建工具创建项目</li><li>Vert.x 项目开发入门</li><li>使用 vertx-web 开发 Web 项目</li><li>聊天室代码具体实现</li><li>使用 gradle 插件将程序打包</li></ul><p>你可以点击这个<a href="https://www.bilibili.com/video/BV1gg411y7ur?spm_id_from=333.999.0.0">链接</a>在 bilibili 观看视频。</p><p>你也可以在 YouTube 观看视频：</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/Zf2TJrbZmAU?start=1&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" title="用 Vert.x 开发简易 Web 聊天室" name="fitvid0"></iframe>
          </div>
        </div>
      </figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java Switch 语句 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：Java Switch Statement – How to Use a Switch Case in Java [https://www.freecodecamp.org/news/java-switch-statement-how-to-use-a-switch-case-in-java/] ，作者：Ihechikara Vincent Abba [https://www.freecodecamp.org/news/author/ihechikara/] 当满足特定条件时，你可以使用 Java 中的 switch 语句来执行特定的代码块。 语法如下所示： switch(expression) {   case 1:     // code block     break;   case 2:     // ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/java-switch-statement-how-to-use-a-switch-case-in-java/</link>
                <guid isPermaLink="false">62bd61ef8ada24082688b19e</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Chengjun.L ]]>
                </dc:creator>
                <pubDate>Thu, 30 Jun 2022 08:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/06/jaye-haych-bPOEB3sy4As-unsplash.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/java-switch-statement-how-to-use-a-switch-case-in-java/">Java Switch Statement – How to Use a Switch Case in Java</a>，作者：<a href="https://www.freecodecamp.org/news/author/ihechikara/">Ihechikara Vincent Abba</a></p><p>当满足特定条件时，你可以使用 Java 中的 <code>switch</code> 语句来执行特定的代码块。</p><p>语法如下所示：</p><pre><code class="language-java">switch(expression) {
  case 1:
    // code block
    break;
  case 2:
    // code block
    break;
    case 3:
    // code block
    break;
  default:
    // code block
}</code></pre><p>上面，将 <code>switch</code> 括号中的表达式（<code>expression</code>）与每种情况（<code>case</code>）进行了比较。当 <code>expression</code> 与 <code>case</code> 相同时，执行 <code>case</code> 中对应的代码块。</p><p>如果所有 <code>case</code> 都不匹配 <code>expression</code>，则执行在 <code>default</code> 关键字下定义的代码块。</p><p>每当满足某个条件时（当 <code>expression</code> 与 <code>case</code> 匹配时），我们使用 <code>break</code> 关键字来终止代码。</p><p>让我们看一些代码示例。</p><h2 id="-java-switch-case">如何在 Java 中使用 Switch Case</h2><p>看看下面的代码：</p><pre><code class="language-java">class CurrentMonth {
    public static void main(String[] args) {
        
        int month = 6;
        
        switch (month) {
          case 1:
            System.out.println("January");
            break;
          case 2:
            System.out.println("February");
            break;
          case 3:
            System.out.println("March");
            break;
          case 4:
            System.out.println("April");
            break;
          case 5:
            System.out.println("May");
            break;
          case 6:
            System.out.println("June");
            break;
          case 7:
            System.out.println("July");
            break;
          case 8:
            System.out.println("August");
            break;
          case 9:
            System.out.println("September");
            break;
          case 10:
            System.out.println("October");
            break;
          case 11:
            System.out.println("November");
            break;
          case 12:
            System.out.println("December");
            break;
            
            // June
        }
    }
}</code></pre><p>在上面的代码中，June 被打印出来。不用担心庞大的代码。以下介绍可帮助你理解：</p><p>我们创建了一个名为 <code>month</code> 的整数，并为其分配了一个值 6：<code>int month = 6;</code>。</p><p>接下来，我们创建了一个 <code>switch</code> 语句，并将 <code>month</code> 变量作为参数传入：<code>switch (month){...}</code>。</p><p>作为 <code>switch</code> 语句的表达式，<code>month</code> 的值将与代码中的每个 <code>case</code> 值进行比较。我们有 case 1 到 12。</p><p><code>month</code> 的值是 6，因此它与 <code>case</code> 6 匹配。这就是 <code>case</code> 6 中的代码被执行的原因。其他代码块都被忽略了。</p><p>这是另一个简化的例子：</p><pre><code class="language-java">class Username {
    public static void main(String[] args) {
        
        String username = "John";
        
        switch (username) {
          case "Doe":
            System.out.println("Username is Doe");
            break;
          case "John":
            System.out.println("Username is John");
            break;
          case "Jane":
            System.out.println("Username is Jane");
            break;
            // Username is John
        }
    }
}</code></pre><p>在上面的示例中，我们创建了一个名为 <code>username</code> 的字符串，其值为 “John”。</p><p>在 <code>switch</code> 语句中，<code>username</code> 作为 <code>expression</code> 传入。然后我们创建了三个 <code>case</code>——“Doe”、“John”和“Jane”。</p><p>在这三个类中，只有一个匹配 <code>username</code> 的值——“John”。结果，<code>case "John"</code> 的代码块被执行了。</p><h2 id="-switch-">如何在 switch 语句中使用默认关键字</h2><p>在上一节的示例中，我们的代码被执行是因为一个 <code>case</code> 匹配了一个 <code>expression</code>。</p><p>在本节中，你将了解如何使用 <code>default</code> 关键字。在没有任何 <code>case</code> 与 <code>expression</code> 匹配的情况下，你可以将其用作后备。</p><p>这是一个例子：</p><pre><code class="language-java">class Username {
    public static void main(String[] args) {
        
        String username = "Ihechikara";
        
        switch (username) {
          case "Doe":
            System.out.println("Username is Doe");
            break;
          case "John":
            System.out.println("Username is John");
            break;
          case "Jane":
            System.out.println("Username is Jane");
            break;
          default:
            System.out.println("Username not found!");
            // Username not found!
        }
    }
}</code></pre><p>上例中的 <code>username</code> 变量的值为 “Ihechikara”。</p><p><code>default</code> 关键字的代码块将被执行，因为创建的 <code>case</code> 都不匹配 <code>username</code> 的值。</p><h2 id="-">小结</h2><p>在本文中，我们了解了如何在 Java 中使用 <code>switch</code> 语句。</p><p>我们还讨论了 Java 中 <code>switch</code> 语句的 <code>expression</code>、<code>case</code> 和 <code>default</code> 关键字，以及它们的用例和代码示例。</p><p>祝你编程愉快！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java 数组排序——如何使用 Arrays.sort() 升序或降序排列数组 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：Java Sort Array – How to Reverse an Array in Ascending or Descending Order with Arrays.sort() [https://www.freecodecamp.org/news/java-sort-array-how-to-reverse-an-array-in-ascending-or-descending-order-with-arrays-sort-2/] ，作者：Ihechikara Vincent Abba [https://www.freecodecamp.org/news/author/ihechikara/] 在 Java 中，你使用数组将一组变量（具有相同数据类型）存储在单个变量中。 在许多情况下，存储在数组中的值以随机顺序出现。使用 Java 中的 Arrays 类，你可以访问可用于操作数组的各种方法。 我们将从 Arrays 类中使用的方法之一是 sort() 方法，它按升序对数组进行排序。 我们还将看到如何使用 Java 中 Collections 类的 reverse ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/java-sort-array-how-to-reverse-an-array-in-ascending-or-descending-order-with-arrays-sort/</link>
                <guid isPermaLink="false">62b18efb15ee740853c34190</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Tue, 21 Jun 2022 05:20:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/06/andre-taissin-hOwcob_3dpc-unsplash.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/java-sort-array-how-to-reverse-an-array-in-ascending-or-descending-order-with-arrays-sort-2/">Java Sort Array – How to Reverse an Array in Ascending or Descending Order with Arrays.sort()</a>，作者：<a href="https://www.freecodecamp.org/news/author/ihechikara/">Ihechikara Vincent Abba</a></p><p>在 Java 中，你使用数组将一组变量（具有相同数据类型）存储在单个变量中。</p><p>在许多情况下，存储在数组中的值以随机顺序出现。使用 Java 中的 <code>Arrays</code> 类，你可以访问可用于操作数组的各种方法。</p><p>我们将从 <code>Arrays</code> 类中使用的方法之一是 <code>sort()</code> 方法，它按升序对数组进行排序。</p><p>我们还将看到如何使用 Java 中 <code>Collections</code> 类的 <code>reverseOrder()</code> 方法对数组进行降序排序。</p><h2 id="-arrays-sort-java-">如何使用 Arrays.sort() 在 Java 中按升序对数组进行排序</h2><p>在本节中，我们将看到一个示例，说明如何使用 <code>sort()</code> 方法对数组进行升序排序。</p><pre><code class="language-java">import java.util.Arrays;

class ArraySort {
    public static void main(String[] args) {
        int[] arr = { 5, 2, 1, 8, 10 };
        Arrays.sort(arr);
        
        for (int values : arr) {
            System.out.print(values + ", ");
            // 1, 2, 5, 8, 10,
        }
    }
}</code></pre><p>我们在上面的示例中做的第一件事是导入 <code>Arrays</code> 类：<code>import java.util.Arrays;</code>。这使我们可以访问 <code>Arrays</code> 类的所有方法。</p><p>然后我们以随机顺序创建了一个包含数字的数组：<code>int[] arr = { 5, 2, 1, 8, 10 };</code>。</p><p>为了按升序对该数组进行排序，我们将数组作为参数传递给 <code>sort()</code> 方法：<code>Arrays.sort(arr);</code>。</p><p>请注意，<code>Arrays</code> 类是在使用点符号访问 <code>sort()</code> 方法之前首先编写的。</p><p>最后，我们在控制台中循环并打印了数组。结果是一个排序数组：<code>1, 2, 5, 8, 10</code>。</p><p>在下一节中，我们将讨论按降序对数组进行排序。</p><h2 id="-java-collections-reverseorder-">如何在 Java 中使用 Collections.reverseOrder() 对数组进行降序排序</h2><p>要按降序对数组进行排序，我们使用可以从 <code>Collections</code> 类访问的 <code>reverseOrder()</code>。</p><p>我们仍将使用 <code>Arrays.sort();</code>，但在此示例中，它将接受两个参数——要排序的数组和 <code>Collections.reverseOrder()</code>。</p><p>这是一个例子：</p><pre><code class="language-java">import java.util.Arrays;
import java.util.Collections;

class ArraySort {
    public static void main(String[] args) {
        Integer[] arr = { 5, 2, 1, 8, 10 };
        Arrays.sort(arr, Collections.reverseOrder());
        
        for (int values : arr) {
            System.out.print(values + ", ");
            // 10, 8, 5, 2, 1,
        }
    }
}</code></pre><p>首先，我们导入了 <code>Arrays</code> 和 <code>Collections</code> 类，因为我们将使用这些类提供的方法。</p><p>然后我们以随机顺序创建了一个数字数组：<code>Integer[] arr = { 5, 2, 1, 8, 10 };</code>。你会注意到我们使用 <code>Integer[]</code> 而不是 <code>int[]</code>，就像我们在上一个例子中所做的那样——后者会抛出一个错误。</p><p>要按降序对数组进行排序，我们这样做：<code>Arrays.sort(arr, Collections.reverseOrder());</code>。</p><p>第一个参数是数组 <code>arr</code> ，它将按升序排序。第二个参数 - <code>Collections.reverseOrder()</code> - 然后将反转排序数组的顺序，使其按降序排列。</p><p>循环并打印时，数组将如下所示：<code>10, 8, 5, 2, 1</code>。</p><h2 id="-"><strong>总结</strong></h2><p>在本文中，我们讨论了 Java 中的排序数组。数组可以按升序或降序排序。</p><p>我们可以使用可以从 <code>Arrays</code> 类的 <code>sort()</code> 方法对数组进行升序排序。<code>sort()</code> 方法接受要排序的数组作为参数。</p><p>要按降序对数组进行排序，我们使用了 <code>Collections</code> 类的 <code>reverseOrder()</code> 方法。这作为 <code>sort()</code> 方法中的第二个参数传入，以便可以按降序重新排列排序后的数组。</p><p>祝你编码愉快！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 可改进的 Java BigDecimal 的几种用法 ]]>
                </title>
                <description>
                    <![CDATA[ 我在实际项目中发现现存的代码中对BigDecimal的使用有些可以改进的地方，在此记录下来，供大家参考。 1、new BigDecimal(0)、new BigDecimal("0")、new BigDecimal(1)、new BigDecimal("1")、new BigDecimal(10)、new BigDecimal("10") BigInteger 和 BigDecimal 这两个高精度数字类，对应整数 0、1、10 的值都有对应的常量（BigInteger.ZERO / BigDecimal.ZERO、BigInteger.ONE / BigDecimal.ONE、BigInteger.TEN / BigDecimal.TEN）可供使用。 为了节省创建对象和垃圾回收的开销，我们应该直接使用这些常量。  尤其是 new BigDecimal("0") 这种用法，它不仅会带来创建 BigDecimal 对象的开销，还有把字符串解析成数字的开销。 ZERO、ONE、TEN 这 3 个常量的值是不会变的，因为跟 Integer、Long 这些实现 Number 接口的类一样 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/java-bigdecimal/</link>
                <guid isPermaLink="false">628ef82c60237306d260722e</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Yuping Wu ]]>
                </dc:creator>
                <pubDate>Thu, 26 May 2022 03:50:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/05/web-developer.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>我在实际项目中发现现存的代码中对BigDecimal的使用有些可以改进的地方，在此记录下来，供大家参考。</p>
<h2 id="1newbigdecimal0newbigdecimal0newbigdecimal1newbigdecimal1newbigdecimal10newbigdecimal10">1、new BigDecimal(0)、new BigDecimal("0")、new BigDecimal(1)、new BigDecimal("1")、new BigDecimal(10)、new BigDecimal("10")</h2>
<p>BigInteger 和 BigDecimal 这两个高精度数字类，对应整数 0、1、10 的值都有对应的常量（BigInteger.ZERO / BigDecimal.ZERO、BigInteger.ONE / BigDecimal.ONE、BigInteger.TEN / BigDecimal.TEN）可供使用。</p>
<p><strong>为了节省创建对象和垃圾回收的开销，我们应该直接使用这些常量。</strong> 尤其是 new BigDecimal("0") 这种用法，它不仅会带来创建 BigDecimal 对象的开销，还有把字符串解析成数字的开销。</p>
<p>ZERO、ONE、TEN 这 3 个常量的值是不会变的，因为跟 Integer、Long 这些实现 Number 接口的类一样，BigInteger 和 BigDecimal 也是不可变的（immutable），也就是说调用一个 BigDecimal 对象的任何公共的成员方法都不会改变该 BigDecimal 对象的值。执行如 BigDecimal.TEN.multiply(new BigDecimal(15)) 这样的代码不会改变 BigDecimal.TEN 的值。</p>
<h2 id="2bigdecimalzerosubtractbigdecimal">2、BigDecimal.ZERO.subtract(bigDecimal)</h2>
<p><strong>取一个 BigDecimal 变量的相反数，我们可以直接使用 BigDecimal 类的 negate 方法。</strong></p>
<p>BigDecimal 类的核心其实是3个私有的成员属性：一个 BigInteger 属性 value 表示数字的各个位、一个整数属性 scale 表示小数点的位置、一个整数属性 sign 表示数字的符号（-1 表示负数、0 表示 0、1 表示正数）。一个 BigDecimal 对象的值就是 sign * value / (10 ^ scale)。例如 value 属性的值为 15、scale 属性的值为 0、sign 属性的值为 -1，则该 BigDecimal 对象表示 -15；如果 value 属性的值为 15、scale 属性的值为 1、sign 属性的值为 1，则该BigDecimal对象表示 15 / 10 = 1.5；如果 BigInteger 属性的值为 15、小数点属性的值为 -1、符号属性的值为 1，则该 BigDecimal 对象表示 15 * 10 = 150。</p>
<p>negate 方法是调用 BigDecimal 的私有构造方法，直接创建一个 sign 属性为原 BigDecimal 对象的 sign 的相反数的新的 BigDecimal 对象，不会涉及到减法运算的逻辑。如果我们使用 BigDecimal.ZERO 的 subtract 方法，则会带来高精度小数减法的开销（BigDecimal 的 subtract 方法需要先判断两个 BigDecimal 对象的 scale 属性的大小，调整其中一个 BigDecimal 对象的 scale 属性和 value 属性使两个 BigDecimal 对象的 scale 属性相等）。</p>
<h2 id="3bigdecimalcomparetobigdecimalzero0bigdecimalzerosubtractbigdecimalbigdecimal">3、bigDecimal.compareTo(BigDecimal.ZERO) &lt; 0 ? BigDecimal.ZERO.subtract(bigDecimal) : bigDecimal</h2>
<p><strong>取一个 BigDecimal 变量的绝对值，我们可以直接使用 BigDecimal 类的 abs 方法。</strong></p>
<p>上文已提到，BigDecimal 类的值由 value、scale 和 sign 3个私有成员属性决定。abs 方法是调用 BigDecimal 的私有构造方法，直接创建一个 sign 属性为 1 的新的 BigDecimal 对象，可以为我们省去判断一个 BigDecimal 对象的值是否小于 0 的开销。</p>
<h2 id="4bigdecimalmultiplynewbigdecimal100bigdecimaldividenewbigdecimal100">4、bigDecimal.multiply(new BigDecimal(100))、bigDecimal.divide(new BigDecimal(100))</h2>
<p><strong>要得到一个 BigDecimal 变量乘以 10 的整数次幂，我们可以直接使用 BigDecimal 类的 scaleByPowerOfTen 方法。</strong></p>
<p>bigDecimal.scaleByPowerOfTen(n) 返回一个值为 bigDecimal * 10 ^ n 的新的 BigDecimal 对象。scaleByPowerOfTen 方法是调用 BigDecimal 的私有构造方法，直接创建一个 scale 属性等于原 BigDecimal 对象的 scale - n 的新的 BigDecimal 对象，可以为我们省去高精度小数乘除法的开销。</p>
<p>要全面深入了解 BigDecimal 的用法，可参考 <a href="https://docs.oracle.com/javase/8/docs/api/java/math/BigDecimal.html">JavaSE 8 的 API 文档</a>和 <a href="http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/math/BigDecimal.java">OpenJDK 8 中 BigDecimal.java 的源码</a>。</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java Bean、EJB、Spring Bean 和一些对象的概念 ]]>
                </title>
                <description>
                    <![CDATA[ JavaBean 根据维基百科上的介绍[1]以及Shaun Abram的一篇博文[2]，一个JavaBean通常是一个有以下3种特点的公共Java类：  1. 有一个无参的构造方法（默认构造方法）；  2. 所有属性都是private的，类外部需要通过public的getter和setter来访问属性；  3. 实现了Serializable接口。 JavaBeans规范[3]中指出，JavaBeans是一种能在开发工具中可视化地编辑的可重用的软件组件，它需要有一系列的属性，可能有一些事件。在JavaBeans规范的第7章中规定了一个JavaBean的属性应该是private的，类外部应该通过pubilc的getter和setter方法来访问属性。在JavaBeans规范的第2章中有规定一个JavaBean需要是可序列化的，以便传输和持久化JavaBean的状态。但是JavaBeans规范中没有规定一个JavaBean必须有一个无参的构造方法。 JavaBeans规范发布于1997年，所以JavaBeans规范其实主要是围绕Java Applet来设计的。Java Applet中 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/java-bean-ejb-spring-bean-and-objects/</link>
                <guid isPermaLink="false">628ef6ed60237306d260721b</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Yuping Wu ]]>
                </dc:creator>
                <pubDate>Thu, 26 May 2022 03:45:42 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/05/artem-sapegin-DErxVSSQNdM-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <h2 id="javabean">JavaBean</h2>
<p>根据维基百科上的介绍[1]以及Shaun Abram的一篇博文[2]，一个JavaBean通常是一个有以下3种特点的公共Java类：</p>
<ol>
<li>有一个无参的构造方法（默认构造方法）；</li>
<li>所有属性都是private的，类外部需要通过public的getter和setter来访问属性；</li>
<li>实现了Serializable接口。</li>
</ol>
<p>JavaBeans规范[3]中指出，JavaBeans是一种能在开发工具中可视化地编辑的可重用的软件组件，它需要有一系列的属性，可能有一些事件。在JavaBeans规范的第7章中规定了一个JavaBean的属性应该是private的，类外部应该通过pubilc的getter和setter方法来访问属性。在JavaBeans规范的第2章中有规定一个JavaBean需要是可序列化的，以便传输和持久化JavaBean的状态。但是JavaBeans规范中没有规定一个JavaBean必须有一个无参的构造方法。</p>
<p>JavaBeans规范发布于1997年，所以JavaBeans规范其实主要是围绕Java Applet来设计的。Java Applet中的GUI组件会有属性（例如按钮的名称）和事件（例如输入框的输入事件），GUI组件的状态可能需要在服务器端和客户端之间传输，因此JavaBeans的定义中除了属性还包括了事件，而且也规定了JavaBeans需要可序列化。但是现在许多的Java开发是在纯服务器端软件的领域，服务器应用上的如数据库连接这样的对象或者一些实现业务逻辑的对象是不应该在电脑之间传输的，所以我认为这些对象就不适用传统的JavaBeans的定义，至少不适用可序列化这个特性。</p>
<h2 id="ejb">EJB</h2>
<p>EJB是企业级JavaBeans（Enterprise JavaBeans）的英文缩写。根据EJB规范[4]，一个企业级Bean（Enterprise Bean）有以下特性：</p>
<ol>
<li>通常包含操作企业数据的业务逻辑；</li>
<li>由容器在运行时管理；</li>
<li>用户需要通过容器访问企业级Bean；</li>
<li>能在部署时根据运行环境定制；</li>
<li>能通过注解或XML在编译或部署时指定其中使用的一些配置信息（可配置）；</li>
<li>只使用了EJB规范中规定的服务的企业级Bean能在任意EJB容器中使用（可移植）；</li>
<li>企业级Bean可以不需要重新编译就被封装在一个企业级应用中。</li>
</ol>
<p>EJB规范中还指出，一个企业级Bean可以是有状态的，也可以是无状态的；可以实现业务逻辑，也可以代表一个持久化的实体。由此可见，EJB和JavaBeans其实是有挺大区别的，可以说一个EJB并不一定是一个JavaBean。一个EJB也不一定有无参构造方法和实现Serializable接口。</p>
<p>EJB规范中也没有规定一个企业级Bean的属性必须是private的，要通过public的getter和setter来访问。不过我们基于类的封装性和降低类之间的耦合的考虑，通常还是会遵循将属性设为private，为其写public的getter和setter这样的设计。</p>
<h2 id="springbean">Spring Bean</h2>
<p>根据Spring Framework的官方文档[5]，在Spring中由Spring IoC容器管理的构成应用主干的对象就是bean。（注：IoC是控制反转 Inverse of Control 的英文缩写。）Spring beans都是由Spring IoC容器根据XML配置文件或注解等方式来实例化、组装和管理的。</p>
<p>我认为，Spring beans和EJB比较类似，它们通常都是数据库连接、事务管理器、消息中间件连接、Session管理器、数据访问对象、业务逻辑服务之类的，只是Spring beans是由Spring IoC容器管理的，EJB是由EJB容器管理的。Spring beans同样不一定有无参构造方法和实现Serializable接口。</p>
<h2 id="pojo">POJO</h2>
<p>POJO是简单的传统的Java对象（Plain Old Java Object）的英文缩写，另有Plain Ordinary Java Object、Pure Old Java Object等说法，最早由Martin Fowler、Rebecca Parsons和Josh MacKenzie提出。[6][7] 结合Spring文档中对POJO的介绍[8]，我们可以知道，POJO是一种尽量不依赖任何第三方库、框架甚至JavaEE规范的实现的Java对象，它应该尽量不继承任何类、不实现任何接口、不包含任何与第三方库或框架相关的注解。</p>
<p>由上述介绍我们可以发现，POJO和JavaBeans、EJB和Spring beans都没有必然的联系。负责GUI组件的继承java.awt.Component的JavaBeans、实现JavaEE规范中的接口的EJB、实现Spring框架中的接口的Spring beans或者使用了Spring框架中的注解的Spring beans都不是POJO。POJO的定义中同样没有规定它有怎样的构造方法和怎样的属性。</p>
<p>因为一个POJO不依赖任何第三方库和框架，它的可维护性和可移植性会更强，开发人员开发与这个POJO相关的功能时，不必考虑它依赖的第三方库或框架的实现，可以更专注于这个POJO本身的业务功能。第三方库或框架升级的时候，不必对POJO进行修改。POJO给了开发人员充分的灵活性，开发人员可以选择将一个POJO应用在任意一个框架中（例如Spring或者Struts、Hibernate或者MyBatis），或者选择不应用在框架中。</p>
<h2 id="bo">BO</h2>
<p>BO是业务对象（Business Object）的英文缩写。通常认为，业务对象是用于描述业务逻辑中的对象，但业务对象不依赖具体实现。如果换一种实现方式，例如从关系式数据库迁移到非关系式数据库，或者从单点系统改成一个分布式系统，一个业务对象类需要发生改变的话，那这个业务对象类的设计就是不合理的。</p>
<p>业务对象中的属性应该与业务人员、需求人员、客户理解的一致。例如一个用户信息类中，开发人员可能会在里面设置一个”创建时间“字段，但对于业务人员来说，用户没有“创建时间”，只有“注册时间”，那么用户业务对象中的字段就应该叫做“注册时间”而非“创建时间”。又例如，多数互联网应用，删除一个实体的时候并不会从数据库中物理删除，而是在数据库记录中将该实体的记录的状态字段改为“已删除”，这种“已删除”状态的对象可以是下文说的PO或者DTO，但是一个BO。</p>
<p>又例如，用关系式数据库时，通常会用一个中间表/中间对象来帮助描述多对多关系，我认为这种多对多关系对象（通常是一个PO）就不能算是业务对象。</p>
<p>我觉得，由于业务对象是业务人员，通常业务对象只是在需求或者实现设计中出现，很少人会在代码里写一个纯粹的BO类，即使写BO类，也是作为下文所说的DTO、PO或者VO的基类或组成部分。</p>
<h2 id="dto">DTO</h2>
<p>DTO是数据传输对象（Data Transfer Object）的英文缩写。</p>
<p>DTO通常是一个JavaBean（按照有无参构造方法、属性都为private、属性通过public的getter/setter来访问、实现Serializable接口的定义）。DTO也通常是一个POJO，因为要考虑其在交互的系统之间的可移植性。</p>
<h2 id="po">PO</h2>
<p>PO是持久化对象（Persistent Object）的英文缩写。通常我们对PO的理解就跟百度百科[9]中说的一样：一个PO类与一个数据库表对应，一个PO与数据库表中的一行对应。PO通常是也一个JavaBean（按照有无参构造方法、属性都为private、属性通过public的getter/setter来访问、实现Serializable接口的定义）。PO可以是一个POJO，也可能含有JPA规范中定义的一些注解（例如@Entity、@Table、@Column、@Id等）。</p>
<p>虽然在很多架构设计中，DTO和PO等对象没有作区分，都放在model包或者entity包中，我认为一个结构清晰的架构应该对PO与DTO等其他对象作区分，因为存储在数据库中的对象与其他业务对象还是有一些区别的。例如数据库对象通常会有创建时间、创建者的用户ID、最后一次修改时间、最后一次修改者的用户ID、状态、数据库自增ID等字段，但这些信息很多是不需要甚至不应该暴露给用户或者其他系统的，即不应该出现在DTO等其他对象中的。</p>
<p>而在对象关系映射（Object/Relation Mapping，简称ORM）框架Hibernate中，上述含义的PO有三种状态：持久化对象状态（也简称PO）、值对象（Value Object，简称VO）状态、游离（Detached）状态。根据Hibernate的文档[10]，在Hibernate中，与一个Hibernate session绑定的广义PO是一个Hibernate PO，对一个Hibernate PO作修改后，对Hibernate session做flush或close操作时，Hibernate session会将修改后的Hibernate PO的状态持久化到数据库中。开发者手动将Hibernate PO从Hibernate session中解除绑定（detach）之后，该PO就进入游离状态。游离状态的PO可以重新与一个Hibernate session绑定而重新变为持久化对象状态。</p>
<h2 id="vo">VO</h2>
<p>VO有两种含义，一种是值对象（Value Object）的英文缩写，另一种是展现层对象（View Object）的英文缩写。</p>
<p>对于值对象，上文有提到在Hibernate中，值对象是广义PO的一种状态。在Hibernate中，除了持久化对象状态和游离状态的广义PO都是值对象。</p>
<p>值对象也有另一种定义，即所有用于存储数据的对象（如PO和DTO）都是值对象。</p>
<p>展现层对象，又可称“视图对象”，是对应一个客户端页面或者组件中数据的对象。展现层对象跟DTO的结构很相似，都有一些private的属性及其public的getter/setter，因为它们本质上都是用来承载传输的数据，DTO通常用于跨应用传输数据，而展现层对象用于业务逻辑层和客户端页面之间传输数据。对于要不要将DTO和展现层对象合并在一起，下文中推荐的博文有详细的讨论，这里不再赘述。</p>
<h2 id="do">DO</h2>
<p>DO有两种含义，一种是数据对象（Data Object）的英文缩写，另一种是领域对象（Domain Object）的英文缩写。</p>
<p>阿里巴巴的《Java开发手册》中的DO用的就是数据对象这个概念，它的含义跟PO的含义是一样的（一个DO类与一个数据库表对应，一个DO与数据库表中的一行对应）。</p>
<p>而领域对象是领域驱动设计（Domain Driven Design）中的一个概念。对领域驱动设计的解释，推荐大家参考一下<a href="https://mp.weixin.qq.com/s/c_5QUFu778NM67gNSrzvqA">阿里的盒马技术团队的文章</a>。对领域对象的具体解释，推荐大家参考一下《<a href="http://www.cnblogs.com/qixuejia/p/4390086.html">领域驱动设计系列文章——浅析VO、DTO、DO、PO的概念、区别和用处</a>》《<a href="https://blog.csdn.net/zjrbiancheng/article/details/6253232">浅析VO、DTO、DO、PO的概念、区别和用处</a>》这两篇博文。</p>
<h2 id="dao">DAO</h2>
<p>DAO是数据访问对象（Data Access Object）的英文缩写。DAO是对数据库具体实现细节的封装、对数据库访问方法的抽象。[11] DAO通常需要依赖注入容器为其注入数据库连接对象之类的对象，因此DAO通常是一个EJB或者是Spring bean。</p>
<h2 id="">再啰嗦两句</h2>
<p>我认为，上文所说的BO、DTO、PO、VO（展现层对象）、DO和DAO，其作用、功能、职责都是有区别的，为了一个软件工程的结构清晰、软件的部件的功能明确，为了最大程度的软件的可拓展性、可移植性和可维护性，应该将这些对象分别放在不同的包（package）中，不要将这些对象混淆或合并在一起使用，虽然这样会使首次开发时的工作量增加。</p>
<h2 id=""><strong>参考资料</strong></h2>
<p>[1] DropDeadGorgias, Fvdham, JimmyShelter, 等．JavaBeans[M/OL]．<a href="https://en.wikipedia.org/wiki/JavaBeans">https://en.wikipedia.org/wiki/JavaBeans</a>, 引用于2018-09-05 10:11</p>
<p>[2] Shaun Abram. JavaBeans vs Spring beans vs POJOs[J/OL]. <a href="http://www.shaunabram.com/beans-vs-pojos/">http://www.shaunabram.com/beans-vs-pojos/</a>, 引用于2018-09-05 10:16</p>
<p>[3] Sun Microsystems, JavaBeans(TM) API specification Version 1.01-4[S/OL], 1997-08-08:9. <a href="http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/">http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/</a>, 引用于2018-09-05 10:53</p>
<p>[4] Sun Microsystems, JSR-000220 Enterprise JavaBeans v.3.0 Final Release[S/OL], 2006-05-08:30-35. <a href="http://download.oracle.com/otndocs/jcp/ejb-3_0-fr-eval-oth-JSpec/">http://download.oracle.com/otndocs/jcp/ejb-3_0-fr-eval-oth-JSpec/</a>, 引用于2018-09-05 11:19</p>
<p>[5] Spring Source, Core Technologies[M/OL], 2018-07-26. <a href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-introduction">https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-introduction</a>, 引用于2018-09-05 12:24</p>
<p>[6] Chronist, WikiFan04, Graham87, 等. Plain old Java object[M/OL]. <a href="https://en.wikipedia.org/wiki/Plain_old_Java_object">https://en.wikipedia.org/wiki/Plain_old_Java_object</a>, 引用于2018-09-05 12:40</p>
<p>[7] chunchill. 理解POCO[J/OL], 2011-01-08. <a href="http://www.cnblogs.com/shineqiujuan/archive/2011/01/08/1930911.html">http://www.cnblogs.com/shineqiujuan/archive/2011/01/08/1930911.html</a>, 引用于2018-09-05 12:47</p>
<p>[8] Spring Source. Understanding POJOs[M/OL]. <a href="https://spring.io/understanding/POJO">https://spring.io/understanding/POJO</a>, 引用于2018-09-05 12:54</p>
<p>[9] 匿名. （持久对象 (persistent object)）[M/OL]. <a href="https://baike.baidu.com/item/Po/6446468">https://baike.baidu.com/item/Po/6446468</a>, 引用于2018-09-05 18:27</p>
<p>[10] hibernate.org. Working with objects[M/OL]. <a href="http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html">http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/objectstate.html</a>, 引用于2018-09-06 15:49</p>
<p>[11] Anonymous. Data access object[M/OL]. <a href="https://en.wikipedia.org/wiki/Data_access_object">https://en.wikipedia.org/wiki/Data_access_object</a>, 引用于2018-09-05 14:34</p>
<!--kg-card-end: markdown--> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java 运算符——&，&& (AND) || (OR) 逻辑运算符 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：Java Operator – &, && (AND) || (OR) Logical Operators [https://www.freecodecamp.org/news/java-operator-and-or-logical-operators/]，作者： Ihechikara Vincent Abba [https://www.freecodecamp.org/news/author/ihechikara/] 我们在大多数编程语言中使用运算符来对变量执行操作。 它们分为各种类别，如算术运算符、赋值运算符、比较运算符、逻辑运算符等。 在本文中，我们将讨论按位与 AND 运算符，以及 AND（&&）和 OR（||）逻辑运算符。 如何使用按位与 AND 运算符 符号 & 表示按位与 AND 运算符。它评估给定数字的二进制值。这些数字的二进制结果将转换为十进制返回给我们。 当 & 运算符开始操作时，它将从左侧开始计算两个数字中字符的值。 让我们看一个例子来帮助你更好地理解： System.out.println(10 & 12); // returns 8 让 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/java-operator-and-or-logical-operators/</link>
                <guid isPermaLink="false">6262a17699ec7406219e77ae</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Chengjun.L ]]>
                </dc:creator>
                <pubDate>Fri, 22 Apr 2022 12:30:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/04/logic.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/java-operator-and-or-logical-operators/">Java Operator – &amp;, &amp;&amp; (AND) || (OR) Logical Operators</a>，作者：<a href="https://www.freecodecamp.org/news/author/ihechikara/">Ihechikara Vincent Abba</a></p><p>我们在大多数编程语言中使用运算符来对变量执行操作。</p><p>它们分为各种类别，如算术运算符、赋值运算符、比较运算符、逻辑运算符等。</p><p>在本文中，我们将讨论按位与 <strong>AND</strong> 运算符，以及 <strong>AND</strong>（<code>&amp;&amp;</code>）和 <strong>OR</strong>（<code>||</code>）逻辑运算符。</p><h2 id="-and-">如何使用按位与 <code>AND</code> 运算符</h2><p>符号 <code>&amp;</code> 表示按位与 <strong><strong>AND</strong></strong> 运算符。它评估给定数字的二进制值。这些数字的二进制结果将转换为十进制返回给我们。</p><p>当 <code>&amp;</code> 运算符开始操作时，它将从左侧开始计算两个数字中字符的值。</p><p>让我们看一个例子来帮助你更好地理解：</p><pre><code class="language-java">System.out.println(10 &amp; 12);
// returns 8</code></pre><p>让我们分解一下。</p><p>10 的二进制值是 1010。</p><p>12 的二进制值是 1100。</p><p>在我们开始操作之前，你应该记住以下几点：</p><ul><li>1 and 0 =&gt; 0</li><li>0 and 1 =&gt; 0</li><li>1 and 1 =&gt; 1</li><li>0 and 0 =&gt; 0</li></ul><p>我们来操作一下。</p><p>10 的第一个字符是 1，而 12 的第一个字符也是 1，所以：</p><p>1 and 1 = 1</p><p>我们继续看第二个字符——10 的第二个字符是 0，12 的第二个字符是 1：</p><p>1 and 0 = 0</p><p>对于第三个字符——10 的第三个字符是 1，12 的第三个字符是 0：</p><p>1 and 0 = 0</p><p>对于第四个字符——10 的第四个字符是 0，12 的第四个字符是 0：</p><p>现在让我们组合所有返回的字符，结果是 1000。</p><p>二进制值 1000 在十进制中是 8，这就是我们的操作返回 8 的原因。</p><h2 id="-and--1">如何使用逻辑 <code>AND</code> 运算符</h2><p>请注意，我们使用逻辑运算符来评估条件。它们根据给定的条件返回 <code>true</code> 或 <code>false</code>。</p><p>符号 <code>&amp;&amp;</code> 表示 <strong>AND</strong> 运算符。它评估两个语句/条件，并且仅当两个语句/条件都为 <code>true</code> 时才返回 <code>true</code>。</p><p>语法如下所示：</p><pre><code class="language-txt">statment1/condition1 &amp;&amp; statemnt2/condition2</code></pre><p>正如你在上面看到的，有两个语句/条件由运算符分隔。运算符评估两个语句/条件的值并给我们一个结果——<code>true</code> 或 <code>false</code>。</p><p>这是一个例子：</p><pre><code class="language-java">System.out.println((10 &gt; 2) &amp;&amp; (8 &gt; 4));
//true</code></pre><p>该操作将返回 <code>true</code>，因为两个条件都为真——10 大于 2，且 8 大于 4。如果其中任何一个条件的逻辑不正确，那么我们将得到 <code>false</code>。</p><p>为了更好地理解 <code>&amp;&amp;</code> 运算符，你应该知道两个条件都必须为 <code>true</code> 才能获得结果是 <code>true</code>。</p><p>这是另一个返回 <code>false</code> 的示例：</p><pre><code class="language-java">System.out.println((2 &gt; 10) &amp;&amp; (8 &gt; 4));
// false</code></pre><p>在这里，2 不大于 10，但 8 大于 4——所以我们得到 <code>false</code>。这是因为其中一个条件不成立。</p><ul><li>如果两个条件都为 <code>true</code> =&gt;<code>true</code></li><li>如果两个条件之一为 <code>false</code> =&gt; <code>false</code></li><li>如果两个条件都为 <code>false</code> =&gt; <code>false</code></li></ul><h2 id="-or-">如何使用逻辑 <strong><code>OR</code></strong> 运算符</h2><p>我们使用符号 <code>||</code> 表示 <strong>OR</strong> 运算符。只有当两个条件都为 <code>false</code> 时，此运算符才会返回 <code>false</code>。这意味着如果两个条件都为 <code>true</code>，将返回 <code>true</code>，如果两个条件之一为 <code>true</code>，也会返回 <code>true</code>。</p><p>语法如下：</p><pre><code class="language-txt">statment1/condition1 || statemnt2/condition2</code></pre><p>让我们看几个例子。</p><pre><code>System.out.println((6 &lt; 1) || (4 &gt; 2));  
// true</code></pre><p>这将返回 <code>true</code>，因为其中一个条件为 <code>true</code>。</p><ul><li>如果两个条件都为 <code>true</code> =&gt; <code>true</code></li><li>如果条件之一为 <code>true</code> =&gt; <code>true</code></li><li>如果两个条件都为 <code>false</code> =&gt; <code>false</code></li></ul><h2 id="-">总结</h2><p>在本文中，我们学习了如何在 Java 中使用按位 <code>&amp;</code> 运算符，以及如何执行操作来给我们一个结果。</p><p>我们还学习了如何在 Java 中使用 <strong><strong><code>&amp;&amp;</code></strong> </strong>和 <code><strong><strong>||</strong></strong></code> 逻辑运算符。我们根据操作中涉及的条件了解了每个操作返回的值。</p><p>祝你编程愉快！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 零基础入门 Java 开发，构建 2048 游戏 ]]>
                </title>
                <description>
                    <![CDATA[ Java 是最流行的编程语言之一，已经有超过 25 年的历史。它可以在所有主流的操作系统上运行，并可用于编写 Android 应用程序。 如果你对学习 Java 感兴趣，我们在 freeCodeCamp 中文 YouTube 频道发布了包含基础理论和项目实践的《Java 新手课》。 这个教程的作者是牧云踏歌 [https://chinese.freecodecamp.org/news/author/muyuntage/]，他是一位资深的 Java 开发者。在这个时长四小时的教程中，他通过有趣的编程例子（比如 2048 小游戏），带领零基础的小伙伴循序渐进入门 Java 开发。 教程的内容包括：  * 课程简介  * 开发环境及第一个程序  * 手动编译代码，理解 JKE 与 JRE  * 与用户交互  * 函数  * 年收入计算器  * 分层思想及面向对象  * 构建棋子与棋盘 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/get-started-coding-with-java-and-build-a-2048-game-in-java/</link>
                <guid isPermaLink="false">625cede899ec7406219e6bfd</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                    <category>
                        <![CDATA[ 游戏 ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Mon, 18 Apr 2022 04:30:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/04/Java----.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Java 是最流行的编程语言之一，已经有超过 25 年的历史。它可以在所有主流的操作系统上运行，并可用于编写 Android 应用程序。</p><p>如果你对学习 Java 感兴趣，我们在 freeCodeCamp 中文 YouTube 频道发布了包含基础理论和项目实践的《Java 新手课》。</p><p>这个教程的作者是<a href="https://chinese.freecodecamp.org/news/author/muyuntage/">牧云踏歌</a>，他是一位资深的 Java 开发者。在这个时长四小时的教程中，他通过有趣的编程例子（比如 2048 小游戏），带领零基础的小伙伴循序渐进入门 Java 开发。</p><p>教程的内容包括：</p><ul><li>课程简介</li><li>开发环境及第一个程序</li><li>手动编译代码，理解 JKE 与 JRE</li><li>与用户交互</li><li>函数</li><li>年收入计算器</li><li>分层思想及面向对象</li><li>构建棋子与棋盘</li><li>随机设置棋子及 Gameover 判定</li><li>实现合并及压缩算法</li><li>响应用户输入向左合并</li><li>响应用户所有输入</li><li>优化得分及游戏结束</li><li>基于面向接口编程改造为十二生肖版</li></ul><p>在这里观看完整视频：</p><figure class="kg-card kg-embed-card" data-test-label="fitted">
        <div class="fluid-width-video-container">
          <div style="padding-top: 56.49999999999999%;" class="fluid-width-video-wrapper">
            <iframe width="200" height="113" src="https://www.youtube.com/embed/pwx8-iGxZz0?start=1813&amp;feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen="" name="fitvid0"></iframe>
          </div>
        </div>
      </figure> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Java 字符串转换为整数 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：Java String to Int – How to Convert a String to an Integer [https://www.freecodecamp.org/news/java-string-to-int-how-to-convert-a-string-to-an-integer/] ，作者：Thanoshan MV [https://www.freecodecamp.org/news/author/thanoshan/] 如果你使用过 Java Swing，那么它具有我们用来从 GUI 获取输入的组件，例如 JTextField 和 JTextArea。它将我们的输入作为字符串。 如果我们想使用 Swing 制作一个简单的计算器，我们需要弄清楚如何将字符串转换为整数。这就引出了一个问题——我们如何将字符串转换为整数？ 在 Java 中，我们可以使用 Integer.valueOf() 和 Integer.parseInt() 将字符串转换为整数。 使用 Integer.parseInt() 将字符串转换为整数 此方法将字符串作为原始类型 int 返回 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/java-string-to-int-how-to-convert-a-string-to-an-integer/</link>
                <guid isPermaLink="false">611a165017b8810648f27bea</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Thu, 14 Apr 2022 10:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2021/08/Untitled-design.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/java-string-to-int-how-to-convert-a-string-to-an-integer/">Java String to Int – How to Convert a String to an Integer</a>，作者：<a href="https://www.freecodecamp.org/news/author/thanoshan/">Thanoshan MV</a></p><p>如果你使用过 Java Swing，那么它具有我们用来从 GUI 获取输入的组件，例如 JTextField 和 JTextArea。它将我们的输入作为字符串。</p><p>如果我们想使用 Swing 制作一个简单的计算器，我们需要弄清楚如何将字符串转换为整数。这就引出了一个问题——我们如何将字符串转换为整数？</p><p>在 Java 中，我们可以使用 <code>Integer.valueOf()</code> 和 <code>Integer.parseInt()</code> 将字符串转换为整数。</p><h2 id="-integer-parseint-"><strong>使用 </strong><code><strong>Integer.parseInt()</strong></code><strong> 将字符串转换为整数</strong></h2><p>此方法将字符串作为<strong>原始类型 int</strong> 返回。如果字符串不包含有效整数，则它将抛出 <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/NumberFormatException.html">NumberFormatException</a>。</p><p>因此，每次我们将字符串转换为 int 时，都需要通过将代码放在 try-catch 块中来处理此异常。</p><p>让我们考虑一个使用 <code>Integer.parseInt()</code> 将字符串转换为 int 的示例：</p><pre><code class="language-java">        String str = "25";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }</code></pre><p>让我们尝试通过输入一个无效整数来解释这段代码：</p><pre><code class="language-java">     	String str = "25T";
        try{
            int number = Integer.parseInt(str);
            System.out.println(number);
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }</code></pre><p>正如你在上面的代码中看到的，我们尝试将 <code>25T</code> 转换为整数。这不是有效的输入，因此，它必须抛出 NumberFormatException。</p><p>这是上面代码的输出：</p><pre><code class="language-java">java.lang.NumberFormatException: For input string: "25T"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.parseInt(Integer.java:615)
	at OOP.StringTest.main(StringTest.java:51)</code></pre><p>接下来，我们将考虑如何使用 <code>Integer.valueOf()</code> 方法将字符串转换为整数。</p><h2 id="-integer-valueof-"><strong>使用 <code>Integer.valueOf()</code> 将字符串转换为整数</strong></h2><p>此方法将字符串作为整数对象返回。如果你查看 <a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#valueOf(java.lang.String)">Java 文档</a>，<code>Integer.valueOf()</code> 返回一个整数对象，它等效于 <code>new Integer(Integer.parseInt(s))</code>。</p><p>使用此方法时，我们会将代码放在 try-catch 块中。让我们考虑一个使用 <code>Integer.valueOf()</code> 方法的例子：</p><pre><code class="language-java">        String str = "25";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); // output = 25
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }</code></pre><p>现在，让我们尝试通过输入一个无效的整数来解释上面的代码：</p><pre><code class="language-java">        String str = "25TA";
        try{
            Integer number = Integer.valueOf(str);
            System.out.println(number); 
        }
        catch (NumberFormatException ex){
            ex.printStackTrace();
        }</code></pre><p>和前面的例子类似，上面的代码会抛出异常。</p><p>这是上面代码的输出：</p><pre><code class="language-java">java.lang.NumberFormatException: For input string: "25TA"
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.lang.Integer.parseInt(Integer.java:580)
	at java.lang.Integer.valueOf(Integer.java:766)
	at OOP.StringTest.main(StringTest.java:42)</code></pre><p>在使用上述方法之前，我们还可以创建一个方法来检查传入的字符串是否为数字。</p><p>我创建了一个简单的方法来检查传入的字符串是否为数字。</p><pre><code class="language-java">public class StringTest {
    public static void main(String[] args) {
        String str = "25";
        String str1 = "25.06";
        System.out.println(isNumeric(str));
        System.out.println(isNumeric(str1));
    }

    private static boolean isNumeric(String str){
        return str != null &amp;&amp; str.matches("[0-9.]+");
    }
}</code></pre><p>输出是：</p><pre><code class="language-java">true
true</code></pre><p><code>isNumeric()</code> 方法接受一个字符串作为参数。首先它检查字符串是否为空。之后我们使用 <code>matches()</code> 方法检查它是否包含数字 0 到9 和一个句点字符。</p><p>这是检查数值的简单方法。你可以在 Google 上编写或搜索更高级的正则表达式，以根据你的用例捕获数字。</p><p>在尝试将其转换为整数之前，最好先检查传入的字符串是否为数字。</p><p>感谢你阅读本文。</p><p>封面图片来自 <a href="https://unsplash.com/collections/139346/soul-care?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">Unsplash</a>，摄影师 <a href="https://unsplash.com/@itfeelslikefilm?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText">🇸🇮 Janko Ferlič</a>。</p><p>你可以在 <a href="https://mvthanoshan.medium.com/">Medium</a> 联系我。</p><p><strong><strong>Happy Coding!</strong></strong></p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何使用 Java indexOf 方法返回一个字符串的索引 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：indexOf in Java – How to Find the Index of a String in Java [https://www.freecodecamp.org/news/indexof-in-java-how-to-find-the-index-of-a-string-in-java/] ，作者：Ihechikara Vincent Abba [https://www.freecodecamp.org/news/author/ihechikara/] 字符串是嵌套在双引号中的字符的集合。indexOf 方法返回指定字符或子串在字符串中的索引位置。 在这篇文章中，我们将看到不同 indexOf 方法的语法。我们还将看一些例子，以帮助你理解并有效地使用它们，在你的 Java 代码中找到一个字符或子串的索引。 indexOf 方法的语法 indexOf 方法有以下几种方法： public int indexOf(int char) public int indexOf(int char, int fromIndex) public int indexOf(S ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/indexof-in-java-how-to-find-the-index-of-a-string-in-java/</link>
                <guid isPermaLink="false">624e691899ec7406219e5de2</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Thu, 07 Apr 2022 07:20:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/04/index.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/indexof-in-java-how-to-find-the-index-of-a-string-in-java/">indexOf in Java – How to Find the Index of a String in Java</a>，作者：<a href="https://www.freecodecamp.org/news/author/ihechikara/">Ihechikara Vincent Abba</a></p><p>字符串是嵌套在双引号中的字符的集合。<code>indexOf</code> 方法返回指定字符或子串在字符串中的索引位置。</p><p>在这篇文章中，我们将看到不同 <code>indexOf</code> 方法的语法。我们还将看一些例子，以帮助你理解并有效地使用它们，在你的 Java 代码中找到一个字符或子串的索引。</p><h2 id="indexof-"><code>indexOf</code> 方法的语法</h2><p><code>indexOf</code> 方法有以下几种方法：</p><pre><code class="language-java">public int indexOf(int char)
public int indexOf(int char, int fromIndex)
public int indexOf(String str)
public int indexOf(String str, int fromIndex)</code></pre><p>在看到一些例子之前，让我们解释一下这些参数：</p><ul><li><code>char</code> 表示一个字符串中的单个字符。</li><li><code>fromIndex</code> 表示搜索一个字符或子串的索引应该从哪个位置开始。当一个字符串中有两个相同值的字符/字符串时，这一点很重要。通过这个参数，你可以告诉 <code>indexOf</code> 方法从哪里开始操作。</li><li><code>str</code> 代表字符串中的一个子串。</li></ul><p>如果你还不明白这一切是如何运作的，不要担心——例子会帮你理解。</p><h2 id="-java-indexof-">如何在 Java 中使用 indexOf 方法</h2><p>在下面的第一个例子中，我们将找到一个字符串中单个字符的索引。这个例子将帮助我们理解 <code>public int indexOf(int char)</code> 方法。</p><h3 id="indexof-int-char-"><code><strong>indexOf(int Char)</strong></code><strong> 方法示例</strong></h3><pre><code class="language-java">public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";
    
    System.out.println(greetings.indexOf("o"));
    
    // 4
  }
}
</code></pre><p>在上面的代码中，我们得到了字符 “o” 的索引，即 4，我们有两个 “o” 字符，但第一个字符的索引被返回。</p><p>在下一个例子中，我们将看到我们如何返回第二个 “o” 的索引。</p><p>如果你想知道索引数字是如何得出的，那么你应该注意到，一个字符串中的第一个字符的索引是 0，第二个字符的索引是 1，以此类推。</p><h3 id="indexof-int-char-int-fromindex-"><code>indexOf(int Char, Int fromIndex)</code> 方法实例</h3><p>下面是一个解释 <code>int indexOf(int char, int fromIndex)</code> 方法的例子：</p><pre><code>public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";
    
    System.out.println(greetings.indexOf("o", 5));
    
    // 7
  }
}
</code></pre><p>在上面的例子中，我们告诉 <code>indexOf</code> 方法要从第五个索引开始操作。</p><p>H =&gt; index 0</p><p>e =&gt; index 1</p><p>l =&gt; index 2</p><p>l =&gt; index 3</p><p>0 =&gt; index 4</p><p>请注意，索引 5 不是 “W” 这个字符，而是 “Hello” 和 “World” 之间的空格。</p><p>所以从上面的代码来看，在第 5 个索引之前的其他每个字符都将被忽略。7 被返回为第二个 “o” 字符的索引。</p><h3 id="int-indexof-string-str-"><code>Int indexOf(String Str)</code> 方法实例</h3><p>在下一个例子中，我们将了解返回子串索引的公共 <code>public int indexOf(String str)</code> 方法是如何工作的。</p><pre><code>public class Main {
  public static void main(String[] args) {
    String motivation = "Coding can be difficult but don't give up";
    
    System.out.println(motivation.indexOf("be"));
    
    // 11
  }
}
</code></pre><p>想知道为什么返回 11 吗？你应该看看上一节，了解索引是如何计算的，子串之间的空格也算作索引。</p><p>请注意，当子串被作为参数传入时，返回的索引是子串中第一个字符的索引——11 是 “b” 字符的索引。</p><h3 id="indexof-string-str-int-fromindex-"><strong><code>indexOf(String Str, Int fromIndex)</code> </strong>方法示例</h3><p>最后一个方法 <code>public int indexOf(String str, int fromIndex)</code>——与 <code>public int indexOf(int char, int fromIndex)</code> 方法相同，它从一个指定的位置返回一个索引。</p><p>下面是一个例子：</p><pre><code class="language-java">public class Main {
  public static void main(String[] args) {
    String motivation = "The for loop is used for the following";
    
    System.out.println(motivation.indexOf("for", 5));
    
    // 21
  }
}
</code></pre><p>在上面的例子中，我们指定该方法应该从第 5 个索引开始操作，也就是第一个 “for” 子串之后的索引。21 是第二个 “for” 子串的索引。</p><p>最后，当我们传入一个在字符串中不存在的字符或子串时，<code>indexOf</code> 方法将返回值 -1。下面是一个例子：</p><pre><code class="language-java">public class Main {
  public static void main(String[] args) {
    String motivation = "The for loop is used for the following";
    
    System.out.println(motivation.indexOf("code"));
    
    // -1
  }
}
</code></pre><h2 id="-"><strong>总结</strong></h2><p>在这篇文章中，我们学习了如何使用四个 <code>indexOf</code> 方法，用一个例子解释了每个不同的方法。</p><p>我们还看到了这些方法的语法是什么样子的，以及它们如何能够判断要返回的索引。</p><p>最后，我们展示了当一个不存在的字符或子串作为参数传入时会发生什么。</p><p>祝你编程愉快！</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何使用 Java charAt() 方法 ]]>
                </title>
                <description>
                    <![CDATA[ 原文：charAt() in Java – How to Use the Java charAt() Method [https://www.freecodecamp.org/news/charat-in-java-how-to-use-the-java-charat-method-2/] ，作者：Ihechikara Vincent Abba [https://www.freecodecamp.org/news/author/ihechikara/] Java 中的 charAt() 方法返回字符串中某个字符在给定或指定索引处的 char 值。 在这篇文章中，我们将看到如何使用 charAt() 方法，首先是它的语法，然后是一些使用示例。 如何使用 Java 的 charAt() 方法 这是 charAt() 方法的语法： public char charAt(int index) 注意，使用 charAt() 方法从字符串返回的字符具有 char 数据类型。我们将在文章的后面看到这对返回值的连接有何影响。 现在让我们看看一些例子。 public class Main  ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/charat-in-java-how-to-use-the-java-charat-method/</link>
                <guid isPermaLink="false">624bfd4599ec7406219e5772</guid>
                
                    <category>
                        <![CDATA[ Java ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Tue, 05 Apr 2022 07:00:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/04/charAt.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>原文：<a href="https://www.freecodecamp.org/news/charat-in-java-how-to-use-the-java-charat-method-2/">charAt() in Java – How to Use the Java charAt() Method</a>，作者：<a href="https://www.freecodecamp.org/news/author/ihechikara/">Ihechikara Vincent Abba</a></p><p>Java 中的 <code>charAt()</code> 方法返回字符串中某个字符在给定或指定索引处的 <code>char</code> 值。</p><p>在这篇文章中，我们将看到如何使用 <code>charAt()</code> 方法，首先是它的语法，然后是一些使用示例。</p><h2 id="-java-charat-">如何使用 Java 的 charAt() 方法</h2><p>这是 <code>charAt()</code> &nbsp;方法的语法：</p><pre><code class="language-java">public char charAt(int index)</code></pre><p>注意，使用 <code>charAt()</code> &nbsp;方法从字符串返回的字符具有 <code>char</code> 数据类型。我们将在文章的后面看到这对返回值的连接有何影响。</p><p>现在让我们看看一些例子。</p><pre><code class="language-java">public class Main {
  public static void main(String[] args) {
  
    String greetings = "Hello World";
    
    System.out.println(greetings.charAt(0));
    // H
  }
}</code></pre><p>在上面的代码中，我们的字符串——存储在一个叫作 <code>greetings</code> 的变量中——写着 “Hello World”。我们使用 <code>charAt()</code> 方法来获取索引为 <code>0</code> 的字符，即 <code>H</code>。</p><p>第一个字符的索引总是 <code>0</code>，第二个索引是 <code>1</code>，以此类推。子字符串之间的空格也算作一个索引。</p><p>在下一个例子中，我们将看到当我们试图将返回的不同字符连接起来时会发生什么。连接是指将两个或多个值连接在一起（在大多数情况下，这个术语用于连接字符串中的字符或子串）。</p><pre><code class="language-java">public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";
    
    char ch1 = greetings.charAt(0); // H
    char ch2 = greetings.charAt(4); // o
    char ch3 = greetings.charAt(9); // l
    char ch4 = greetings.charAt(10); // d
    
    System.out.println(ch1 + ch2 + ch3 + ch4);
    // 391
  }
}</code></pre><p>使用 <code>charAt()</code> 方法，我们得到了索引为 0、4、9 和 10 的字符，分别是 <code>H</code>、<code>o</code>、<code>l</code> 和 <code>d</code>。</p><p>然后我们尝试打印和连接这些字符：<code>System.out.println(ch1 + ch2 + ch3 + ch4);</code>。</p><p>但是我们没有得到返回的 <code>Hold</code>，而是得到了 <code>391</code>。这是因为返回的值不再是字符串，而是数据类型为 <code>char</code>。因此，当我们连接它们时，解释器会添加它们的 <a href="https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html">ASCII</a> 值。</p><p><code>H</code> 的 ASCII 值为 72，<code>o</code> 的值 为111，<code>l</code> 的值为 108，<code>d</code> 的值为 100。当我们把它们加在一起时，我们得到 391，这是在上一个例子中返回的。</p><h2 id="stringindexoutofboundsexception-"><strong>StringIndexOutOfBoundsException 错误</strong></h2><p>当我们传入的索引数超过了字符串中的字符数，我们就会在控制台中得到 StringIndexOutOfBoundsException 错误。</p><p>这个错误也适用于使用负数索引，这在 Java 中是不支持的。在像 Python 这样支持负数索引的编程语言中，传入 -1 会给你一个数据集的最后一个字符或值，类似于 0 总是返回第一个字符的情况。</p><p>下面是一个例子：</p><pre><code class="language-java">public class Main {
  public static void main(String[] args) {
    String greetings = "Hello World";
    
    char ch1 = greetings.charAt(20); 
    
    System.out.println(ch1);
    
    /* Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 20 
    */
  }
}


</code></pre><p>在上面的代码中，我们传入了一个 20 的索引：<code>char ch1 = greetings.charAt(20);</code> 这超过了 <code>greetings</code> 变量的字符数——所以我们得到了一个错误。你可以在上面的代码块中看到错误信息的注释。</p><p>同样，如果我们像这样传入一个负值：<code>char ch1 = greetings.charAt(-1);</code>，会得到一个类似的错误。</p><h2 id="-">总结</h2><p>在这篇文章中，我们学习了如何在 Java 中使用 <code>charAt()</code> 方法。我们看到了如何根据索引号返回字符串中的字符，以及当我们把这些字符连接起来时会发生什么。</p><p>最后，我们谈到了在 Java 中使用 <code>charAt()</code> 方法时，会得到错误响应的一些情况。</p><p>祝你编程愉快！</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
