零度非安全 发表于 2016-12-28 22:04:55

【Java教程(原创)】005.Java的第一个程序“Hello World”

本帖最后由 零度非安全 于 2017-1-25 22:06 编辑

【Java教程(原创)索引帖】               
      让我们先看下下面这个简单的Java源代码,下面的Java源文件中Hello.java是由名字分别为Hello和Student的两个类组成的。
Hello.java
public class Hello{
      public static void main(String args[]){
                System.out.println("这是一个简单的Java程序");
                Student stu = new Student();
                stu.speak("Hello World!");
      }
}
class Student{
      public void speak(String s){
                System.out.println(s);
      }
}运行如下:


static/image/hrline/4.gif

关于上面这段代码的几点说明:
(一)源文件的编写与保存
1>编写源文件
      使用一个文本编辑器(如notepad++或记事本)来编写上面这个例子
      在Java源程序中,语句所涉及的小括号及标点符号都是在英文状态下输入的,比如“大家好!”中的引号必须是英文状态下的引号,而字符串里面的符号不受汉字字符或英文字符的限制。
2>保存源文件
      如果源文件中有多个类,那么只能有一个类是public类;如果有一个类是public类,那么源文件的名字必须与这个类名字完全相同,扩展名是.java;如果源文件没有public类,那么源文件的名字只要和某个类的名字相同,并且扩展名是.java就可以了。
      上述的源代码的文件名必须命名为Hello.java。我们将Hello.java保存到D:\FishC_Java文件夹中。
      在保存源文件时,不可以将源文件命名为hello.java,因为Java语言是区分大小写的。在保存文件时,必须将“保存类型”选择为“所有文件”,将“编码”选择为“ANSI”。如果在保存文件时,系统总是自动给文件名尾加上“.text”(这是不允许的),那么在保存文件时可以将文件名用双引号括起。如下:


(二)编译
在保存了Hello.java源文件后,就要使用Java编译器(javac.exe)对其进行编译了。
1>编译器(javac)
现在进入逻辑分区D的FishC_Java目录中,使用编译器javac编译源文件,如下所示:


2>字节码文件(.class文件)
      如果源文件中包含多个类,编译源文件将生成多个扩展名为.class的文件,在每个扩展名为.class文件中只存放一个类的字节码,其文件名与该类的名字相同,这些字节码文件被存放在与源文件相同的目录中。
      如果源文件中有语法错误,编译器将给出错误提示,不生成字节码文件,编写者必须修改源文件,然后再进行编译。
      编译上面那个例子的源文件将得到两个字节码文件,即Hello.class和Student.class。如果对源文件进行了修改,必须重新编译,再生成新的字节码文件。

3>字节码的兼容性
      JDK1.5版本以后的编译器和以前版本的编译器有一个很大的不同,即不再向下兼容。也就是说,如果在编译源文件时没有特别约定,JDK1.6编译器生成的字节码只能在安装了JDK1.6或JRE1.6的Java平台环境中运行。可以用“-source”参数约定字节码适合的平台。如果Java程序中并没有用到JDK1.6的新功能,在编译源文件时可以使用“-source”参数,例如:
javac -source 1.4 文件名.java
      这样编译生成的字节码可以在1.4版本以上(含1.4版本)的Java平台上运行。如果源文件使用的系统类库没有超出JDK1.1版本,在编译源文件时应当使用-source参数,取值为1.1以使字节码有更好的可移植性。
      -source参数的可取值有1.7、1.6、1.5、1.4、1.3、1.2、1.1。
      如果在使用JDK1.7编译器时没有显式地使用“-source”参数,JDK1.7编译器将默认使用该参数,并取值1.7。
      注:在编译时,如果出现提示file Not Found,请检查源文件是否在当前目录中,比如D:\FishC_Java中,以及检查源文件的名字是否被错误地命名为hello.java或hello.java.txt。

(三)运行
1>应用程序的主类
      一个Java应用程序必须有一个类含有public static void main(String args[])方法,称这个类是应用程序的主类。args[]是main方法的一个参数,是一个字符串类型的数组(注意String的第一个字母是大写的),在以后非安全会给你们讲下这个参数怎么使用。上面的例子中的Java源程序中的主类是Hello类。

2>解释器(java)
       使用Java虚拟机中的Java解释器(java.exe)来解释、执行其字节码文件。Java应用程序总是从主类的main方法开始执行,因此,需进行主类字节码所在目录,比如D:\FishC_Java,然后使用Java解释器(java.exe)运行主类的字节码,如下所示:

       当Java应用程序中有多个类时,Java解释器执行的类名必须是主类的名字(没有扩展名)。当使用Java解释器运行应用程序时,Java虚拟机首先将程序需要的字节码文件加载到内存,然后解释执行字节码文件。当运行上述Java应用程序时,虚拟机将Hello.class和Student.class加载到内存。当虚拟机将Hello.class加载到内存时,就为主类中的main方法分配了入口地址,以便Java解释器调用main方法开始运行程序。

