<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Java on 映屿</title>
    <link>https://blog.verdant.ee/tags/java/</link>
    <description>Recent content in Java on 映屿</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    
      <managingEditor>i@glowisle.me (五葉地錦)</managingEditor>
    
    
      <webMaster>i@glowisle.me (五葉地錦)</webMaster>
    
    
    
    <lastBuildDate>Fri, 10 Jan 2025 15:05:00 +0000</lastBuildDate>
    
    
    <atom:link href="http://blog.verdant.ee/tags/java/atom.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Java面向对象编程——多态、抽象类、接口</title>
      <link>https://blog.verdant.ee/posts/186/</link>
      <pubDate>Fri, 10 Jan 2025 15:05:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/186/</guid>
      <description>&lt;h2 id=&#34;什么是多态&#34;&gt;什么是多态&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在继承/实现情况下的一种现象，表现为：对象多态、行为多态。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;多态的前提&#34;&gt;多态的前提&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;有&lt;strong&gt;继承/实&lt;/strong&gt;现关系；存在父类引用子类对象；&lt;strong&gt;存在方法重写&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;h2 id=&#34;多态的注意事项&#34;&gt;多态的注意事项&lt;/h2&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;多态是对象、行为的多态，成员变量不体现多态。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;使用多态的好处&#34;&gt;使用多态的好处&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在多态形式下，右边的对象是解耦合的，更便于拓展和维护。&lt;/li&gt;&#xA;&lt;li&gt;定义方法时，使用父类类型的形参，可以接收一切子类对象，扩展性更强、更便利。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;多态下产生的一个问题&#34;&gt;多态下产生的一个问题&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;多态下不能使用子类的独有功能。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;多态下的类型转换&#34;&gt;多态下的类型转换&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;自动类型转换：&lt;code&gt;父类 变量名 = new 子类();&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;强制类型转换： &lt;code&gt;子类 变量名 = (子类)父类变量&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;强制类型转换的注意事项&#34;&gt;强制类型转换的注意事项&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;存在继承/实现关系就可以在编译阶段进行强制类型转换，编译阶段不会报错。&lt;/li&gt;&#xA;&lt;li&gt;运行时，如果发现对象的真实类型与强转后的类型不同，就会报类型转换异常(ClassCastException)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;强转前java建议&#34;&gt;强转前，Java建议：&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用instanceof关键字，判断当前对象的真是类型，再进行强制类型转换。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;final&#34;&gt;final&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;final关键字的中文是最终的意思，可以修饰类、方法、变量&#xA;&lt;ul&gt;&#xA;&lt;li&gt;修饰类：该类被称为最终类，特点是不能被继承了。&lt;/li&gt;&#xA;&lt;li&gt;修饰方法：该方法被称为最终方法，特点是不能被重写了。&lt;/li&gt;&#xA;&lt;li&gt;修饰变量：该变量只能被赋值一次。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;常量&#34;&gt;常量&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用了static final 修饰的成员变量就被称为常量；&lt;/li&gt;&#xA;&lt;li&gt;作用：通常用于记录系统的配置信息。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;注意：常量的命名规范：使用大写英文单词，多个单词使用下划线连接起来。&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;视同常量记录系统配置信息的优势执行原理&#34;&gt;视同常量记录系统配置信息的优势、执行原理&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;代码可读性更好、可维护性也更好。&lt;/li&gt;&#xA;&lt;li&gt;程序编译后，常量会被宏替换：出现常量的地方全部会被替换成其记住的字面量，这样可以保证使用常量和直接用字面量的性能是一样的。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;抽象类&#34;&gt;抽象类&lt;/h2&gt;&#xA;&lt;h3 id=&#34;什么是抽象类&#34;&gt;什么是抽象类&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Java中有个关键字叫abstract，他就是抽象的意思，可以用来修饰类、成员方法&lt;/li&gt;&#xA;&lt;li&gt;abstract修饰类，这个就是抽象类，修饰成员方法同理。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;抽象类的注意事项特点&#34;&gt;抽象类的注意事项、特点&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;抽象类中不一定有抽象方法，有抽象方法的类一定是抽象类。&lt;/li&gt;&#xA;&lt;li&gt;类该有的成员（成员变量、方法、构造器）抽象类都可以有。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;抽象类最主要的特点：&lt;/strong&gt; 抽象类不能创建对象，仅作为一种特殊的父类，让子类继承并实现。&lt;/li&gt;&#xA;&lt;li&gt;一个类继承抽象类，必须重写完抽象类的全部抽象方法，否则这个类也必须定义成抽象类。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;抽象类的使用场景和好处&#34;&gt;抽象类的使用场景和好处&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;父类知道每个子类都要做某个行为，但每个子类做的情况不一样，父类就定义成抽象方法，交给子类去重写实现，我们设计这样的抽象类，就是为了更好的支持多态。&lt;del&gt;爸爸画饼儿子烙饼&lt;/del&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;接口&#34;&gt;接口&lt;/h2&gt;&#xA;&lt;h3 id=&#34;接口概述&#34;&gt;接口概述&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Java提供了一个关键字interface，用这个关键字我们可以定义出一个特殊的结构：接口。&lt;/li&gt;&#xA;&lt;li&gt;注意：接口不能创建对象；接口是用来被类实现（implements）的，实现接口的类被称为实现类。&lt;/li&gt;&#xA;&lt;li&gt;一个类可以实现多个接口，实现类实现多个接口必须重写完全部接口的全部抽象方法，否则实现类需要定义成抽象类。&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Java面向对象编程——继承</title>
      <link>https://blog.verdant.ee/posts/185/</link>
      <pubDate>Fri, 10 Jan 2025 13:19:11 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/185/</guid>
      <description>&lt;h2 id=&#34;什么是继承&#34;&gt;什么是继承&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Java中提供了一个关键字&lt;code&gt;extends&lt;/code&gt;，用这个关键字，可以让一个类和另一个类建立起父子关系。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;继承的特点&#34;&gt;继承的特点&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;子类能继承父类的非私有成员变量和成员方法。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;继承后对象的创建&#34;&gt;继承后对象的创建&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;子类的对象是由子类、父类共同完成的。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;继承相关的注意事项&#34;&gt;继承相关的注意事项&lt;/h2&gt;&#xA;&lt;h3 id=&#34;权限修饰符&#34;&gt;权限修饰符&lt;/h3&gt;&#xA;&lt;h4 id=&#34;什么是权限修饰符&#34;&gt;什么是权限修饰符？&lt;/h4&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;用来限制类中的成员（成员变量、成员方法、构造器、代码块&amp;hellip;）能够被访问的范围&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;权限修饰符有几种与各自的作用&#34;&gt;权限修饰符有几种与各自的作用&lt;/h3&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;修饰符&lt;/th&gt;&#xA;          &lt;th&gt;在本类中&lt;/th&gt;&#xA;          &lt;th&gt;同一个包下的其他类&lt;/th&gt;&#xA;          &lt;th&gt;任意包下的子类&lt;/th&gt;&#xA;          &lt;th&gt;任意包下的任意类&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;private&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;缺省&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;protected&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;public&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;          &lt;td&gt;√&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;provate &amp;lt; 缺省 &amp;lt; protected &amp;lt; public&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;          &lt;td&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;h2 id=&#34;单继承&#34;&gt;单继承&lt;/h2&gt;&#xA;&lt;p&gt;Java是&lt;strong&gt;继承&lt;/strong&gt;的，Java中的类&lt;strong&gt;不支持多继承&lt;/strong&gt;，但是支持&lt;strong&gt;多层继承&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;object类&#34;&gt;Object类&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Ojbect类是所有Java类的父类，任何类都是Object的子类。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;方法重写&#34;&gt;方法重写&lt;/h2&gt;&#xA;&lt;h3 id=&#34;什么是方法重写&#34;&gt;什么是方法重写&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;当子类发现父类中的方法无法满足自己的需求时，&lt;strong&gt;子类可以重写一个方法名称、参数列表一样的方法&lt;/strong&gt;去覆盖父类的这个方法，这就是方法重写。&lt;/li&gt;&#xA;&lt;li&gt;注意：方法重写后，方法的访问遵循&lt;strong&gt;就近原则&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;方法重写的注意事项&#34;&gt;方法重写的注意事项&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;重写时使用&lt;strong&gt;Override注解&lt;/strong&gt;，他可以指定Java编译器，检查我们方法重写的格式是否正确，代码可读性也会更好。&lt;/li&gt;&#xA;&lt;li&gt;子类重写父类方法时，访问权限必须大于或等于父类该方法的权限（&lt;strong&gt;public &amp;gt; protected &amp;gt; 缺省&lt;/strong&gt;）。&lt;/li&gt;&#xA;&lt;li&gt;重写的方法返回值类型，必须与被重写方法的返回值类型一样，或者范围更小。&lt;/li&gt;&#xA;&lt;li&gt;私有方法、静态方法不能被重写，如果重写会报错。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;方法重写在开发中的常见应用场景&#34;&gt;方法重写在开发中的常见应用场景&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;子类重写Object类的toString()方法，以便返回对象的内容。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;子类中访问其他成员的特点&#34;&gt;子类中访问其他成员的特点&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在子类方法中访问其他成员是按照就近原则的。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;先子类局部范围找。&lt;/li&gt;&#xA;&lt;li&gt;然后子类成员范围找。&lt;/li&gt;&#xA;&lt;li&gt;然后父类成员找&lt;/li&gt;&#xA;&lt;li&gt;然后父类成员范围找，如果父类范围还没有找到则报错。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;如果子父类中，出现了重名的成员，会优先使用子类的，如果此时一定要在子类中使用父类的方法怎么办？&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;可以通过&lt;code&gt;super&lt;/code&gt;关键字，指定访问父类的成员：&lt;code&gt;super.父类成员变量/父类成员方法&lt;/code&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;子类构造器的特点&#34;&gt;子类构造器的特点&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;子类的全部构造器，都会先调用父类的构造器，再执行自己。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;子类构造器是如何实现调用父类构造器的&#34;&gt;子类构造器是如何实现调用父类构造器的：&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;默认情况下，子类全部构造器的第一行代码是&lt;code&gt;super();&lt;/code&gt;（写不写都有），他会调用父类的无参数构造器。&lt;/li&gt;&#xA;&lt;li&gt;如果父类没有无参数构造器，我们必须在子类构造器的第一行手写&lt;code&gt;super();&lt;/code&gt;，指定去调用父类的构造器。&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
    <item>
      <title>修复Geyser下基岩版玩家无法在地狱基岩层放置方块</title>
      <link>https://blog.verdant.ee/posts/184/</link>
      <pubDate>Wed, 08 Jan 2025 17:26:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/184/</guid>
      <description>&lt;p&gt;在&lt;code&gt;plugins\Geyser-Spigot\config.yml&lt;/code&gt;中把第160行的&lt;code&gt;above-bedrock-nether-building: false&lt;/code&gt;改为&lt;code&gt;true&lt;/code&gt;，重启服务器，问题解决~&#xA;原理：geyser把下界翻译成了末地，会导致下界天空变成末地的样式，不过可以解决基岩版玩家在地狱基岩层的问题。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Spigot服务端控制台中文乱码解决方案</title>
      <link>https://blog.verdant.ee/posts/181/</link>
      <pubDate>Sat, 04 Jan 2025 08:35:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/181/</guid>
      <description>&lt;ol&gt;&#xA;&lt;li&gt;把&lt;code&gt;-Dfile.encoding=UTF-8&lt;/code&gt;加在开服脚本文件的&lt;code&gt;-jar&lt;/code&gt;前即可。&lt;/li&gt;&#xA;&lt;li&gt;在启动脚本第一行加上&lt;code&gt;chcp 65001&lt;/code&gt;&#xA;我的启动脚本如下：&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;chcp &lt;span style=&#34;color:#d699b6&#34;&gt;65001&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;java -Dfile.encoding&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;UTF-8 -jar spigot-1.21.jar&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>String的注意事项</title>
      <link>https://blog.verdant.ee/posts/171/</link>
      <pubDate>Thu, 19 Dec 2024 22:28:15 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/171/</guid>
      <description>&lt;h1 id=&#34;string的注意事项&#34;&gt;String的注意事项&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;String对象的内容不可改变， 被称为不可变字符串对象。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;只要是以“&amp;hellip;”的方式写出的字符串，都会存储到字符串常量池，且相同的字符串只存储一份；&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;但通过new方式创建字符串对象，每new一次都会产生一个新的对象放在堆内存中。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;不可变字符串对象&#34;&gt;不可变字符串对象&lt;/h1&gt;&#xA;&lt;p&gt;不可变？它肯定可变啊，比如&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;package&lt;/span&gt; string;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; StringDemo3 {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        String name &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;yingyu5658&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        name &lt;span style=&#34;color:#7a8478&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;.me&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        name &lt;span style=&#34;color:#7a8478&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;域名&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(name);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这时候把name打印出来不就是&lt;code&gt;yingyu5658.me域名&lt;/code&gt;了吗？&#xA;&lt;strong&gt;每次试图改变字符串对象实际上是新产生可字符串对象，变量每次都与指向了新的字符串对象，之前字符串对象的内容确实是没有改变的，因此说String的对象都是不可变的。&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;第二点注意事项&#34;&gt;第二点注意事项&lt;/h1&gt;&#xA;&lt;p&gt;示例代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;package&lt;/span&gt; string;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; StringDemo3 {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        String s1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;abc&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        String s2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;abc&amp;#34;&lt;/span&gt;;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(s1 &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; s2);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//true  &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里使用双等来判断两个变量的地址是否相同，返回结果为&lt;code&gt;true&lt;/code&gt;,也就是说，地址是相同的。&#xA;原理：上文提到，双引号包裹住的字符串，会被保存到字符串常量池中，&lt;strong&gt;且相同的字符串只存储一份&lt;/strong&gt;。这里我们声明了两个内容为abc的String类型变量。Java是很聪明的，当我们把s2声明，它要存到字符串常量池时，看到内容一样，就不再存了，而是把&lt;strong&gt;s2也指向abc&lt;/strong&gt;，因此s1地址和s2地址是一样的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;new&#34;&gt;new&lt;/h2&gt;&#xA;&lt;p&gt;示例代码：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;package&lt;/span&gt; string;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; StringDemo3 {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;char&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; chars &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;};  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       String a1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; String(chars);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       String a2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt;  &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; String(chars);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(a1 &lt;span style=&#34;color:#7a8478&#34;&gt;==&lt;/span&gt; a2);  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//false  &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上文提到，每new一次就会创建一个新的对象，所以此时再比较两者地址，返回false，是不同的。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>面向对象编程总结</title>
      <link>https://blog.verdant.ee/posts/166/</link>
      <pubDate>Wed, 18 Dec 2024 16:30:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/166/</guid>
      <description>&lt;p&gt;面向对象（oop）&lt;/p&gt;&#xA;&lt;h2 id=&#34;面向对象编程的思想面向拿或者找&#34;&gt;面向对象编程的思想：面向。拿或者找。&lt;/h2&gt;&#xA;&lt;p&gt;对象：东西&#xA;面向对象编程：拿东西过来编程&#xA;面向对象：把现实世界中的食物看成一个一个对象来解决问题的。（万物皆 对象）&#xA;面向对象的好处：代码更符合人类的思维习惯。编程更简单。看程序更容易理解（？）&lt;/p&gt;&#xA;&lt;h2 id=&#34;类对象&#34;&gt;类、对象：&lt;/h2&gt;&#xA;&lt;p&gt;类（设计图）：相同事物，共同特征的描述。&#xA;对象：对象是类的具体的实例。&#xA;对象 = 实例&#xA;在Java中必须先定义类，才能得到对象&lt;/p&gt;&#xA;&lt;h2 id=&#34;定义类来创建对象使用&#34;&gt;定义类来创建对象使用&lt;/h2&gt;&#xA;&lt;h3 id=&#34;定义类的格式&#34;&gt;定义类的格式&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;成员变量（代表属性，一般是名词）：数据类型 名称;&lt;/li&gt;&#xA;&lt;li&gt;成员方法（代表行为，一般是动词）&lt;/li&gt;&#xA;&lt;li&gt;构造器（前面的区域以后再来探索吧）&lt;/li&gt;&#xA;&lt;li&gt;代码块（前面的区域以后再来探索吧）&lt;/li&gt;&#xA;&lt;li&gt;内部类（前面的区域以后再来探索吧）&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;类中具体怎么写&#34;&gt;类中具体怎么写：&lt;/h3&gt;&#xA;&lt;p&gt;一般名词定义成成员变量（属性）&#xA;&lt;code&gt;修饰符 数据类型 变量名称 = 初始值&lt;/code&gt;&#xA;成员变量不建议给初始值，它存在默认值。&lt;/p&gt;&#xA;&lt;h3 id=&#34;一般动词定义成方法行为&#34;&gt;一般动词定义成方法（行为）&lt;/h3&gt;&#xA;&lt;h4 id=&#34;创建对象&#34;&gt;创建对象&lt;/h4&gt;&#xA;&lt;p&gt;&lt;code&gt;类名 对象名 = new 构造器();&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;对象使用&#34;&gt;对象使用：&lt;/h3&gt;&#xA;&lt;p&gt;&lt;code&gt;对象名.成员变量&lt;/code&gt;&#xA;&lt;code&gt;对象名.成员方法&lt;/code&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;构造器&#34;&gt;构造器&lt;/h2&gt;&#xA;&lt;pre&gt;&lt;code&gt;&#x9;作用：&#xA;&#x9;&#x9;初始化一个累的对象并且返回这个类的地址。&#xA;&#x9;&#x9;详细格式：修饰符 类名(形参){...}&#xA;&#x9;&#x9;构造器的分类：&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;无参数构造器：初始化一个类的对象，里面的数据都是默认值，并返回地址。&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;有参数构造器：初始化一个类的对象，并返回地址，并且可以同时为对象赋值。&#xA;&#x9;&#x9;构造器如何调用：&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;类名 对象 = new 构造器;&#xA;&#x9;&#x9;注意：任何类写出来，自带无参数构造器&#xA;&#x9;&#x9;&#x9;   但是在这个类中定义了一个有参数构造器了，那么无参数构造器就消失了，此时如果还要使用无参数构造器，必须自己写一个。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;this关键字&#34;&gt;this关键字&lt;/h2&gt;&#xA;&lt;p&gt;作用：代表了当前对象的地址。可以访问当前对象的成员变量信息和成员方法&lt;/p&gt;&#xA;&lt;h3 id=&#34;具体应用场景&#34;&gt;具体应用场景&lt;/h3&gt;&#xA;&lt;p&gt;可以用在有参数构造器中&#xA;可以用在方法中&lt;/p&gt;&#xA;&lt;h2 id=&#34;封装&#34;&gt;封装&lt;/h2&gt;&#xA;&lt;p&gt;面向对象三大特征：封装、继承、多态。&#xA;封装的基本思想：决定属性和行为归属谁的问题。&lt;/p&gt;&#xA;&lt;h2 id=&#34;如何更好的封装&#34;&gt;如何更好的封装：&lt;/h2&gt;&#xA;&lt;p&gt;成员变量私有化，只能在本类访问。&lt;/p&gt;&#xA;&lt;h4 id=&#34;合理暴露&#34;&gt;合理暴露&lt;/h4&gt;&#xA;&lt;p&gt;提供成套的getter和setter方法暴露取值赋值。&lt;/p&gt;&#xA;&lt;h2 id=&#34;标准javabean&#34;&gt;标准JavaBean&lt;/h2&gt;&#xA;&lt;p&gt;JavaBean是什么：是实体类。&#xA;作用：创建对象，封装数据。&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Java面向对象编程快速入门</title>
      <link>https://blog.verdant.ee/posts/98/</link>
      <pubDate>Sun, 01 Dec 2024 13:05:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/98/</guid>
      <description>&lt;h1 id=&#34;什么是面向对象编程&#34;&gt;什么是面向对象编程&lt;/h1&gt;&#xA;&lt;p&gt;通俗易懂的说，就是把一坨一坨的数据放到一起存储&#xA;比如要存储一个学生的语文成绩和数学成绩&#xA;新建一个类&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; Student {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    String name;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//名字&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;double&lt;/span&gt; chinese;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//语文成绩&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#dbbc7f&#34;&gt;double&lt;/span&gt; math;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//数学成绩&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;printTotalScore&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(name &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;的总成绩是&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; (chinese &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; math));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;printAverageScore&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(name &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;的平均成绩是&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; (chinese &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; math) &lt;span style=&#34;color:#7a8478&#34;&gt;/&lt;/span&gt; 2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;0&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样学生的模板就创建好了，但是这个模板还没有指向学生的每一个个体。我们可以再同一个包下再新建一个类。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; Test {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//1.创建宇哥学生对象来封装学生a的数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Student s1 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Student();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;学生a&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;chinese&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 100;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;math&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 100;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;printTotalScore&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s1.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;printAverageScore&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//2.再创建一个学生对象，封装学生b的数据&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Student s2 &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; Student();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;学生b&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;chinese&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 100;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;math&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 59;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;printTotalScore&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        s2.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;printAverageScore&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;用以上代码新建一个学生类并且调用我们之前写好的功能&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;开发一个一个的对象，把数据交给对象，再用调用对象的方法来完成对数据的处理，这种方法叫&lt;strong&gt;面向对象编程&lt;/strong&gt;。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
    <item>
      <title>深刻认识面向对象</title>
      <link>https://blog.verdant.ee/posts/99/</link>
      <pubDate>Sun, 01 Dec 2024 13:31:00 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/99/</guid>
      <description>&lt;p&gt;面向对象编程的好处&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;按照&lt;strong&gt;詹姆斯·高斯林&lt;/strong&gt;的看法，世间万物都是对象。好比要出去旅游，你要找到车这个对象调用他的行驶功能使用来带你出去旅游。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;所以面向对象编程的好处就是：&lt;strong&gt;符合人类思维习惯，编程更简单，更直观&lt;/strong&gt;。&lt;/p&gt;&#xA;&lt;h1 id=&#34;程序中的对象到底是什么&#34;&gt;程序中的对象到底是什么&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;对象本质上是一种&lt;strong&gt;特殊的数据结构&lt;/strong&gt;，很像数据库，但是数据库是持久存储的数据。体现出计算机各个学科的交叉。&#xA;一开始设计的类就是一张表，后续在其他类中填入这张表的内容。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;对象是怎么出来的&#34;&gt;对象是怎么出来的&lt;/h1&gt;&#xA;&lt;p&gt;class也就是&lt;strong&gt;类&lt;/strong&gt;，也称为&lt;strong&gt;对象的设计图&lt;/strong&gt;（或者&lt;strong&gt;对象的模板&lt;/strong&gt;）&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;类里可以设计很多变量，用来说明对象可以处理什么数据。&lt;/li&gt;&#xA;&lt;li&gt;类里还可以设计很多的方法，描述对象有什么功能，也就是要对数据进行什么样的处理。&#xA;接下来我们就可以在程序中new对象了&#xA;&lt;strong&gt;也就是先用class设计对象，然后再用class new出对象。&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;具体使用语法见上一篇文章[post cid=&amp;ldquo;98&amp;rdquo; /]&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Java方法的传参原理</title>
      <link>https://blog.verdant.ee/posts/95/</link>
      <pubDate>Sat, 30 Nov 2024 20:14:00 +0000</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/95/</guid>
      <description>&lt;h2 id=&#34;java方法的参数传递机制-基本类型&#34;&gt;Java方法的参数传递机制-基本类型&lt;/h2&gt;&#xA;&lt;p&gt;值传递&lt;/p&gt;&#xA;&lt;h3 id=&#34;值传递是什么&#34;&gt;值传递是什么&lt;/h3&gt;&#xA;&lt;p&gt;在传输实参给方法的形参的时候，&lt;strong&gt;传输的是实参变量中存储的副本&lt;/strong&gt;&#xA;说人话，把实参里面的东西赋值了一部分扔了给形参&lt;/p&gt;&#xA;&lt;h2 id=&#34;值传递具体理解案例&#34;&gt;值传递具体理解案例&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;class&lt;/span&gt; prameter {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 10; &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//定义一个int变量a赋值为10&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        change(a); &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//调用change方法&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; a); &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//打印mian a中的值&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//这里开始写方法&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;change&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;change1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; a); &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//打印方法中a的值&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        a &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 20;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;change2&amp;#34;&lt;/span&gt;a); &lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//打印赋值后a的值&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;我们运行以后，控制台输出的结果为&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;change1 10&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;change2 20&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;main 10&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;为什么main中打印的不是赋值后的20&#34;&gt;为什么main中打印的不是赋值后的20？&lt;/h2&gt;&#xA;&lt;p&gt;这就要提到刚才的概念：&lt;strong&gt;值传递&lt;/strong&gt;&#xA;我们定义了一个变量&lt;code&gt;a = 10；&lt;/code&gt;,在方法中&lt;code&gt;public static void change(int a)&lt;/code&gt;&#xA;由于&lt;strong&gt;值传递&lt;/strong&gt;，也就是把值复制了一分传给方法，所以我们方法里用的值永远都是刚刚定义的&lt;code&gt;int a = 10;&lt;/code&gt;，所以&lt;code&gt;change(a); = change(10);&lt;/code&gt;&#xA;我们后面再赋值，打印出来的结果还是10，除非你把变量定义的代码改了，否则方法里的值不会变。&lt;/p&gt;&#xA;&lt;h2 id=&#34;引用类型的参数传递&#34;&gt;引用类型的参数传递&lt;/h2&gt;&#xA;&lt;p&gt;引用类型的参数传递也满足值传递，但代码中会有不同的地方。&#xA;示例代码&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; arrs &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt;{10,20,30};&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        change(arrs);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;change&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; arrs) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;方法内1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 222;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;方法内2&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;结果：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;方法内1：20&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;方法内2：222&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;main：222&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上一篇文章提到了栈内存的执行顺序，根据上一篇所讲，代码执行顺序如下:&#xA;1.先执行&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;change&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt;&lt;span style=&#34;color:#7a8478&#34;&gt;[]&lt;/span&gt; arrs) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;方法内1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 222;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;方法内2&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.再回到main方法&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;main&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; arrs&lt;span style=&#34;color:#7a8478&#34;&gt;[&lt;/span&gt;1&lt;span style=&#34;color:#7a8478&#34;&gt;]&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;在1时进行打印，结果得到数组内第二个位置存储的20.&#xA;代码继续向下执行，第二个位置被赋值为222，此时再打印它，结果得到222.&#xA;这时候change方法执行完，它在栈内存中会被清除，然后回到main方法，由于刚才change方法中对arr[1]进行了赋值，所以我们再打印，结果得到的还是它赋值出来的222.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Java方法的基本使用</title>
      <link>https://blog.verdant.ee/posts/89/</link>
      <pubDate>Fri, 29 Nov 2024 20:45:20 +0800</pubDate><author>i@glowisle.me (五葉地錦)</author>
      <guid>https://blog.verdant.ee/posts/89/</guid>
      <description>&lt;h1 id=&#34;方法是什么&#34;&gt;方法是什么&lt;/h1&gt;&#xA;&lt;p&gt;方法是一种语法结构，它可以把代码封装成一段功能，以便重复调用。&lt;/p&gt;&#xA;&lt;p&gt;方法的完整格式：&lt;/p&gt;&#xA;&lt;p&gt;例子：数字求和&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt;  &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;sum&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; a,&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; b){&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; c &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; a &lt;span style=&#34;color:#7a8478&#34;&gt;+&lt;/span&gt; b;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;return&lt;/span&gt; c;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;方法的调用：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; rs&lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; sum(10,20);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;方法使用的注意点&#34;&gt;方法使用的注意点：&lt;/h2&gt;&#xA;&lt;p&gt;方法申明了具体的返回值类型，内部必须使用return返回对应类型的数据。&lt;/p&gt;&#xA;&lt;p&gt;形参列表可以有多个，甚至可没有；如果有多个形参，必须用英文逗号隔开，且不能给初始化值&lt;/p&gt;&#xA;&lt;h2 id=&#34;使用方法的好处&#34;&gt;使用方法的好处&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;提高代码的复用性，提高了开发效率&lt;/li&gt;&#xA;&lt;li&gt;让程序逻辑性更清晰&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;方法的其他定义形式&#34;&gt;方法的其他定义形式&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d6cbb4;background-color:#252b2e;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e67e80&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#e67e80&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#dbbc7f&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#b2c98f&#34;&gt;printHelloWorld&lt;/span&gt;(&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; n) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e67e80&#34;&gt;for&lt;/span&gt; (&lt;span style=&#34;color:#dbbc7f&#34;&gt;int&lt;/span&gt; i &lt;span style=&#34;color:#7a8478&#34;&gt;=&lt;/span&gt; 1; i &lt;span style=&#34;color:#7a8478&#34;&gt;&amp;lt;=&lt;/span&gt;n; i&lt;span style=&#34;color:#7a8478&#34;&gt;++&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            System.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#d699b6;font-weight:bold&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#b2c98f&#34;&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#859289;font-style:italic&#34;&gt;//打印三行helloworld（使用方法）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;如果方法不需要返回数据，返回类型必须申明成&lt;code&gt;void&lt;/code&gt;此时方法内部可以不使用return返回数据。&lt;/li&gt;&#xA;&lt;li&gt;方法如果不需要接收数据，则不需要定义形参，调用方法时也不可以传数据给方法了。&lt;/li&gt;&#xA;&lt;li&gt;没有参数，且没有返回类型（void）申明的方法，称为&lt;strong&gt;无参数、无返回值的方法&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
    </item>
  </channel>
</rss>
