• 1. 第1课 我的第一个java程序
  • 2. 学习目标java发展简史 掌握javac、java命令 理解JVM,JDK,JRE 搞定PATH、ClassPath
  • 3. Java发展历程Oak:Java语言前身,1991年出现 基于C++开发的语言,主要用于嵌入式设备的应用程序开发 之后产生了HotJava浏览器
  • 4. Java发展历程Java主设计者: James Gosling 1995.5.23 SUN发布Java 1.0 Java Development Kit JDK1.0 Java2 JDK1.2 J2SE5.0得到进一步改善 2006年:JDK6.0 2010年9月:发布7.0,增加了闭包功能
  • 5. Java主要技术分支JAVA SE Java 2 Platform ,Standard Edition JAVA EE Java2 Platform Enterprise Edition JAVA ME Java 2 Platform ,Micro Edition
  • 6. 三种技术的关系
  • 7. java语言的特点简洁有效 可移植性 面向对象 解释型 适合分布式计算 拥有较好的性能 健壮性 多线程 安全性
  • 8. Java语言运行机制
  • 9. 首先请编辑一个HelloWorld.java的文本文件,注意后缀是*.java,请记得文件名,因为程序码中要用到它,您的第一个程序是这样的: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello! World!"); } }
  • 10. 写Java程序通常都是由定义「类」开始,"class"是Java 用来定义类别的关键字,类的名称是HelloWorld,这与您所编辑的文件(HelloWorld.java)文件名必须相同,在编写Java程序时,一个文件中可编写数个类,但是只能有一个"public" 类,而且文件名必须与这个"public"类的名称相同。
  • 11. 接下来看看 main() 方法(Method),它是Java程序的「入口」(Entry point),程序的执行是由入口开始的,它一定是个"public" 成员(Member),这样它才可以被调用;由于它不需要产生对象就要能被执行,所以它必须是个"static"成员。 (public与static的观念都是面向对象程序上的观念,之后讨论类别与对象时会再看到)
  • 12. "void"表示这个方法执行结束后不返回任何值,Java程序的主方法不需返回任何值,所以一律使用void;main()是Java程序的主方法名称,其中"String[] args"是命令行参数(Command line argument),可以在执行程序时取得使用者指定的相关参数,目前虽然您不使用,但仍要写它,这是规定,args只是个参数名称,可以随意命名。你也可以写成"String args[]",这是彷造C语言的语法,但Java中偏好"String[] args"的写法。
  • 13. 再来看 System.out.println("Hello! World"); 在这个程序中使用了System类,使用它的公开成员 out 对象,它是一个 PrintStream 对象,您使用了它所提供的println()方法,将当中指定的字符串(String) "Hello! World!" 输出至 Console 上。
  • 14. 一个最基本的Java程序完成了,接下来要编译程序了,使用javac程序,如下所示: javac HelloWorld.java 编译完成后,同一个目录下会产生一个HelloWorld.class文件,在执行时期时可以由执行环境转换为平台可执行的格式,要执行它必须使用 java程序,如下所示: java HelloWorld
  • 15. java开发的过程
  • 16. 为什么需要 JVM? Java程序可以跨平台,这是你在许多书或文件早就看过的描述,但是跨平台是怎么一回事?在这之前,你得先了解不能跨平台是怎么一回事。 其实对于计算机而言,它只认识一种语言,也就是0101序列所组合而成的指令。当你使用的是C/C++等之类的高层语言编写程序时,其实这些语言,都是比较贴近人类可阅读的文法,精确点来说,大部份就是比较接近英文文法的语言。这是为了方便人类阅读及编写。计算机其实看不懂C/C++这类语言。
  • 17. 你要有个「翻译员」将你写的C/C++程序,翻译为计算机看得懂的0101序列指令,这个翻译员就是所谓的「编译器」(Compiler):
  • 18. 问题在于,每个平台所认识的0101序列并不一样。在Windows上也许某个指令是0101,在Linux下也许是1010,因此不同的平台必须使用不同的编译器来翻译你的程序,而在Windows平台上编译好的程序,也不能直接拿到Linux等其它平台上执行,而必须经过重新编译的动作,让编译器将你的程序翻译为该平台可以执行的指令。 由于每个平台的特性不同,可引用的程序库(Library)不同,也许你的程序还得作修改,才可以在另一个平台上编译执行。这很不方便,这表示如果你在Windows设计了一款游戏,想要卖给Linux的使用者,就得再花费一些功夫。
  • 19. Java 也是个高层语言,要让计算机执行你编写的程序,也是得透过编译器的翻译。不过,Java编译时,并不直接翻译为相依于某平台的0101指令,而是翻译为中间格式的字节码(byte code)。Java 的源码后缀名为*.java,经过编译器翻译过后,会变成*.class的字节码。如果想要执行这个字节码文件,目标平台上必须安装有JVM(Java Virtual Machine)。JVM会将字节码翻译为平台相依的语言。
  • 20. (本页无文本内容)
  • 21. Java虚拟机(Java Virtual Machine)
  • 22. Java虚拟机Java最大特点:可移植性,一个程序,可以同时在多个平台上执行。而不改变程序本身。如果想要实现这样的特征,必须用到JVM
  • 23. 不同的平台必須安裝該平台相依的JVM。 JVM有个很重要的观念就是:「对于Java程序而言,其实它只认识一种操作系统(或说是一种机器),这个系统叫作JVM,而对于JVM而言,字节码文件就是它的可执行文件!也就是后缀名为.class的文件。Java程序理想上,并不用理会真正执行于哪个平台之上,它只要知道如何执行于JVM之上就可以了,至于JVM实际上如何与底层平台作沟通,则是JVM自己的事!这个观念非常的重要,对于往下面搞清所谓PATH环境变量与CLASSPATH变量,有非常大的帮助。
  • 24. Java不仅仅是个语言,更是一个标准。当制订API时,有兴趣的各大厂商提出自己的API,最后大家得一起投票,决定最后的API名称等规格,而后各大厂再去实作API,也因此,在这个JRE中所提供的程序库,才能保证在另一个JRE也有提供,这些大厂们共同制定的API,就是所谓的标准程序库,或叫作Java SE API。 Java程序会引用标准程序库,并执行在JVM这个唯一认识的系统之上,这样才能达到跨平台的目的。标准程序库及JVM,都包含在JRE之中。所以Java程序要能够执行在计算机中,就必须安装JRE。如果你的程序有引用到标准程序库,就直接由JRE提供,而所有的程序(包括自定义的程序与标准程序库提供的程序)是执行在JVM上。
  • 25. (本页无文本内容)
  • 26. PATH 是什么? 这是计算机中第一次装完JDK,在没有进行任何设定下,会出现以下的讯息 这是(Windows)操作系统在跟你说,它找不到javac放在哪边!当你要执行一个指令,那个指令放在哪,操作系统并不会知道,除非你跟他说放在哪边,例如 来安装 JDK 中曾经提过,javac是放在JDK安装目录的bin中,所以键入以下的指令,就可以执行:
  • 27. "C:\Program Files\Java\jdk1.6.0_20\bin\javac" HelloWorld.java 然而,若每次执行都得输入指令所在位置,实在太累人了,而且你会有问题的是,来安装 JDK 中最后示范执行java指令时, 为什么可以直接执行? 其实,当你直接键入一个指令而没有指定路径信息时,操作系统会依照PATH环境变量中所设定的路径顺序,依序寻找各路行下是否有这个指令。你可以执行echo %PATH%来看看目前系统的PATH环境变量中包括哪些路径信息:
  • 28. (本页无文本内容)
  • 29. 依上面的PATH信息,如果你键入java指令,则操作系统会找找看C:\Windows\system32中有无java(.exe)指令,如果没有再找看看C:\Windows下有无java(.exe)指令...找到的话就执行。而若你查看C:\Windows\system32,会发现当中确实有 java(.exe),这是因为安装JDK(JRE)时,Windows的JDK(JRE)安装程序会自动放一份java(.exe)到C:\Windows\system32,所以这就是为什么装好JDK(JRE)后,就可以直接执行java指令。 然而,依上面的PATH信息,如果你键入javac指令,操作系统会找找看C:\Windows\system32中有无javac(.exe)指令,如果没有再找看看C:\Windows下有无javac (.exe)指令...当所有路径都找不到时,就会出现刚刚所看到的错误讯息,因为操作系统不知道你把javac放在哪里了。
  • 30. 你要在PATH中设定指令的路径信息,操作系统才可以凭借找到指令。如果要设定PATH,可以使用SET指令来设定,设定方式为SET PATH=路径。例如: 设定时,若有多个路径,会使用分号(;)作区隔,通常会将原有的PATH附加在设定值的后面,如此需要寻找其它指令时,才可以利用保留下来的原有PATH信息。设定完成之后,你就可以执行javac并编译HelloWorld.java了。
  • 31. 操作系统会依照PATH环境变量中所设定的路径顺序,依序寻找各路行下是否有这个指令。
  • 32. CLASSPATH 是什么? 假设你在C:\workspace下写了个HelloWorld.java,并顺利使用编译器javac将之编译为HelloWorld.class,在不切换路径的情况下,可以直接执行java HelloWorld来载入HelloWorld.class并运行当中所定义的行为。 如果你切换到C:\底下或是其它路径底下,那么该如何载入HelloWorld.class并执行呢?以下并不是正确: java C:\workspace\HelloWorld 首先你要知道java这个指令是作什么用的?执行java,其实就是启动JVM,之后接下类别名称,表示由JVM载入该类别的.class并执行。
  • 33. 我们前面提过,JVM是Java程序唯一认得的操作系统,对JVM来说,可执行文件就是后缀名为.class的文件。当你要想在JVM中执行某个它的可执行文件(.class)时,则JVM会依CLASSPATH中的路径信息来寻找。 作个简单的比照,可以很清楚地对照PATH与CLASSPATH: 实体操作系统依PATH中的路径信息来寻找可执行指令(对Windows就是.exe、.bat等,对Linux等就是有执行权限的文件)。 JVM(虚拟操作系统)依CLASSPATH中的路径信息来寻找可执行指令(.class文件)。
  • 34. 如何在启动JVM时告知可执行class文件(.class)的位置?可以使用-classpath自变量来指定: java -classpath c:\workspace HelloWorld