鱼C论坛

 找回密码
 立即注册
查看: 14332|回复: 25

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

[复制链接]
发表于 2016-12-28 22:04:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

【Java教程(原创)索引帖】               
        让我们先看下下面这个简单的Java源代码,下面的Java源文件中Hello.java是由名字分别为HelloStudent的两个类组成的。
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);
        }
}
运行如下:
Hello World.png


                               
登录/注册后可看大图


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

(二)编译

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

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 Hello.png
       当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);
        }
}
运行如下:
RectangleArea.png


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







本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-12-29 01:26:13 | 显示全部楼层
这排版有点紧凑啊……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-29 07:25:00 | 显示全部楼层
介绍的知识点有点多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-29 09:38:08 | 显示全部楼层
alltolove 发表于 2016-12-29 07:25
介绍的知识点有点多

嗯,慢慢看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-12-29 09:39:42 | 显示全部楼层

对排版这方面我是新手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-22 09:45:56 | 显示全部楼层
那你加油学习排版哈
多练习多看别人排版好的文章就会进步的,
主要秘诀就是别挤别挤
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

前面几个帖子看上去是有点挤,后面好点,排版我也学习学习,谢哥们的建议
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-23 14:38:38 | 显示全部楼层
看过基础的,可以看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-26 16:28:13 | 显示全部楼层
学习中,果然程序看一遍然后自己写的话运行时会发现好多坑。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-26 17:22:39 | 显示全部楼层
hellobug 发表于 2017-2-26 16:28
学习中,果然程序看一遍然后自己写的话运行时会发现好多坑。。

自己动手做才是将其转化为自己的东西!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

运行命令更改为javac -encoding UTF-8 Hello.java就不会再报错了,但是每次println中含有中文字符的时候都要用这条命令吗? 有没有一次解决的方法呢? 请教版主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-23 22:12:32 | 显示全部楼层
本帖最后由 ShaunSS 于 2017-4-23 22:22 编辑
weiyang__ 发表于 2017-3-27 11:17
我遇到一个问题,println后面打印的内容含有中文的话,就会报错:编码GBK不可映射字符

运行命令更改为ja ...


Notepad++的话,编码那里有个转为NASI编码,试试看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-23 22:36:21 | 显示全部楼层
weiyang__ 发表于 2017-3-27 11:17
我遇到一个问题,println后面打印的内容含有中文的话,就会报错:编码GBK不可映射字符

运行命令更改为ja ...

0.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-23 22:43:38 | 显示全部楼层
005 打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-24 09:12:22 | 显示全部楼层
ShaunSS 发表于 2017-4-23 22:12
Notepad++的话,编码那里有个转为NASI编码,试试看看。

问题已解决,谢谢解答~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-24 09:12:58 | 显示全部楼层

已经解决了,多谢版主
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-11 16:23:43 | 显示全部楼层
基础但很重要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-7 16:35:56 | 显示全部楼层
正在学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-27 17:34:53 | 显示全部楼层
谢楼主!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-27 19:35:06 | 显示全部楼层
楼楼,为啥Linux中的源文件编译之后,只出现一个同名字的class文件呢,而源文件中其他的类并不会产生单独的字节码文件......
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-15 12:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表