[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ezwc1OHI-1593769148939)(https://static01.imgkr.com/temp/f12d252974d748ac884fcb0849d31997.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6o2lGdd-1593769148945)(https://static01.imgkr.com/temp/0bcd0dd4ff404621a93aa1a09f34a1cc.png)]
在一切开始之前,我们需要先搭建好我们的 开发环境 (从前文得知 Java 程序的运行需要 JVM,编写 Java 代码需要 IDE),或者在您完全准备好之前可以 暂时使用 在线版本的 Java 环境来运行前面一些内容涉及的简单代码:https://c.runoob.com/compile/10
这三者的关系是一层层的嵌套关系:JDK > JRE > JVM
JDK 包含了 Java 的编译器、调试器等一系列开发工具,所以作为开发人员我们需要安装 JDK,而某一些只需要运行编译好的 Java 程序的服务器则可以只安装 JRE 即可 (极少数情况,通常还是安装 JDK)。
Java 程序必须运行在 JVM 之上,所以我们第一件事情就是安装 JDK。我们选择最新的 JDK 14 进行安装:
选择合适自己电脑平台的 JDK 进行下载安装即可:
第一步
在 Windows 安装之后需要额外 配置环境变量,首先【右键我的电脑】 → 选择【属性®】 → 打开【高级系统设置】:
- 图片引用自:https://www.jikeyuan.cn/index.php/a/174.html
第二步
在【高级】标签下选择【环境变量】,并对环境变量【path】进行编辑操作:
- 图片引用自:https://www.jikeyuan.cn/index.php/a/174.html
第三步
新建环境变量,然后把刚才安装 jdk 的安装路径复制进去,路径截止到
bin
目录:
- 图片引用自:https://www.jikeyuan.cn/index.php/a/174.html
第四步
快捷键【Win + R】输入【cmd】调出 dos 窗口,输入【java -version】进行验证:
- 图片引用自:https://www.jikeyuan.cn/index.php/a/174.html
第一步
打开苹果 dos 窗口,先确认自己使用的
shell
是zsh
还是bash
,在命令行中输入echo $SHELL
:
- 如果输出
/bin/bash
则为bash
;- 如果输出结果为
/bin/zsh
则为zsh
。
第二步
根据上面不同的结果 修改
shell
配置文件,若为bash
,则打开~/.bash_profile
,若为zsh
则打开~/.zshrc
,在响应的文件末尾添加以下内容,并保存:
export JAVA_HOME=$(/usr/libexec/java_home)
第三步
在
~/
目录,命令行执行source
命令:同样如果是bash
,则执行source .bash_profile
,而如果是zsh
,则执行source .zshrc
,让刚才的修改生效。
第四步
命令行执行
java -version
检查是否配置成功:
随着 Java 的发展,SUN 公司给 Java 分出了三个不同版本:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cFflTLUy-1593769148965)(https://static01.imgkr.com/temp/08e9b837fd6945b1bff7ea0aee17ce6e.png)]
毫无疑问,Java SE 是 Java 平台的核心,而 Java EE 是进一步学习 Web 应用所必须的。
Java 源代码本质上其实就是普通的文本文件,所以理论上来说任何可以编辑文本文件的编辑器都可以作为我们的 Java 代码编辑工具。比如:Windows 记事本、Mac OS X 下的文本编辑、Linux 下的 vi 等。
但是这些简单工具没有「语法的高亮提示」、「自动完成」等功能,这些功能的缺失会 大大降低代码的编写效率。
然后输入以下内容并保存:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
HelloWorld.java
文件名不允许出现空格,以及要保证和第一行 class
后跟着的字符串 HelloWorld
保持一致;将 Java 源程序编写并保存到文件之后,还需要进行编译才能运行。编译 Java 源程序使用的是 JDK 中的 javac
命令,例如编译上节的 HelloWorld.java,完整命令如下:
javac HelloWorld.java
该命令会让 Java 编译器读取 JavaWorld.java 文件的源代码,并把它编译成符合 Java 虚拟机规范的字节码文件 (.class
文件)。
想要运行字节码文件也需要使用 JDK 中的 java
命令,例如运行上面生成的 .class
文件,完整命令如下:
java HelloWorld
具体效果如下:
尽管能够使用文本编辑器来编写我们的 Java 程序,但效率着实不敢恭维,所以我们一般使用更加先进的 集成开发工具 (俗称 IDE,Integrated Development Environment)。
不仅仅包含更加智能的代码编辑器、编译器、调试器,还有友好的用户界面以及各式各样帮助我们提升效率的插件。
对于效率这方面,下面我们就几个方面简单感受一下。
不仅仅是基础的关键字的提醒,IDEA 会基于当前的上下文 (也就是基于位于当前代码上下的代码进行分析),更加智能的进行过滤和提醒:
我们总是会犯一些低级错误,比如一不留神打错一个字母,可能找了好久都找不到错误所在,IDEA 的纠错能力也许可以帮到你,看一个例子:
如果你写的代码过于复杂,或者有更好的方式来替代你写的代码,那么 IDEA 会给你一个提示,告诉你还可以有更好的方式。如下图:
比如你看我从头写一个 HelloWorld
程序:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P8827eZ3-1593769148972)(https://imgkr.cn-bj.ufileos.com/950966fc-97c8-4fa7-816d-3295ab740451.gif)]
这应该比一个一个字符敲快多了吧…(小声bb:文章末尾有教程哦)
来一个总结:
打开【IDEA】新建一个空白的 Java 项目:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1jhytUb6-1593769148974)(https://static01.imgkr.com/temp/f9119774a94b45f795d6ae7887ee5812.png)]
右键在【scr】目录新建一个空白的【HelloIDEA】的 Java Class 文件:
然后接下来像我这样操作,来编写一个【HelloIDEA】的 Java 程序:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FGbmjK6n-1593769148976)(https://static01.imgkr.com/temp/81b6c073530548d59b0c61a1101658a8.gif)]
psvm
:是 public static void main
的缩写;sout
:是 System.out
的缩写;怕有些同学迷惑,点击左边的绿三角会弹出如下的信息,点击第一个选项就能够运行啦:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xinYDb9F-1593769148977)(https://static01.imgkr.com/temp/4870ccfa48314500a04370708aa9a68f.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UutsAk0d-1593769148978)(https://static01.imgkr.com/temp/22bf37b4df254ffa91efd731ba49a39e.png)]
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
我们来看看刚才我们写的 Hello World
程序。
第一行:public class HelloWorld {
public
:称为 访问修饰符 (access modifier),用来控制程序的其他部分对这一段代码的访问级别 (这里暂时理解为公用的,之后会更加详细地介绍);class
:表明 Java 程序中的全部内容都包含在类中 (之后会花很多功夫来说明类,这里可以仅仅把类理解为程序逻辑的一个容器,程序逻辑定义了应用软件的行为)。HelloWorld
:关键字 class
后面紧跟的是类名,它除了必须跟文件名保持一致外,还应该遵循 Java 类名的命名规范 —— 类名以大写字母开头。如果名字由多个单词组成,每个单词的第一个字母需要大写。
类名命名规范:
- Bad:
hello
、Good123
、Note_Book
、_World
- Good:
Hello
、Tester
、NoteBook
在编程中,某个东西的名称就被称为 标识符,例如上述的类名 HelloWorld
。在 Java 中定义标识符存在以下几种规则:
标识符命名示范:
- Bad:
Lady Luck
(坏:标识符内不允许有空格)、x/y
(错误:标识符中不允许使用斜杠)、1stPrize
(错误:以数字开头)、abc
(坏:没有任何意义)、_name
(坏:不要以_
或$
开头)- Good:
userName
、StudentManager
、NoteBook
保留字就是像 class
这样有特殊含义的标识符,您只能将保留字用于其设定的专属用途 (如 class
除了定义类,您将不能用作其他任何目的)。
在 Java 中存在以下的保留字:(无需记忆,它们中的大部分都或多或少地出现在之后您的编码中… IDEA 也会有智能的提示)
abstract class extends implements null strictfp true
assert const false import package super try
boolean continue final instanceof private switch void
break default finally int protected synchronized volatile
byte do float interface public this while
case double for long return throw
catch else goto native short throws
char enum if new static transient
在类的第一个大括号和最后一个大括号之间描述了程序所做的一切:
public class ClassName {
}
首先,每个源代码文件必须有一个主类 (名字同文件名),在之后的文章中我们会看到一个源代码文件可能会同时存在几个类的情况发生,暂时不考虑。
在上文程序的第三行:public static void main ( String[] args )
,展示了程序在何处开始运行,Java 虚拟机总是从指定类的 main
方法的代码开始执行,因此为了代码能够执行,在类的原文件中必须包含一个 main
方法。
对这一行稍微做一下解释:
public
:访问修饰符,用来描述该方法的访问权限级别,这里为所有人都能访问;static
:保留字,用来定义该方法是一个静态方法;void
:用来描述该方法没有任何的返回值;main
:方法名;(String[] args)
:描述了该方法所接收的参数;所以刚开始接触的程序结构大概看起来像是下面这样:
public class ClassName {
public static void main(String[] args) {
......
}
}
由于 Java 是大小写敏感 的,所以 main
这个单词不允许任何的修改。(Java 语言规范中规定 main 方法必须声明为 public)
大括号的使用风格曾经引发过许多无意义的争论,以下两种风格,哪一种更好呢?:
public class ClassName { }
public class ClassName { }
没有答案,虽然对于 Java 编译器来说空白符会被省略,这两种并无差别,但作为开发者的我们,选择 Java 惯用的风格 (第一种) 就好了…
考虑下面这一段代码,实际上就是上面的 HelloWorld
程序 main
方法中的语句:
{
System.out.println("Hello World!");
}
一对大括号表示 方法体 的开始与结束,在这个方法中只包含一条语句。跟大多数程序设计语言一样,可以把 Java 中的语句看成是语言中的一个句子。
在 Java 中,每个句子必须用分号结束 (英文分号)。
特别需要说明,回车并不是语句的结束标志,因此,如果需要可以将一条语句写在多行上。
在这里,我们使用了 System.out
这个对象并调用了它的 println
方法 (点号 .
用于调用方法)。它的作用是在屏幕上输出指定的信息。例如,我们想要输出 我没有三颗心脏
则可以这样调用:
System.out.println("我没有三颗心脏");
Java 使用方法的通用语法是:
object.method(parameters)
这一条语句的作用是在屏幕上输出 Hello World!
,这一部分由字符组成的序列 (其中不应该包含引号) 被称为 字符串。它可以包含任何有效字符,包括空格和标点符号。
方法 是根据语句构建的。程序通常包含许多方法。 我们的示例程序仅包含一种方法 (main 方法)。当然我们还调用了系统帮我们写好的 System.out.println()
方法。
我们可以试着仿照 main
方法来写一个自己的方法,假设我们想要输出一段心理学三大巨头之一阿德勒的一段话:
public static void printAdlerOneQuote() {
System.out.println(
"太在意别人的视线和评价,才会不断寻求别人的认可。"
+ "对认可的追求,才扼杀了自由。"
+ "由于不想被任何人讨厌,才选择了不自由的生活方式。"
+ "换言之,自由就是不再寻求认可。"
);
}
有几点需要说明:
abc
似乎就有点儿不知所云了;正常的方法调用需要像上面提到的那样:object.method(parameters)
,但由于身处同一个类中,this.printAdlerOneQuote();
就可以简写成:printAdlerOneQuote();
。
完整的程序代码如下:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");
printAdlerOneQuote();
}
public static void printAdlerOneQuote() {
System.out.println(
"太在意别人的视线和评价,才会不断寻求别人的认可。"
+ "对认可的追求,才扼杀了自由。"
+ "由于不想被任何人讨厌,才选择了不自由的生活方式。"
+ "换言之,自由就是不再寻求认可。"
);
}
}
参考答案:(上面的完整代码演示)
在源文件中,字符串文字必须仅在一行上。以下内容不合法,将无法编译:
System.out.println("Hello "
"World!");
您编写的代码不符合 Java 的语法规定,就会发生 语法错误。
在 Java 编译器将源代码文件编译成 .class
文件之前,会默认帮你做许多工作,检查语法就是其中一项。
例如,我们在桌面上试着创建一个【HelloWorld.java】文件然后输入一段存在错误的代码 (您可以试着检查一下哪里出现了一处错误):
public Class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
然后再当前目录执行 javac HelloWorld.java
尝试编译这个存在错误的 Java 源文件:
→ javac HelloWorld.java
HelloWorld.java:1: 错误: 需要class, interface或enum
public Class HelloWorld {
^
HelloWorld.java:3: 错误: 需要class, interface或enum
public static void main(String[] args) {
^
HelloWorld.java:6: 错误: 需要class, interface或enum
}
^
3 个错误
Java 编译器提示我们有三处错误,实际上我们也确实粗心地把 class
错误的写成了 Class
。
编译器也未创建新的字节码文件 (.class
),因为在遇到错误时它将停止翻译。
仅仅因为程序通过编译并且成功运行并不意味着它是正确的。
例如,您的任务是创建一个在屏幕上输出 Hello Wrold!
,但是您却错误地写成了 Hello Bug!
,运行时没有按照预期执行,则就称该程序存在 Bug!
Bug 一词的原意是 “臭虫” 或 “虫子”。
第一个有记载的 Bug 是美国海军编程员、编译器的发明者格蕾斯·哈珀 (GraceHopper) 发现的。
1945
年 9
月 9
日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个真正的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。
突然,马克二型死机了。技术人员试了很多办法,最后定位到第 70
号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到「事件记录本」中,并注明「第一个发现虫子的实例」。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TXm3iF2d-1593769148980)(https://static01.imgkr.com/temp/9abe7549114c48f286d625eb0ea0eff3.png)]
从此以后,人们将计算机错误称为 Bug,与之相对应,人们将发现 Bug 并加以纠正的过程叫做 “Debug”,意即「捉虫子」或「杀虫子」。
- 以上内容引用自:http://www.cxyym.com/2014/11/999/
来几个清奇的段子吧。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WD3fRMZR-1593769148981)(https://static01.imgkr.com/temp/33439f14d5ed4ceeba7105f91154bff9.png)]
B 站自取:https://www.bilibili.com/video/BV1oJ411S7o4?from=search&seid=7940414495637079568
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oqD5Uo2X-1593769148982)(https://static01.imgkr.com/temp/4edc97f17c0240c6a3a3b97684e8623d.png)]
引用自知乎
@第七地区
的答案:https://www.zhihu.com/question/365343579/answer/967299388
引用自知乎
@哒柏
的答案:https://www.zhihu.com/question/365343579/answer/967299388
修改程序中的 Bug,要经过三个步骤:
说起来比较简单,在地球人 (程序员等同于外星人) 看起来,过程是这样的:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6MCxNEPV-1593769148984)(https://static01.imgkr.com/temp/9ece707f8bb34846ba7ad3d9a9d52df2.png)]
但是,对于程序员来说,找一个 Bug 往往是这样的:
找到之后呢,解决这个 Bug 又是一个难题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pN4X0wdt-1593769148985)(https://static01.imgkr.com/temp/a417055f4b2441ccbc01ad5fee3ba373.png)]
换个柱子什么的比较简单,还有更崩溃的!
- 以上内容引用自:http://www.accessoft.com/blog/article-show.asp?userid=11&Id=17629
注释 是写程序的人留下的阅读笔记。
通常注释以两个字符 //
开头。Java 编译器将忽略那些字符以及在该行之后的所有字符。例如:
public class HelloWorld {
// 程序入口
public static void main(String[] args) {
// 输出 Hello World!
System.out.println("Hello World!");
}
}
这一段代码跟我们最开始的 HelloWrold
程序完全相同。大多数的程序编辑器 (例如 IDEA) 都足够聪明,可以识别注释并将其显示为无关紧要的一些颜色:
与大多数程序设计语言一样,Java 中的注释也不会出现在可执行程序中。因此,可以在源程序中根据需要添加任意多的注释,而不必担心可执行代码会膨胀。
/**
* 文档注释
* 可以注释多条内容
*/
public static void main(String[] args) {
// 这是单行注释
System.out.println("演示三种注释方式");
/*
这是多行注释
*/
}
//
标识,只能注释一行内容;/*
和 */
之间,能注释多行内容,为了提高可阅读性,一般首行和尾行不写注释信息;/**
(两个 *
) 和 */
之间,也能注释多行内容,一般用在类、方法和变量上面,用来描述其作用 (这是 Java 的一种规范,之后会更多的见识到);注释的目的是: 尽量帮助读者了解得和作者一样多。 —— 《编写可读代码的艺术》
以下节选自《阿里巴巴 Java 开发手册》对于注释的几点要求:
/**内容*/
格式,不得使用 //
方式 (上面的演示程序中就不符合规范,需要注意);//
注释。方法内部的多行注释,使用 /* */
并注意与代码对齐;对于以上的一些建议,我相信在您之后的编程之路上会越发地体会深刻。
参考答案:(上面有完整代码演示)
参考答案:(上面有完整代码演示)
参考答案:(上面有完整代码演示)
推荐理由: 这本书在知识体系完整充实的同时,又比《Thinking in Java》暴风式的知识洗礼来得轻松,新人入门书籍强烈推荐!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7WL590ox-1593769148989)(https://static01.imgkr.com/temp/b334061866d2427db3573cce77d46459.png)]
推荐理由: 编写可阅读的代码是程序员从始至终需要提升的能力,这本书完整呈体系的结构,和朴实充实的实例,让读者通过阅读就能在实践中真实地运用起来,推荐!
- 本文已收录至我的 Github 程序员成长系列 【More Than Java】,学习,不止 Code,欢迎 star:https://github.com/wmyskxz/MoreThanJava
- 个人公众号 :wmyskxz,个人独立域名博客:wmyskxz.com,坚持原创输出,下方扫码关注,2020,与您共同成长!
非常感谢各位人才能 看到这里,如果觉得本篇文章写得不错,觉得 「我没有三颗心脏」有点东西 的话,求点赞,求关注,求分享,求留言!
创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见!