【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课后大作业
点我前往下一讲
{:5_99:}这排版有点紧凑啊…… 介绍的知识点有点多 alltolove 发表于 2016-12-29 07:25
介绍的知识点有点多
嗯,慢慢看{:5_91:} 小甲鱼的二师兄 发表于 2016-12-29 01:26
这排版有点紧凑啊……
对排版这方面我是新手{:5_96:} 那你加油学习排版哈
多练习多看别人排版好的文章就会进步的,
主要秘诀就是别挤别挤{:10_257:} 464318257 发表于 2017-1-22 09:45
那你加油学习排版哈
多练习多看别人排版好的文章就会进步的,
主要秘诀就是别挤别挤
前面几个帖子看上去是有点挤,后面好点{:10_250:},排版我也学习学习,谢哥们的建议 看过基础的,可以看懂 学习中,果然程序看一遍然后自己写的话运行时会发现好多坑。。 hellobug 发表于 2017-2-26 16:28
学习中,果然程序看一遍然后自己写的话运行时会发现好多坑。。
自己动手做才是将其转化为自己的东西!!! 我遇到一个问题,println后面打印的内容含有中文的话,就会报错:编码GBK不可映射字符
运行命令更改为javac -encoding UTF-8 Hello.java就不会再报错了,但是每次println中含有中文字符的时候都要用这条命令吗? 有没有一次解决的方法呢? 请教版主{:9_241:}
本帖最后由 ShaunSS 于 2017-4-23 22:22 编辑
weiyang__ 发表于 2017-3-27 11:17
我遇到一个问题,println后面打印的内容含有中文的话,就会报错:编码GBK不可映射字符
运行命令更改为ja ...
Notepad++的话,编码那里有个转为NASI编码,试试看看。 weiyang__ 发表于 2017-3-27 11:17
我遇到一个问题,println后面打印的内容含有中文的话,就会报错:编码GBK不可映射字符
运行命令更改为ja ...
005 打卡 ShaunSS 发表于 2017-4-23 22:12
Notepad++的话,编码那里有个转为NASI编码,试试看看。
问题已解决,谢谢解答~ 零度非安全 发表于 2017-4-23 22:36
已经解决了,多谢版主{:10_323:} 基础但很重要{:5_91:} 正在学习
谢楼主! 楼楼,为啥Linux中的源文件编译之后,只出现一个同名字的class文件呢,而源文件中其他的类并不会产生单独的字节码文件......
页:
[1]
2