3>注意事项
       在运行时,如果出现错误提示Exception in thread"main"java.lang.NoClassFoundError,请检查主类中的main方法,如果编写程序时错误地将主类中的main方法写成public void main(String args[]),那么,程序可以编译通过,却无法运行。如果main方法书写正确,请检查是否为系统变量ClassPath指定了正确的值。
需要特别注意的是,在运行程序时,不可以带有扩展名:
D:\FishC_Java\>java Hello.class
也不可以用以下方式(带着目录)运行程序:
java D:\FishC_Java\Hello

       下面再看一个简单的Java应用程序,不要求鱼油们看懂程序的细节,但鱼油们必须知道怎样保存下面的Java源文件、怎样使用编译器编译源程序、怎样使用解释器运行程序。
class Rect{
      double width;
      double height;
      double getArea(){
                return width * height;
      }
}
public class RectangleArea{
      public static void main(String args[]){
                Rect rectangle;
                rectangle = new Rect();
                rectangle.width = 1.819;
                rectangle.height = 1.5;
                double area = rectangle.getArea();
                System.out.println("矩形的面积:" + area);
      }
}运行如下:



【特别注意】贴子中的栗子希望鱼油们能自觉的手动敲上去,不要单纯的复制粘贴保存,然后编译运行。




点我前往上一讲

000~005课后大作业

点我前往下一讲

小甲鱼的二师兄 发表于 2016-12-29 01:26:13

{:5_99:}这排版有点紧凑啊……

alltolove 发表于 2016-12-29 07:25:00

介绍的知识点有点多

零度非安全 发表于 2016-12-29 09:38:08

alltolove 发表于 2016-12-29 07:25
介绍的知识点有点多

嗯,慢慢看{:5_91:}

零度非安全 发表于 2016-12-29 09:39:42

小甲鱼的二师兄 发表于 2016-12-29 01:26
这排版有点紧凑啊……

对排版这方面我是新手{:5_96:}

464318257 发表于 2017-1-22 09:45:56

那你加油学习排版哈
多练习多看别人排版好的文章就会进步的,
主要秘诀就是别挤别挤{:10_257:}

零度非安全 发表于 2017-1-22 10:35:36

464318257 发表于 2017-1-22 09:45
那你加油学习排版哈
多练习多看别人排版好的文章就会进步的,
主要秘诀就是别挤别挤

前面几个帖子看上去是有点挤,后面好点{:10_250:},排版我也学习学习,谢哥们的建议

鱼尾 发表于 2017-2-23 14:38:38

看过基础的,可以看懂

hellobug 发表于 2017-2-26 16:28:13

学习中,果然程序看一遍然后自己写的话运行时会发现好多坑。。

零度非安全 发表于 2017-2-26 17:22:39

hellobug 发表于 2017-2-26 16:28
学习中,果然程序看一遍然后自己写的话运行时会发现好多坑。。

自己动手做才是将其转化为自己的东西!!!

weiyang__ 发表于 2017-3-27 11:17:54

我遇到一个问题,println后面打印的内容含有中文的话,就会报错:编码GBK不可映射字符

运行命令更改为javac -encoding UTF-8 Hello.java就不会再报错了,但是每次println中含有中文字符的时候都要用这条命令吗? 有没有一次解决的方法呢? 请教版主{:9_241:}

ShaunSS 发表于 2017-4-23 22:12:32

本帖最后由 ShaunSS 于 2017-4-23 22:22 编辑

weiyang__ 发表于 2017-3-27 11:17
我遇到一个问题,println后面打印的内容含有中文的话,就会报错:编码GBK不可映射字符

运行命令更改为ja ...

Notepad++的话,编码那里有个转为NASI编码,试试看看。

零度非安全 发表于 2017-4-23 22:36:21

weiyang__ 发表于 2017-3-27 11:17
我遇到一个问题,println后面打印的内容含有中文的话,就会报错:编码GBK不可映射字符

运行命令更改为ja ...

ShaunSS 发表于 2017-4-23 22:43:38

005 打卡

weiyang__ 发表于 2017-4-24 09:12:22

ShaunSS 发表于 2017-4-23 22:12
Notepad++的话,编码那里有个转为NASI编码,试试看看。

问题已解决,谢谢解答~

weiyang__ 发表于 2017-4-24 09:12:58

零度非安全 发表于 2017-4-23 22:36


已经解决了,多谢版主{:10_323:}

雨之痕迹 发表于 2017-8-11 16:23:43

基础但很重要{:5_91:}

安卓逆向 发表于 2017-9-7 16:35:56

正在学习

andyzhang209 发表于 2017-10-27 17:34:53

谢楼主!

pyrui 发表于 2017-10-27 19:35:06

楼楼,为啥Linux中的源文件编译之后,只出现一个同名字的class文件呢,而源文件中其他的类并不会产生单独的字节码文件......
页: [1] 2
查看完整版本: 【Java教程(原创)】005.Java的第一个程序“Hello World”