我的Java Web之路 - Eclipse(1)- 安装、新建工程、编译和执行Java程序

介绍

我写这些文章的一个基本考虑点是能够让没有接触过Java的人,甚至是没有接触过编程的人,甚至是没有接触过计算机的人(我想这样的人已经很少了吧)都能快速的看懂这些文章,都能快速的根据这些文章进入Java编程世界,从而喜欢上Java编程甚至是以此为职业,都能快速的进入基于Java的产品开发,并且不仅仅是那种浮于表面的不求甚解的使用,而是能知其然更知其所以然的使用。简而言之,就是想写一本能让小白快速入门、逐步掌握、深刻理解,先知其然,后知其所以然的java web书籍。

看来,这个目标有点大,很担心能不能实现。不过不要紧,目标的作用不就是导航嘛,每次写作时都会想怎样才能实现这个目标就自然而然的会向这个目标靠近吧。

还是闲话少絮吧。原本想着前面的Java基础用一篇文章搞定,但写着写着发现必须说的点越来越多,而且不说还不行。不过到目前为止总算是能够写出比HelloWorld程序更有意义一点的程序了。虽然能写像样一点的程序了,开发效率实在有点低,再回想一下现在的开发流程:

  • 使用文本编辑工具编写Java源码文件;
  • 使用javac在命令行编译这些源码文件;
  • 使用java在命令行执行编译好的程序。

首先,使用单纯的文本编辑工具来编码实在是很不友好,每次写完要编译之后才能发现Java语法错误,要是能一边写一边提示语法错误该多好,甚至能自动把生成一些固定的代码或补全一些代码,比如main方法就是固定的,每次都要重复写就会让人感到厌烦。嗯,这就是要消除重复。看来,懒惰才是推动人类社会进步的根本动力啊。

其次,程序必须保证是能正确执行的,这是最基本的要求。如果你交付给客户的程序都是有很多缺陷的(这就是bugbug原意是臭虫昆虫的意思,引申为缺陷、故障、错误都可以),那客户怎么可能付钱给你呢。那要怎么找出bug呢,最好的办法是执行啊。所以我如果能让执行能一个语句一个语句的执行,能查看执行过程中每个变量的值看看到底程序执行错误时如何发生的等等(这个活动叫调试,英文叫debug,不就是除臭虫嘛),那不就能就尽快找出bug除掉它了。

最后,现在的一个应用程序通常都是规模很大的,不说成百上千个类吧,少说也得几十个类;而且通常都是依赖于别人开发的类,就是说你得把别人开发的类放到你指定的路径下,这样你的程序代码才可以用它,Java编译器编译的时候才能找到它,才不会编译报错;还有就是web应用程序需要很多其他资源,比如配置文件啊、网页文件啊、脚本文件啊等等。所以能有一个工具把这些文件能分门别类的管理起来,等开发完之后还能把所有文件打成一个包(这就是打包,英文就叫package),这样会极大的提高我们的开发效率啊。

基于以上的问题(当然还有很多别的问题了),人们就发明了集成开发环境(英文全称是:Integrated Developement Environment,简称IDE)这种软件。要记住,IDE也是一种软件/程序而已,前面的文本编辑工具、Java编译器、Java执行器、JVM都是一种软件/程序,只不过IDE把这些工具集成到了一起让我们能更有效率的开发程序而已。

而Eclipse就是其中的一款IDE,好像最早是IBM这个公司开发的,后来贡献出来了,而且还是开源的(简单理解就是使用它不用交钱,还能看到它的源码)。

当然,还有其他的Java开发的IDE,比如:IntelliJ IDEA、NetBeans等,据说IntelliJ IDEA要比Eclipse好用,而且有后来者居上的趋势。

不过因为我到目前为止只用过Eclipse,所以还是用这款IDE来开发我们的Java程序,因此我们一定要学会使用它,一定要熟练的使用它,越想更熟练,就越要用它。正所谓磨刀不误砍柴工,工欲善其事必先利其器,下面我们就学习一下Eclipse的安装和跟Java开发相关的使用。

Eclipse下载

Eclipse的下载可以到其官网。官网提供了两种安装方式的下载,一种是Eclipse Installer,它将自动下载Eclipse并进行安装和更新;一种是Eclipse Package,下载后直接解压缩即可。
Eclipse下载
这里我们选择Eclipse Package。因为我们以后要进行Web开发,所以选择Eclipse IDE for Enterprise Java Developers这个版本,并根据自己的操作系统版本来选择。为了加快下载速度,还可以选择国内的镜像。

好,网速比较慢的同学可以先去喝杯茶小憩一下。

Eclipse安装

下载完毕之后,可以看到文件:eclipse-jee-2018-12-R-win32-x86_64.zip

从安装包名字上我们也可以看出下载的是Eclipse哪个版本(好像版本命名方式跟以前不一样了),我们将其解压到合适的路径下即可,这就安装完毕了,简单吧,甚至都称不上安装。

解压出来就是一个eclipse文件夹,里面的东西如下:
Eclipse安装
不过现在直接使用Eclipse的话,会发现界面上的文字都是英文的,我们可以手动下载Eclipse的中文语言包并安装。不过,可以采用另外一种安装方式,就是启动Eclipse让它自己下载并安装。

事实上,Eclipse所有的插件(本质上就是某种扩展Eclipse功能的程序)都可以按照此方式安装,语言包就属于Eclipse的一种插件。

Eclipse语言包可以到其官网的下载页面进行下载,这里不再赘述,因为我不打算安装中文语言包。

Eclipse启动和工作空间

因为要用Eclipse来开发Java程序,所以JDK必须要先安装,之前的文章已经介绍过,这里就不再赘述。

直接双击解压出来的eclipse文件夹下面的eclipse.exe,这时会弹出工作空间(英文是workspace)的目录选择对话框:
Eclipse启动
这里输入你规划好的目录,如果该目录不存在,Eclipse会自动创建。如果不希望每次弹出此对话框,可以勾选底部的复选项。然后点击启动按钮Launch即可。

启动后,展现出来的是欢迎页面,这里有Eclipse的使用教程、样例等,随时可以查看,直接关闭即可。可以通过菜单Help -> Welcome重新打开。

Eclipse的工作空间,从名字上看就是你工作的地方,这个地方当然是指磁盘上的某个地方,那么用来干什么呢?当然是存储一些东西啊。本质上就是一个目录而已,在这里可以存储Eclipse的各种配置信息啊(该目录下有一个 .metadata 文件夹就是Eclipse建立的用来存储其配置信息的),当然还有就是你开发的Java程序及其相关的资源啊。

下面是Eclipse的界面分区:
Eclipse界面
跟一般的软件一样,有标题栏、菜单栏、工具栏和状态栏。主体部分是各种视图和编辑器。视图都可以通过菜单栏的Window -> Show View菜单打开。

每个视图都有自己的标题栏、关闭按钮和工具栏。视图标题栏的最右端是最大化、最小化按钮。

标题栏显示了当前打开的工作空间。

Eclipse工程

Eclipse在一个工作空间内又是按照工程(英文是Project,也可以翻译成项目)为单位来组织的。每个工程有独立一个目录,用于保存该工程的配置信息和所开发出来的各种资源包括Java源码文件等。

好,我们继续遵循用到才讲解的原则。假设我们要开发之前的HelloWorld程序,首先,我们先建立一个工程,有两种方式:

  • 菜单栏中的菜单:File -> New -> Project…
  • 工程导航视图的右键菜单:New -> Project…

当然还有New菜单下很多类型的新建项目,我们用到再讲解。现在会弹出新建工程对话框:
新建工程1
里面有很多类别的工程,选择哪个呢?因为我们要进行Java程序开发,当然就选择Java类别的Java Project啊,其他的不理会,以后用到再说。然后点击Next,弹出新建Java工程的对话框:
新建工程2
我们输入工程名字:hello-world。我们这里也为工程名字制定一个规范:

  • 有意义的单词组成;
  • 英文单词全部小写;
  • 单词之间使用连字符。

可见,任何事情都要有一个规范,那就好维护了。剩下的全部使用默认值就可以了,不过我们还是看看其他配置都是什么。我们先看JRE部分,这里就是配置JDK的地方,可以看到,Eclipse会自动检测出已经安装的JDK。

我们再看Project layout部分,这是配置Java源码文件和编译后的字节码文件的存放路径,默认是创建独立的文件夹分开存放。

剩下的不理会,直接点击Finish,这时会弹出一个打开关联的透视图对话框:
打开关联的透视图

Eclipse透视图

什么是透视图(英文叫Perspective)?其实就是各种相关视图的一种组合而已。比如,因为我们下载的Eclipse是Eclipse IDE for Enterprise Java Developers这个版本,所以Eclipse默认打开的是Java EE透视图,这个透视图把用于Java EE开发的视图都组合在一起,打开这个透视图就把这个组合里的视图都打开并布局在整个Eclipse界面上,这样就不用手动重复去把一个一个视图打开了,这又是一种消除重复。

而我们现在建立的只是Java工程,与之相关的透视图是Java透视图。所以会弹出此对话框,我们点击打开就行。这时候整个界面布局变成:
新建工程3
工具栏的最右边原来只有一个Java EE透视图,现在多了一个Java透视图的按钮,那么这里可以进行透视图的切换。

原来Java EE透视图中的Project Explorer视图(即工程导航视图)变成了Java透视图Package Explorer视图(即包导航视图),另外编辑器右边还多了Task ListOutline视图,底部的选项卡式视图也不一样。

这就是透视图的作用,你进行什么类型的活动,就打开什么类型的透视图以方便你的开发。

工程目录

好,现在已经新建了一个Java工程,我们到工作空间的目录下看看有什么变化。可以看到工作空间目录下多了一个以工程名字命名的文件夹,进入到里面可以看到:

  • .settings目录:用来存放该工程的配置;
  • bin目录:用来存放编译好的字节码文件;
  • src目录:用来存放Java源码文件;
  • .classpath文件:用来配置类路径以便寻找类;
  • .project文件:工程文件。

包导航视图、库、JAR、包和类

新建工程后,我们在包导航视图里面可以看到新建的hello-world工程,点击该工程节点左侧的小三角,工程节点下面会展开更多的节点。

其中一个节点是JRE System Library的节点,再点击该节点左侧的小三角,又会展开更多节点,于是可以看到该库节点包含哪些JAR,每一个JAR节点右侧还显示该JAR文件所在的目录。我们可以看到这些JAR文件都来自于我们安装的JDK。之前的文章也说过,JDK除了各种开发工具外还有各种库,这些库其实就是Java语言为我们定义好的类,我们可以直接使用了,比如String类。

再点击rt.jar节点左侧的小三角,又会展开更多节点,这些节点就是Java的(英文叫package),可以看到rt.jar有非常多的包,如何能快速找到想要的包呢,一个方法是利用滚动条,还有一个方法是选中某个节点后,直接敲击键盘某个字母,就会自动定位到以该字母开头的节点。比如现在已经展开了rt.jar里面的节点,直接敲字母 j 那么就会自动定位到java.applet这个包。然后往下找到java.lang这个包。

再点击java.lang这个包节点左侧的小三角,又会展开更多节点,这时我们可以看到这个包里面还有很多编译好的字节码文件,利用上面的方法可以快速找到String.class文件,这个就是Java语言为我们提供的String类了,我们可以直接使用。

其实还可以继续点击String.class节点左侧的小三角,就可以看到String类里面的属性和方法,或者直接双击String.class节点,就可以在编辑器打开这个字节码文件对应的源码文件。

可见,包导航视图是以树的形式来组织各个节点的。通过点击节点左侧的小三角就可以展开和闭合该节点。

从这里我们也可以看到,Java类的管理有遵循一定的层级关系,若干个类放在一个包里,若干个包可以打成一个JAR文件(习惯上也叫JAR包),若干个JAR包又可以定义成一个库。而JRE System Library就是定义的系统库,任何一个Java程序都必须要用到。我们可以定义自己的类、包、JAR和库。

这一切,都是为了便于类的管理,同时也能解决类名的重复导致的冲突问题。

而JRE System Library节点下面的src节点则对应我们存放源码的文件夹。我们就可以在这个节点上进行创建Java类的操作。当然,也可以手动在该文件夹下建立文件并定义类,然后刷新包导航视图即可,不过这样的话不就失去IDE的意义了吗?

新建Java类和包

工程我们已经建好了,是时候建立我们的HelloWorld类了,这里也有几种方法:

  • 菜单栏中的菜单:File -> New -> Class
  • 某个节点(这里当然是src节点,因为要编写Java源码啊)的右键菜单:New -> Class

当然还有New菜单下很多类型的新建项目,我们用到再讲解。现在会弹出新建Java类的对话框:
新建类

这个对话框内容不少,一项一项填写:

  • Source folder:指定源码文件夹,用默认的;
  • Package:这里指定新建类所在的包的名字,我填写的是 com.example 。如果不填,会有一个默认包,这里有一个约定俗成的规则:
  • 使用有意义的单词;
  • 单词全部小写;
  • 单词之前使用点符号;
  • 通常使用组织的URL的逆序,比如组织URL是:xyz.com,那么该组织开发的Java程序通常都放在包名是:com.xyz 的包下。
  • Name:类名,我填写的是HelloWorld,类名的规则在之前的文章中说过;
  • Modifiers:修饰符,这里要开发一个公有类,使用默认的public即可;
  • Superclass:该类的超类(又叫父类),以后讲解类的继承时再说,这里使用默认的java.lang.Object(它实际上是所有Java类的超类)即可;
  • Interfaces:该类要实现的接口,以后讲解,这里不用填写;
  • 因为我把HelloWorld设计成程序执行的入口类,所以勾选上:public static void main(String[] args),当然,不勾选也行,后面可以手动添加;
  • 因为我想要给类添加注释,所以勾选上:Generate comments。

填写好之后,点击Finish即可。可以看到,包导航视图里面在src节点下自动添加了com.example包节点,在该包节点下又添加了HelloWorld.java节点。

同时,编辑器会自动打开HelloWorld.java这个源码文件。编辑器选项卡上可以关闭该文件,双击包导航视图中的该源码文件节点又可在编辑器打开该文件。其他种类的文本文件都是如此。

包(package)

从编辑器我们可以看到,这个类和我们之前定义的HelloWorld类基本一样,注释也自动添加上了,注释还可以通过点击左侧的加号或减号进行展开或折叠。

比较显著的不同是,文件开头多了一句:

package com.example;

package是一个Java关键字,用于指定该类的包。我们可以尝试一下修改这个语句,把包名改成:

package com.exam;//只要跟原来不一样就行

然后保存文件:

  • 菜单:File -> Save
  • 工具栏最左侧的SaveSave All按钮
  • 快捷键:Ctrl + S

当然快捷键是最快的,刚开始可能不熟练,用的多了也就熟练了。保存后,Eclipse会自动发现Java语法错误并提示:
错误提示
这个可比普通的文本编辑器智能多了吧,也不需要编译才能发现错误了,这样就能大大提高我们的开发效率了啊。

那该怎么修改呢?根据错误提示:

The declared package "com.exam" does not match the expected package "com.example"

此错误是由于这个语句声明的包名跟期望的包名不一致导致的,那就改为一致不就行了吗?没错,那又该怎么改呢?有一下几种方法:

  • 把package声明语句里的包名改成跟包导航视图里的一致;
  • 包导航视图的com.example包节点的右键菜单:Refactor -> Rename…,输入跟package声明语句里一致的包名,点击确定即可;
  • 到工程目录下src -> com,手动把example文件夹的名字改成exam,Eclipse会自动将包导航视图里的com.example包节点变成白色,这时只要刷新包导航视图即可(按快捷键F5或右键菜单Refresh);
  • 将鼠标放到package声明语句里的包名位置,会自动弹出错误提示对话框,并且还给出解决办法,只要选择你想要的解决办法用鼠标一点击即可:
    错误自动解决
    以上方法中,无疑最后一种是最快的。

从这个演示中我们也可以看出包的本质,包其实就是一种目录结构,包名中的点符号就其实有点像目录路径的正斜杠或反斜杠,相当于文件夹的分隔符。就是说一个类文件里面的包声明语句所声明的包名,必须和该类文件所存放的目录路径要一致,这是Java语法规定的。

以上方法其实也是Eclipse自动帮你修改文件夹的名字或把类文件移到与包名一致的文件夹下而已。

我们可以再将类名改为其他的,Eclipse也会自动发现并提示错误,使用自动给出的解决办法即可。这就是IDE工具的作用,只要用得熟练了,能大大提高我们的效率。

导入类(import)

剩下的工作就是继续编辑HelloWorld类,以及创建Person类和Product类并实现它们,这里的代码除了引入了包这个概念外,其他都跟上篇文章的一样。

按照之前的步骤,我们把Person类和Product类创建在了com.example.domain包下。
Person.java

package com.example.domain;

public class Person {
	private String name;
	private int age;
	private String idNumber;
	private double money;
	public Person(String name) {
		this.name = name;
	}
	public Product buySomething(String productName, double productPrice) {
		//这里是买东西的逻辑
		Product p = new Product(productName, productPrice);
		Product.numOfSold++;
		return p;
	}
}

Product.java

package com.example.domain;

public class Product {
	public static int numOfSold;//卖出去产品数量
	private String name;
	private double price;
	/*
	 * 这是构造方法,带有两个参数
	 */
	public Product(String name, double price) {
		this.name = name;
		this.price = price;
	}
	public String getName() { return name; }
	public void setName(String name) { this.name = name; }
	public double getPrice() { return price; } 
	public void setPrice(double price) { this.price = price; }
}

