
《Java 零基础入门到精通》专栏持续更新中。通过本专栏你将学习到 Java 从入门到进阶再到实战的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。
订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java/大数据/Python/低代码/云原生 等全套视频课程,同时共同探讨问题、携手共进~
Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的,由 James Gosling 和同事共同研发,1995 年正式推出。Java 最初被称为 Oak,是 1991 年为消费类电子产品的嵌入式芯片而设计的,1995 年更名为 Java,并重新设计用于开发 Internet 应用程序。
Java 是一门 高级 的计算机编程语言。这里所说的高级,是因为 Java 非常符合人的思维,可以将我们人的思维用于该语言,也就是说我们想要怎么做,都可以用 Java 语言来实现。即使没有学习过计算机编程,只要看到这段代码就知道该代码的主要功能。Java 共包含三个体系:
JVM(Java Virtual Machine),Java 虚拟机。它是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,它是 Java 最具吸引力的特性之一。
JRE(Java Runtime Environment),Java 运行环境。是一个软件,由太阳微系统所研发,JRE 可以让计算机系统运行 Java 应用程序(Java Application)。JRE 包含 JVM 以及其他运行 java 所必须的环境。
JDK 是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的 java 应用程序。JDK 是整个 java 开发的核心。JDK 包含 JRE 以及开发程序所必须的命令工具。
通过这三个概念我们可以得出:
运行 Java 程序的最小环境为 JRE。
开发 Java 程序的最小环境为 JDK。
Java 作为一种高级语言,计算机是无法识别的。因为计算机本身只能识别 0 和 1 两个符号,这时候便需要将 Java 语言进行编译,使得计算机能够识别,这就是 Java 的编译运行过程。整个编译运行过程共两步:
第一步 【编译】.java 源文件经过编译之后先生成一个 .class 字节码文件。
第二步 【运行】JVM 加载并运行 .class 文件(JVM 可将字节码译为 0 和 1 供计算机识别)。
这样的设计其实极具特点,关键是在于 JVM。当我们使用 Java 语言开发了某一个程序时,若想在其他不同的系统中运行,只需要在该系统中安装 JVM 即可。假设我们在 window 系统中使用 java 开发了一个学生管理系统,那么此时 JVM 所加载生成就是 Windows 版本的 0 和1,如果我们想要在 Linux 系统下运行此学生管理系统,仅需在该 Linux 系统中安装 JVM,那个时候 JVM 所生成 0 和 1 则是 Linux 版本的,而无论什么系统只要安装 JVM,我们的学生管理系统都可以在上面正常运行,无需重新编译。
这正是 Java 编程语言的 跨平台 特性,一次编译,到处使用。.java 源文件只需要生成一次 .class 字节码文件,接下来它就可以在安装的 JVM 的基础上在各个平台(系统)运行了。
对于 Java 开发环境的搭建,我们需要分别安装 JDK8 和开发工具 IDEA。
第一步安装 JDK,JDK 的安装非常简单,下载包之后一直点击下一步即可。需要注意的是我们尽量将 JDK 安装到 C 盘,且不可用中文名称命名。

安装完成之后,打开命令行工具 cmd,输入 java -version 命令查看 JDK 版本信息,可以看到版本信息就说明安装成功。如下图,我的 JDK 版本是 1.8,也就是我们通常所说的 JDK8 版本。

第二步安装开发工具,借助开发工具后则可以不用再进行环境变量等的配置。我们这里以使用 IDEA 为例。
IDE 意为集成开发环境,是一套带图形界面的开发工具,常见的有 IDEA 和 eclipse。
IDEA 安装过程也非常简单,点击下一步即可,安装完成后打开软件是这样的;

将 IDEA 和 JDK 分别安装完成之后,开发环境就算搭建完成了。
开发环境搭建完毕,接下来我们创建第一个 Java 项目。打开 IDEA 软件,点击新建项目,然后直接下一步,输入项目名称和存储地址后,点击完成;

此时我们的第一个项目创建完成;

在整个项目目录中,src 是我们的主要工作目录。选择目录“src” --> “new” --> “Package”,进行新建包的操作,包名自定;

接下来在我们新创建的包中再创建 .class 源文件,选择包名 --> 右键 --> “new” --> “Java class”,新建类;

这里所创建的类也就是 .class 源文件,我们今后的 Java 程序都是在此文件中编写的;

接下来在源文件自动生成的代码中的大括号中输入单词 main 根据提示自动生成一个主方法,这就完成了最初始的 Java 语法结构。计算机执行的是主方法 main(){} 中的语法,main(){} 之外的语句一概不执行。
package MyFirstJava; //声明包,包名为MyFirstJava
public class java01 { //声明类,类名为java01,整个{}中代表一个类
//main为主方法,是程序的入口,程序的执行从main开始,从main结束
public static void main(String[] args) {
//程序1
//程序2
//程序3
//......
}
}
接下来我们写一个简单的输出语法,输出“Hello World!”;
package MyFirstJava; //声明包,包名为MyFirstJava
public class java01 { //声明类,类名为java01,整个{}中代表一个类
//main为主方法,是程序的入口,程序的执行从main开始,从main结束
public static void main(String[] args) {
//输出Hello World!
System.out.println("Hello World!");
}
}
运行 Java 程序,在代码页点击鼠标右键选择 “Run ‘…main()’ ”;如下图:

运行成功如下图。

Java 开发环境所需包和软件下载地址:
Java 语法的注释:
- 单行注释 //
- 多行注释 /* */
- 文档注释 /** */
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我不知道为什么,但是当我设置这个设置时它无法编译设置:static_cache_control,[:public,:max_age=>300]这是我得到的syntaxerror,unexpectedtASSOC,expecting']'(SyntaxError)set:static_cache_control,[:public,:max_age=>300]^我只想将“过期”header设置为css、javaascript和图像文件。谢谢。 最佳答案 我猜您使用的是Ruby1.8.7。Sinatra文档中显示的语法似乎是在Ruby1.
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht