余建华 發表於 2026-3-18 00:10:00

Java 基础 (Java 入门笔记)

<p>这篇文章是按照 B 站狂神说的 Java 零基础课程的内容整理的 (实际上就是学习笔记的性质).</p>
<p>希望我能够坚持下去o(≧口≦)o</p>
<p></p><div class="toc"><div class="toc-container-header">目录</div><ul><li>数据类型与转换<ul><li>数据类型<ul><li>基本数据类型</li><li>进制</li></ul></li><li>类型转换<ul><li>强制转换</li><li>自动转换</li><li>注意</li></ul></li></ul></li><li>变量和常量<ul><li>变量<ul><li>变量作用域<ul><li>局部变量</li><li>实例变量</li><li>类变量</li></ul></li></ul></li><li>常量</li><li>命名规则</li></ul></li><li>运算符<ul><li>算数运算符<ul><li>加, 减, 乘, 除, 模</li><li>自增自减</li></ul></li><li>比较运算</li><li>逻辑运算符<ul><li>短路运算</li></ul></li><li>位运算</li><li>扩展赋值运算符</li><li>条件运算符</li></ul></li><li>包</li><li>JavaDoc<ul><li>使用命令提示符生成 JavaDoc 文档</li><li>使用 IDEA 生成 JavaDoc 文档</li></ul></li></ul></div><p></p>
<h1 id="数据类型与转换">数据类型与转换</h1>
<p>Java 是一种强类型语言, 变量需要定义后才能使用.</p>
<h2 id="数据类型">数据类型</h2>
<h3 id="基本数据类型">基本数据类型</h3>
<p><img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260317235547185-616687858.png" alt="屏幕截图 2026-03-08 214738" loading="lazy"></p>
<p><strong>整数</strong>: <code>byte</code>, <code>short</code>, <code>int</code>, <strong><code>long</code></strong> (<code>long</code> 类型须在数字后加<code>L</code>) .</p>
<p>​        分别占用 1B, 2B, 4B, 8B.</p>
<p><strong>浮点数</strong>: <strong><code>float</code></strong>, <code>double</code> (<code>float</code> 类型须在数字后加 <code>F</code>) .</p>
<p>​        分别占用 4B,8B.</p>
<p>​        <em>需注意: <code>float</code> 有舍入误差,需避免使用 <code>float</code> 进行比较.</em></p>
<p><strong>字符</strong>: <code>char</code>, <code>String</code> (<code>String</code> 不是关键字, 是一种引用类型) .</p>
<p>​        <code>char</code> 使用单引号, 而 <code>String</code> 使用双引号.</p>
<pre><code class="language-java">char letter1 = 'A';
String letter2 = "B";
</code></pre>
<p><strong>布尔值</strong>: <code>boolean</code>.</p>
<p>​        表示 "是" 与 "非".</p>
<pre><code class="language-java">boolean flag = ture;
if(flag == ture){}
if(flag ==) {}//这种写法更常用.
</code></pre>
<h3 id="进制">进制</h3>
<table>
<thead>
<tr>
<th style="text-align: center">进制</th>
<th style="text-align: center">前缀</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center">二进制</td>
<td style="text-align: center"><code>0b</code></td>
</tr>
<tr>
<td style="text-align: center">八进制</td>
<td style="text-align: center"><code>0</code></td>
</tr>
<tr>
<td style="text-align: center">十进制</td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td style="text-align: center">十六进制</td>
<td style="text-align: center"><code>0x</code></td>
</tr>
</tbody>
</table>
<pre><code class="language-java">char character = 'A';
System.out.println((int)character);//加上int可以打印出字符的Unicode编码.(强制转化)
</code></pre>
<h2 id="类型转换">类型转换</h2>
<p>由于 Java 是强类型语言, 需要进行类型转化 (将不同类型转为相同类型) .</p>
<p><img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260318000033707-2133231042.png" alt="屏幕截图 2026-03-10 231023" loading="lazy"></p>
<h3 id="强制转换">强制转换</h3>
<p>由<strong>高</strong>到<strong>低</strong>, <strong>手动</strong>转换.</p>
<p>格式: <code>(类型)变量名 </code></p>
<pre><code class="language-java">int a = 128;
byte b = (byte) a;
</code></pre>
<p>运算中只要有一个变量被转换了, 其他的也会一同被转换.</p>
<h3 id="自动转换">自动转换</h3>
<p>由<strong>低</strong>到<strong>高</strong>, <strong>自动</strong>转换.</p>
<pre><code class="language-java">int a = 128;
double b = a;
</code></pre>
<h3 id="注意">注意</h3>
<ol>
<li>
<p>布尔值不可以参与转换.</p>
</li>
<li>
<p>不可以转换成不相干的类型.</p>
</li>
<li>
<p>转换中可能会出现内存溢出和精度问题.</p>
</li>
</ol>
<pre><code class="language-java">System.out.println((int) 12.3); //打印12, 丢失精度.
System.out.println((byte) 128);//打印-128, 内存溢出.
</code></pre>
<p>操作大数目时, 需要注意内存溢出.</p>
<pre><code class="language-java">int num1 = 10_0000_0000;
int num2 = 20;
System.out.println(num1 * num2); //由于内存溢出, 输出-1474836480.
long sum = num1 * (long) num2;//进行一处类型转换.
System.out.println(sum);//顺利打印出20000000000.
</code></pre>
<h1 id="变量和常量">变量和常量</h1>
<h2 id="变量">变量</h2>
<p>Java 的每个变量必须声明其类型后才能使用.</p>
<p>变量是程序中最基本的单元, 包括<strong>变量名</strong>, <strong>变量类型</strong>及<strong>作用域</strong>.</p>
<p>使用 <code>类型 变量名 [=值]</code> 进行定义,可以用逗号隔开以声明多个同类型的变量 (不建议) .</p>
<pre><code class="language-java">int a = 1, b = 2, c = 3;//为了程序可读性, 不要一行定义多个变量!
</code></pre>
<h3 id="变量作用域">变量作用域</h3>
<h4 id="局部变量">局部变量</h4>
<p>只能在一个方法里面使用, <strong>必须声明和初始化</strong></p>
<p>​        <em>方法: 如有<code>public static void main(String[] args)</code>, 则有 <code>main</code>方法.</em></p>
<h4 id="实例变量">实例变量</h4>
<p>从属于对象.</p>
<pre><code class="language-java">public class Demo {
    int num = 23;
    String char1 = "abc";

    public static void main(String[] args) {
      Demo Demo = new Demo();//new就是在内存中开辟了一块空间,可以对里面的数据进行操作.
      System.out.println(Demo.num);//打印23.
      System.out.println(Demo.char1);//打印abc.
    }
}
</code></pre>
<p>如不初始化, 则会输出<strong>默认值</strong> (0, 0.0, ect.)</p>
<p>布尔值的默认值为 <code>false</code>.</p>
<p>除了基本类型, 其他类型默认值均为 <code>null</code>.</p>
<h4 id="类变量">类变量</h4>
<p>从属于类, 使用 <code>static</code> 进行定义.</p>
<p><code>static</code> 是一种<strong>修饰符</strong>, 修饰符<strong>不区分前后顺序</strong>.</p>
<pre><code class="language-Java">public class Demo {
    static int num = 23;

    public static void main(String[] args) {
      System.out.println(Demo.num);//不需要new便能成功执行.
    }
}
</code></pre>
<h2 id="常量">常量</h2>
<p>初始化后不能改变值, 可视作一种特殊的变量, 使用<code>final</code>进行定义.</p>
<p><code>final</code> 也是一种修饰符.</p>
<p>常量名称一般使用大写字母.</p>
<h2 id="命名规则">命名规则</h2>
<p>所有变量, 方法, 类名, 都需要遵循<strong>见名知意</strong>原则.</p>
<table>
<thead>
<tr>
<th style="text-align: center">类型</th>
<th style="text-align: center">大小写</th>
<th style="text-align: center">驼峰原则</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center">类成员变量</td>
<td style="text-align: center">首字母<strong>小</strong>写</td>
<td style="text-align: center">✓</td>
</tr>
<tr>
<td style="text-align: center">局部变量</td>
<td style="text-align: center">首字母<strong>小</strong>写</td>
<td style="text-align: center">✓</td>
</tr>
<tr>
<td style="text-align: center">常量</td>
<td style="text-align: center"><strong>全部大写</strong>, 使用 <strong><code>_</code>分割</strong></td>
<td style="text-align: center">-</td>
</tr>
<tr>
<td style="text-align: center">类名</td>
<td style="text-align: center">首字母<strong>大</strong>写</td>
<td style="text-align: center">✓</td>
</tr>
<tr>
<td style="text-align: center">方法名</td>
<td style="text-align: center">首字母<strong>小</strong>写</td>
<td style="text-align: center">✓</td>
</tr>
</tbody>
</table>
<p><strong>驼峰原则</strong>: 除了第一个单词, 每个单词首字母大写.</p>
<h1 id="运算符">运算符</h1>
<table>
<thead>
<tr>
<th style="text-align: center">名称类型</th>
<th style="text-align: center">符号</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align: center">算数运算符</td>
<td style="text-align: center"><code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>%</code>, <code>++</code>, <code>--</code></td>
</tr>
<tr>
<td style="text-align: center">赋值运算符</td>
<td style="text-align: center"><code>=</code></td>
</tr>
<tr>
<td style="text-align: center">关系运算符</td>
<td style="text-align: center"><code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, <code>&lt;=</code>, <code>==</code>, <code>!=</code>, <code>instanceof</code></td>
</tr>
<tr>
<td style="text-align: center">逻辑运算符</td>
<td style="text-align: center"><code>&amp;&amp;</code>, `</td>
</tr>
<tr>
<td style="text-align: center">位运算符</td>
<td style="text-align: center"><code>&amp;</code>, `</td>
</tr>
<tr>
<td style="text-align: center">条件运算符</td>
<td style="text-align: center"><code>?</code>, <code>:</code></td>
</tr>
<tr>
<td style="text-align: center">扩展赋值运算符</td>
<td style="text-align: center"><code>+=</code>, <code>-=</code>, <code>*=</code>, <code>/=</code></td>
</tr>
</tbody>
</table>
<p>一元运算符只需要一个操作数, 二元, 三元也同理.</p>
<p>运算优先级: 括号最优先, 其次是一元运算符 (多使用括号养成良好习惯).</p>
<h2 id="算数运算符">算数运算符</h2>
<h3 id="加-减-乘-除-模">加, 减, 乘, 除, 模</h3>
<p><code>+</code>, <code>-</code>, <code>*</code>, <code>/</code>, <code>%</code> (模运算, 取余).</p>
<ol>
<li>
<p>当不同类型一同运算时, 结果的类型<strong>取决于最高的类型</strong>. 如:</p>
</li>
<li>
<p>当结果会出现小数, 需要对结果进行强制转换, 否则只会出现整数.</p>
</li>
</ol>
<pre><code class="language-java">long a = 100L;
int b = 10;
short c = 1;
System.out.println( a + b + c);//里面是long类型
System.out.println(b + c);//里面是int类型
System.out.println(c / b);//打印0
System.out.println((double) c / b);//打印0.1   
</code></pre>
<p>如果<code>+</code>的前面有 <code>String</code> 类型, <code>+</code> 则变成<strong>字符串连接运算符</strong>,负责把多个字符串连接起来.</p>
<pre><code class="language-java">System.out.println(10 + 20);//打印30
System.out.println("Hello" + 10 + 20);//打印Hello1020
System.out.println(10 + 20 + "Hello" + 25);//打印30Hello25, 前面的会被运算
</code></pre>
<p>需要注意, 在字符串连接运算符前面的式子<strong>会先被计算</strong>.</p>
<h3 id="自增自减">自增自减</h3>
<p><code>++</code> (自增), <code>--</code> (自减). 两个都是一元运算符.</p>
<p><code>n++</code>, <code>n-- </code>(先数字, 后符号): <strong>先执行, 后自增/减.</strong></p>
<p><code>++n</code>, <code>--n</code> (先符号, 后数字): <strong>先自增/减, 后执行.</strong></p>
<pre><code class="language-java">int a = 1, b = 1;
int result1 = a++;//a=1---先为result1赋值, 然后才自增
int result3 = a;//a=2
int result2 = ++b;//b=2---先给自己自增, 再给result2赋值
int result4 = b;//b=2
</code></pre>
<h2 id="比较运算">比较运算</h2>
<p><code>&gt;</code>, <code>&lt;</code>, <code>&gt;=</code>, <code>&lt;=</code>, <code>==</code>, <code>!=</code> (不等于)</p>
<p>​        输出的结果为<code>boolean</code>值</p>
<h2 id="逻辑运算符">逻辑运算符</h2>
<p><code>a &amp;&amp; b</code> 逻辑与: 全真为真, 一假为假.</p>
<p><code>a || b</code> 逻辑或: 一真为真,全假为假.</p>
<p><code>!(c)</code> 逻辑非: 取反. (它是一元运算符).</p>
<h3 id="短路运算">短路运算</h3>
<p>在逻辑与和逻辑非中, 如果第一个值就能确定整个结果, 那么<strong>后面的值不会再被计算</strong>.</p>
<pre><code class="language-java">int a = 5;
boolean result = (a &lt; 4) &amp;&amp; (a++ &lt; 4);//a=5, result=false
</code></pre>
<p>如上: 在第 2 行, 由于 <code>a &lt; 4</code> 的结果必然为 <code>false</code>, 程序便没有往后继续执行 <code>a++</code>, <code>a</code> 仍然为 5.</p>
<h2 id="位运算">位运算</h2>
<p><strong>按位与 (<code>&amp;</code>)</strong>: 同真为真, 一假为假.</p>
<p><strong>按位或 (<code>|</code>)</strong>: 一真为真, 同假为假.</p>
<p><strong>按位非 (<code>~</code>)</strong>: 取反.</p>
<p><strong>按位异或 (<code>^</code>)</strong>: 不同则真, 相同则假.</p>
<p><strong>左移(<code>&lt;&lt;</code>)</strong>: 二进制位向左移动,右侧补 0, 相当于<strong>乘 2 的 n 次方</strong>.</p>
<p><strong>右移(<code>&gt;&gt;</code>)</strong>: 二进制位向右移动, 左侧补符号位 (带着符号一起移动), 相当于<strong>除 2 的 n 次方</strong>.</p>
<pre><code class="language-java">System.out.println(1 &lt;&lt; 1);//00_000_001 ---&gt; 00_000_010 = 2D
System.out.println(1 &lt;&lt; 3);//00_000_001 ---&gt; 00_001_000 = 8D
System.out.println(8 &gt;&gt; 2);//00_001_000 ---&gt; 00_000_010 = 2D
</code></pre>
<p>由于是直接操作二进制数, <strong>速度</strong>会<strong>高</strong>于前面的算术运算符, 可以<strong>提升计算效率</strong>.</p>
<h2 id="扩展赋值运算符">扩展赋值运算符</h2>
<p><code>+=</code>, <code>-=</code>, <code>*=</code>, <code>/=</code></p>
<p>例如: <code>a += b</code> 使 a=a+b, 其他同理.</p>
<h2 id="条件运算符">条件运算符</h2>
<p>三元运算符中的一株独苗.</p>
<p><strong><code>?:</code></strong>, 用法 <code>x ? y = z</code>, 即如果 <code>x==ture</code>, 则 <code>y</code>, 否则 <code>z</code>. 类似 <code>if</code> 语句.</p>
<pre><code class="language-java">int score = 60;
String type = score &lt; 60 ? "不合格" : "合格";
</code></pre>
<h1 id="包">包</h1>
<p>类似于<strong>文件夹</strong>, 用于区别<strong>类名</strong>的命名空间 (使能够重名).</p>
<p><strong>定义格式</strong>: <code>package pkg1[. pkg2[. pag3...]];</code></p>
<p>一般使用公司域名倒置作为包名.</p>
<p>包名不要重复.</p>
<p>引用格式: <code>import pkg1[. pkg2...] (classname)</code>, <strong>需要写在 <code>package</code> 的下面</strong>.</p>
<p>如:</p>
<p><img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260317235722128-1799204527.png" alt="屏幕截图 2026-03-17 220632" loading="lazy"></p>
<p>可以使用通配符 <code>*</code> ,导入包内所有的类.</p>
<p><em><s>(不要忘了命名规范: 类名大写 TAT)</s></em></p>
<h1 id="javadoc">JavaDoc</h1>
<p>用于生成自己的 API 文档. (文档注释)</p>
<p><code>@auther</code>: 作者名</p>
<p><code>@version</code>: 版本号</p>
<p><code>@since</code>: 需使用的最低 JDK 版本</p>
<p><code>@param</code>: 参数名</p>
<p><code>@return</code>: 返回值</p>
<p><code>@throws</code>: 异常抛出情况</p>
<p><code>/**</code> 回车, 多行注释.</p>
<p>可以写在类里, 给类注释; 也可以写在方法里, 给方法注释.!<br>
<img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260317235809333-1523040651.png" alt="屏幕截图 2026-03-17 225444" loading="lazy"></p>
<p><em><s>po一下我推世界一的笑颜 (bushi)</s></em></p>
<p>打出 <code>/**</code> 多行注释然后回车时,会根据你写的内容自动帮你补全.</p>
<h2 id="使用命令提示符生成-javadoc-文档">使用命令提示符生成 JavaDoc 文档</h2>
<p>把文件在资源管理器打开, 用 cmd 运行<code>javadoc -encoding UTF-8 -charset UTF-8 类名.java</code>, 会在文件夹内生成 <strong>index.html</strong> 文件. *(中间的<strong>参数</strong>是使能够正常输出中文)</p>
<p><img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260317235832763-1356853325.png" alt="屏幕截图 2026-03-17 225649" loading="lazy"></p>
<p><img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260317235842980-1963386115.png" alt="屏幕截图 2026-03-17 225808" loading="lazy"></p>
<p>index.html 是生成的 Java 文档.</p>
<p><img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260317235907618-1600762717.png" alt="屏幕截图 2026-03-17 230402" loading="lazy"></p>
<h2 id="使用-idea-生成-javadoc-文档">使用 IDEA 生成 JavaDoc 文档</h2>
<ol>
<li>找到工具菜单,点击"生成 JavaDoc"</li>
</ol>
<p><img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260317235941918-55185813.png" alt="屏幕截图 2026-03-17 231009" loading="lazy"></p>
<ol start="2">
<li>在对话窗选择生成的<strong>文档范围 (作用域)</strong>, <strong>输出目录</strong>, <strong>区域设置</strong> (中文为 <code>zh_CN</code>), <strong>参数(命令行实参:<code>-encoding UTF-8 -charset UTF-8</code>)</strong>.</li>
</ol>
<p><img src="https://img2024.cnblogs.com/blog/3774737/202603/3774737-20260317235928576-299165547.png" alt="屏幕截图 2026-03-17 231503" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/LinghuSumire/p/19731642
頁: [1]
查看完整版本: Java 基础 (Java 入门笔记)