15 lines
19 KiB
JavaScript
15 lines
19 KiB
JavaScript
import{_ as n}from"./chunks/ArticleMetadata.Sb1DYAHo.js";import{_ as o,D as h,o as t,c as r,I as c,w as d,k as l,a as k,R as g,b as m,e as u}from"./chunks/framework.FVQzxbLi.js";import"./chunks/md5.RtphNWHi.js";const v="/assets/202010031920791.i5HCTHY2.jpg",y="/assets/202010031921578._uxZ-doo.png",_="/assets/202010031922920.x7I4QQV5.png",A="/assets/202010031923150.FRgC68K8.png",b="/assets/202010031923562.aq1pT4pm.png",D="/assets/202010031925166._7DrgyQz.png",C="/assets/202010031926318.CPGwkMb2.jpeg",J="/assets/202010031926870.H2g6NWOY.png",F="/assets/202010031927096.H-L-tHDn.png",B="/assets/202010031927359.Vl0UxGC3.jpeg",E="/assets/202010031927876.8A0DJ35j.png",q="/assets/202010031927888.ZifkcWWD.png",f="/assets/202010031928091.M3FWZT1E.png",w=JSON.parse('{"title":"第一个Java程序","description":"","frontmatter":{"title":"第一个Java程序","author":"查尔斯","date":"2020/10/03 20:00","categories":["Java基础快速入门"],"tags":["Java","Java基础"]},"headers":[],"relativePath":"courses/java/01-Java语法入门/02-第一个Java程序.md","filePath":"courses/java/01-Java语法入门/02-第一个Java程序.md","lastUpdated":1661518927000}'),j={name:"courses/java/01-Java语法入门/02-第一个Java程序.md"},P=l("h1",{id:"第一个java程序",tabindex:"-1"},[k("第一个Java程序 "),l("a",{class:"header-anchor",href:"#第一个java程序","aria-label":'Permalink to "第一个Java程序"'},"")],-1),x=g('<h2 id="前言" tabindex="-1">前言 <a class="header-anchor" href="#前言" aria-label="Permalink to "前言""></a></h2><p><strong>C:</strong> 在上一篇,我们搭建好了 Java 语言的开发环境,这一篇笔者就带着大家愉快的写出我们的第一个程序,不过本篇我们是使用记事本(比较原生态)来写程序,并不使用其他的高级开发工具,所以可能会显得比较低端,请大家见谅。</p><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>饭要一口一口的吃,工具也要一点一点的升级,技术也要一点一滴的积累。</p></div><p><img src="'+v+'" alt="202010031920791"></p><h2 id="开发步骤" tabindex="-1">开发步骤 <a class="header-anchor" href="#开发步骤" aria-label="Permalink to "开发步骤""></a></h2><p>一个Java程序的开发,需要经过:编写源码,编译源码和运行,这三大阶段。</p><p><img src="'+y+'" alt="202010031921578"></p><p>和笔者来体验一下吧!<strong>源代码/源程序:程序的原始指令,由程序员编写</strong> 。</p><p>1.首先使用记事本编写源代码文件( Java 程序的源代码文件扩展名为 <code>.java</code>)。</p><p><img src="'+_+'" alt="202010031922920"></p><p>2.打开cmd命令窗口,进入源代码所在地,使用 <code>javac</code> 命令编译,生成 <code>.class</code> 文件。</p><p><img src="'+A+'" alt="202010031923150"></p><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>编写完的源代码,计算机是无法直接执行的,因为它只识别二进制,所以我们需要一个 <code>翻译官</code> 帮助我们去翻译下,这样计算机才能够识别。<code>翻译官</code> 就是编译器,编译之后就会出现一个扩展名为 <code>.class</code> 的字节码文件(它并非纯二进制文件,是运行于JVM中的一种伪二进制文件),这时才能够被计算机执行。</p></div><p>3.使用 <code>java</code> 命令运行 <code>.class</code> 文件。</p><div class="warning custom-block"><p class="custom-block-title">笔者说</p><p>运行 <code>.class</code> 文件时不能加上 <code>.class</code> 后缀名。</p></div><p><img src="'+b+'" alt="202010031923562"></p><p>这样我们就实现了第一个 Java 程序,我们借助它给计算机下达了一个在控制台输出 <code>Hello World!!!</code> 的指令。</p><details class="details custom-block"><summary>为什么我们开始编写的第一个程序要输出 Hello World 这句话?</summary><p>实际是因为《The C Programming Language》这本 C 语言书籍中使用它做了第一个演示程序,非常著名,所以后来的程序员在学习编程或进行设备调试时延续了这一习惯。</p><p>一个程序员才懂的冷笑话:一位资深程序员到了退休的年纪,为了给自己的晚年生活增加点乐趣,开始学习书法,在开始学习书法的第一天,资深程序员铺开纸张,大笔一挥 <code>Hello World</code> !</p></details><h2 id="基本程序结构" tabindex="-1">基本程序结构 <a class="header-anchor" href="#基本程序结构" aria-label="Permalink to "基本程序结构""></a></h2><p>刚才我们编写了第一个 Java 程序,尽管背了相关单词,但肯定还是看的云里雾里的。笔者先给你个提醒,现在呢不要求你过多理解它们的含义,只需要知道它的效果和注意事项即可。随着学习的深入,慢慢就会深入认识和理解了,<strong>千万别钻牛角尖</strong> ,因为还没给你讲的肯定是因为笔者认为目前还不是太适合你的,<strong>欲速则不达</strong> 。</p><div class="warning custom-block"><p class="custom-block-title">下方是你现在需要记忆的注意事项和规范:</p><ol><li><p>类名与文件名完全一致,首字母大写(帕斯卡/大驼峰命名法)。</p></li><li><p>main() 方法是程序的入口,四要素必不可少。</p></li><li><p>核心语句:System.out.print<strong>ln</strong>(); 从控制台输出信息,S是大写。( Java 严格区分大小写)</p></li><li><p>{ 和 }一 一对应,缺一不可。(注意模仿笔者的编写习惯)</p></li><li><p>注意要有层级缩进,一行只写一条语句即可。</p></li></ol></div><p><img src="'+D+`" alt="202010031925166"></p><div class="tip custom-block"><p class="custom-block-title">笔者说</p><p>“好的代码应该是给人看的,而不是给机器看的。”** 上面的5条注意事项,其实4条都在强调规范,编码规范非常重要!</p><p>一个软件的生命周期中,80%的花费都在于维护。几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护。编码规范可以改善软件的可读性,可以让程序员尽快而彻底地理解新的代码。更多规范除了模仿笔者文章示例习惯外,还请后续随时与笔者一起解读<a href="https://github.com/alibaba/p3c/blob/master/Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C%EF%BC%88%E5%B5%A9%E5%B1%B1%E7%89%88%EF%BC%89.pdf" target="_blank" rel="noreferrer">《阿里巴巴Java开发手册》</a>。</p></div><h3 id="输出语句" tabindex="-1">输出语句 <a class="header-anchor" href="#输出语句" aria-label="Permalink to "输出语句""></a></h3><p>其实输出功能,不仅仅只有 <code>println()</code> 这一个语法,还有去掉了 <code>ln</code> 之后的 <code>print()</code> 也可以实现。</p><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">print</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(); </span><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 输出完不换行</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">println</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(); </span><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 输出完换行</span></span></code></pre></div><p>如果想让 <code>print()</code> 实现 <code>println()</code> 的效果,可以借助转义符。</p><table><thead><tr><th>转义符</th><th>说明</th></tr></thead><tbody><tr><td>\\n</td><td>将光标移动到下一行的第一格</td></tr><tr><td>\\t</td><td>将光标移动到下一个水平制表位置</td></tr></tbody></table><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">// 下方前两行和第三行代码是等效的。</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">println</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"Hello"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">println</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"World"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">print</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"Hello </span><span style="--shiki-light:#005CC5;--shiki-dark:#F47067;">\\n</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;"> World</span><span style="--shiki-light:#005CC5;--shiki-dark:#F47067;">\\n</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">);</span></span></code></pre></div><h3 id="注释" tabindex="-1">注释 <a class="header-anchor" href="#注释" aria-label="Permalink to "注释""></a></h3><p>在 Java 的编写过程中我们需要对一些程序进行注释,这样除了自己更方便阅读,别人也更好理解我们的程序,所以我们一定要适时的加一些注释,可以是编程思路或者是程序的作用。</p><p>Java 中有三种注释:</p><ol><li>单行注释以 <code>//</code> 开始;</li><li>多行注释以 <code>/*</code> 开头,以 <code>*/</code> 结尾;</li><li>JavaDoc(文档注释)注释以<code>/**</code>开头,以<code>*/</code>结尾(文档注释前期了解,后期再掌握)</li></ol><div class="language-java vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">java</span><pre class="shiki shiki-themes github-light github-dark-dimmed vp-code"><code><span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;">/**</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * HelloWorld.java </span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> * 第一个Java程序</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> */</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> class</span><span style="--shiki-light:#6F42C1;--shiki-dark:#F69D50;"> HelloWorld</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">{</span></span>
|
||
<span class="line"><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> public</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> static</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;"> void</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;"> main</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#D73A49;--shiki-dark:#F47067;">String</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">[ ] </span><span style="--shiki-light:#E36209;--shiki-dark:#F69D50;">args</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">){</span></span>
|
||
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#768390;"> // 输出消息到控制台(单行注释后注意添加一个空格,这是一个小规范)</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> System.out.</span><span style="--shiki-light:#6F42C1;--shiki-dark:#DCBDFB;">println</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">(</span><span style="--shiki-light:#032F62;--shiki-dark:#96D0FF;">"Hello World!!!"</span><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">); </span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;"> }</span></span>
|
||
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#ADBAC7;">}</span></span></code></pre></div><p><img src="`+C+'" alt="202010031926318"></p><h2 id="跨平台原理" tabindex="-1">跨平台原理 <a class="header-anchor" href="#跨平台原理" aria-label="Permalink to "跨平台原理""></a></h2><p>在《Java概述》中,笔者讲 Java 的能力时就埋了一个伏笔,Java 程序是跨平台的,何谓跨平台?笔者给你举个非跨平台的程序例子,下图是百度网盘客户端程序的下载页面,它为了能够运行在不同的平台(系统)上,开发了6套系统(其实是7套,还有一套网页版)。看到这其实你就应该能明白为什么跨平台是一个非常优秀的能力了。</p><p><img src="'+J+'" alt="202010031926870"></p><p><img src="'+F+'" alt="202010031927096"></p><p>而经过刚才编写完第一个 Java 程序之后,我们思考一下 Java 为什么能跨平台?其实在开发步骤中就能找到原因。编译!编译会将源代码转变为字节码文件(伪二进制),而这伪二进制内容未来运行时是运行在 JVM(Java Virtual Machine)上的,换而言之,<strong>其是因为 JVM 能跨平台安装,所以 Java 才能实现跨平台</strong> 。</p><p>由此,Java 程序员就可以不用考虑所写的程序要在哪里运行了,反正都是在 JVM 虚拟机上运行的,JVM 会负责将其变成相应平台的机器语言,而这个转变并不是程序员应该关心的。后续的很多优秀程序设计都采用了该思想。</p><p><img src="'+B+'" alt="202010031927359"></p><div class="tip custom-block"><p class="custom-block-title">《Java虚拟机的分析与研究》</p><p>Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。</p><p>Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。</p><p>Java虚拟机不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技术使同一种应用可以运行在不同的平台上。Java平台可分为两部分,即Java虚拟机(Java virtual machine,JVM)和Java API类库。[1]</p></div><p>目前先了解到这种程度即可,JVM 深入学习是未来提升 "Java 内功" 的重要一步,但它不太适合刚学习的你。</p><h2 id="编译和反编译" tabindex="-1">编译和反编译 <a class="header-anchor" href="#编译和反编译" aria-label="Permalink to "编译和反编译""></a></h2><p>从刚才的学习中,我们清楚了编译是将源代码文件转换为了字节码文件,这字节码文件也是以后我们运行所需的。如果有一天,你的老板给你了一堆字节码文件,让你去借鉴一下内容(源代码),你当然知道字节码文件里是一堆乱码了,所以随着而来的,我们需要它再转换为源代码文件,这就是反编译,我们可以借助工具来更快,更好的批量处理。</p><p><strong>编译:</strong> 将源文件(.java)转换成字节码文件(.class)的过程称为编译。<br><strong>反编译:</strong> 将字节码文件(.class)转换回源文件(.java)的过程称为反编译。(常用有Jad、FrontEnd、jd-gui)</p><p>此处仅仅演示利用 <code>Jad</code> 来将 HelloWorld.class 进行反编译,类似的工具还有 jd-gui 等。</p><p><img src="'+E+'" alt="202010031927876"></p><p><img src="'+q+'" alt="202010031927888"></p><p><img src="'+f+'" alt="202010031928091"></p><h2 id="答题环节" tabindex="-1">答题环节 <a class="header-anchor" href="#答题环节" aria-label="Permalink to "答题环节""></a></h2><h3 id="输出基本信息" tabindex="-1">输出基本信息 <a class="header-anchor" href="#输出基本信息" aria-label="Permalink to "输出基本信息""></a></h3><details class="details custom-block"><summary>需求:逐行输出个人基本信息。</summary><p>提示:个人基本信息可包括:姓名、年龄、性别、身高、体重、婚否等</p></details><h2 id="参考文献" tabindex="-1">参考文献 <a class="header-anchor" href="#参考文献" aria-label="Permalink to "参考文献""></a></h2><p>[1]顾玮. Java虚拟机的分析与研究[J]. 办公自动化,2017,22(9):35-36,11</p><h2 id="后记" tabindex="-1">后记 <a class="header-anchor" href="#后记" aria-label="Permalink to "后记""></a></h2><p>今天这篇感觉怎么样?概念是否清楚了?语法是否记住了?万事开头难,加油啊同学!</p><div class="info custom-block"><p class="custom-block-title">笔者说</p><p>对于技术的学习,笔者一贯遵循的步骤是:先用最最简单的 demo 让它跑起来,然后学学它的最最常用 API 和 配置让自己能用起来,最后熟练使用的基础上,在空闲时尝试阅读它的源码让自己能够洞彻它的运行机制,部分问题出现的原因,同时借鉴这些技术实现来提升自己的代码高度。</p><p>所以在笔者的文章中,前期基本都是小白文,仅仅穿插很少量的源码研究。当然等小白文更新多了,你们还依然喜欢,后期会不定时专门对部分技术的源码进行解析。</p></div>',59);function V(a,H,S,W,M,T){const e=n,p=h("ClientOnly");return t(),r("div",null,[P,c(p,null,{default:d(()=>{var s,i;return[(((s=a.$frontmatter)==null?void 0:s.aside)??!0)&&(((i=a.$frontmatter)==null?void 0:i.showArticleMetadata)??!0)?(t(),m(e,{key:0,article:a.$frontmatter},null,8,["article"])):u("",!0)]}),_:1}),x])}const O=o(j,[["render",V]]);export{w as __pageData,O as default};
|