HelloWorld.java

/**
 * 
 */
package com.example;

/**
 * @author yongyanli
 *
 */
public class HelloWorld {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		System.out.println("hello world!");
		Person zhangsan = new Person("张三");//生成张三这个人
		Product bread = zhangsan.buySomething("面包", 5.00);//叫张三去买面包
		Product water = zhangsan.buySomething("水", 5.00);//叫张三去买水

		Person lisi = new Person("李四");//生成李四这个人
		Product apple = lisi.buySomething("苹果", 3.00);//叫李四去买苹果
		Product orange = lisi.buySomething("橙子", 3.00);//叫李四去买橙子

		System.out.println(Product.numOfSold);//打印一共卖了多少个产品
		return ;
	}

}

Person类和Product类的包声明语句跟HelloWorld类的是不一样的,前者多了一个domain,咱到工程目录下可以看到,Person类和Product类的源码文件是放在domain文件夹下的,是与包声明语句一致的。

而此时,HelloWorld类出现了好多错误,凡是在出现Person类和Product类的地方都有错误,我们同样按照前面的方法,把鼠标放置到错误的语句上,出现错误提示:

Product cannot be resolved to a type

这句话的意思是,语句中的Product不能解析成一个类型,这就是说Java编译器找不到Product类呗。在给出的第一个解决办法上用鼠标点击:
导入类
可以发现,Person类的开头多出了一条语句:

import com.example.domain.Person;

这就是Java语法规定的import语句,要想使用不在同一个包里的类,那么必须先导入那个类。同理,我们导入Product类即可将所有错误都解决。

错误都解决了,但还出现了很多警告(Warning),同样,将鼠标放置在警告的代码语句上,提示属性或变量的值没有被用过,我们仍然可以采用Eclipse自动给出的解决办法。

经验表明,消除所有出现的警告对软件质量会有很大保证。

以后再出现类似错误或警告,就可以用类似方法解决,毕竟语法错误实在太多太多,我也没法全部列举,只有靠自己不断实践积累经验。

Eclipse里面编译和执行程序

在Eclipse里面编写好类之后,一旦保存,Eclipse就会自动发现类是否修改并自动调用Java编译器进行编译。

在Eclipse里面,编译的过程叫构建(英文叫Build),事实上,广义的构建包含了编译,而且还包含了其他的活动,比如先进行清理、复制一些文件,编译好之后打包等等。

Eclipse的自动编译开关可以通过菜单栏的菜单:

  • Project -> Build Automatically

进行关闭和开启。

那如何执行程序呢?有三种常用的方法:

  • 包导航视图的工程节点或其他有效节点的右键菜单:Run As -> Java Application
  • 编辑器打开含有main方法的源码文件,该源码文件的右键菜单:Run As -> Java Application
  • 工具栏的运行按钮。
    工具栏-运行调试
    第一个是调试按钮,第二个是运行按钮。当然,工具栏上的所有命令在菜单栏上都能找得到。

执行HelloWorld程序后,会在Console视图上显式结果,这就是习惯上称呼的控制台打印,上篇是打印在Windows的命令行工具上。
Console视图

总结

感觉写了好多内容,前面有不少是废话,大家见谅。大多数是工具的使用,没什么高深的,大家用得多了自然就熟练了。

  • IDE能大大提高我们的开发效率,要熟练使用工具,但使用工具之前一定要知其所以然,否则真的只是成了代码搬运工,而非软件工程师了;
  • Eclipse是比较好的一款IDE,性能好像比IDEA要慢,易用性嘛就仁者见仁智者见智了;
  • Eclipse使用工作空间和工程来管理代码;提供了错误自动发现、自动提示、解决办法;提供了自动编译等;
  • 要记住常用的快捷键,比如编辑文件常用的:Ctrl + C、Ctrl + V、Ctrl + X、Ctrl + A、Ctrl + Z、Ctrl + Y;刷新使用F5;文本的格式化使用Ctrl + Shift + F;注释选定内容使用Ctrl + Shift + /,取消注释选定内容使用 Ctrl + Shift + \ 等等;
  • Java引入了包的机制,将类放入一个包使用package语句,包的本质不过是目录而已,Eclipse会自动根据package语句创建目录;
  • 使用不同包中的类需要导入该类,使用import语句;
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值