118.Java_前定义
1.简介
Java是1995年6月由Sun公司引进到我们这个世界的革命性的编程语言。1990年Sun公司成立了由James Gosling领导的开发小组,开始致力于开发一种可移植的、跨平台的语言,该语言能生成正确运行于各种操作系统、各种CPU芯片上的代码。他们的精心专研和努力促成了Java语言的诞生。
印度尼西亚有一个重要的盛产咖啡的岛屿叫Java,中文译名为爪哇,开发人员为这种新的语言起名为Java,其寓意是为世人端上一杯热咖啡。
Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。
Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
2. 发展
1991年,SUN公司的Green项目,Oak
1995年,推出Java测试版
1996年,JDK1.0
1997年,JDK1.1
1998年,JDK1.2,大大改进了早期版本缺陷,是一个革命性的版本,更名为Java2。
2004年,J2SE 5.0 (1.5.0) Tiger老虎
2006年,J2SE 6.0 (1.6.0) Mustang野马
2011年,JavaSE7.0 Dolphin海豚
2014年,JavaSE8.0
3. 特点
3.1面向对象
Java是面向对象的编程语言,将在以后详细、准确地讨论类、对象、继承、多态、接口等重要概念。
3.2平台无关性
Java不同于一般的编译语言或解释型语言。它首先将源代码编译成字节码,再依赖各种不同平台上的虚拟机来解释执行字节码,从而具有“一次编写,到处运行”的跨平台特性。在早期JVM中,这在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的运行速度有了大幅提升。
平台无关性即在一个计算机上编译得到的字节码文件可以复制到任何一个安装了Java运行环境的计算机上直接使用。字节码由Java虚拟机负责解释运行,即Java虚拟机负责将字节码翻译成本地计算机的机器码,并将机器码交给本地的操作系统来运行。
说明:
1.平台与机器指令
这里所指的平台是由操作系统(Operating System, OS)和处理器CPU所构成。与平台无关是指软件的运行不因操作系统、处理器的变化而无法运行或出现运行错误。
每个平台都会形成自己独特的机器指令,所谓平台的机器指令就是可以被该平台直接识别、执行的一种由0,1组成的序列代码。相同的CPU和不同的操作系统所形成的平台的机器指令可能是不同的。比如,某个平台可能用8位序列代码00001111表示加法指令,以10000001表示减法指令,而另一种平台可能用8位序列代码10101010表示加法指令,以10010011表示减法指令。
2.举例对比C/C++程序依赖平台
C/C++针对当前C/C++源程序所在的特定平台对其源文件进行编译、链接,生成机器指令,即根据当前平台的机器指令生成可执行文件.
不能保证C/C++源程序所产生的可执行文件在所有的平台上都能正确地被运行,其原因是不同平台可能具有不同的机器指令(如图1.2所示)
3.Java虚拟机与字节码
Java语言提供的编译器不针对特定的操作系统和CPU芯片进行编译,而是针对Java虚拟机把Java源程序编译成称为字节码的“中间代码”可以被Java虚拟机直接识别、执行的一种由0,1组成的序列代码。
字节码并不是机器指令,因为它不和特定的平台相关,不能被任何平台直接识别、执行。Java针对不同平台提供的Java虚拟机的字节码指令都是相同的,Java虚拟机负责将字节码翻译成虚拟机所在平台的机器码,并让当前平台运行该机器码,如图1.3所示。
3.3 多线程
Java的特点之一就是内置对多线程的支持。多线程允许同时完成多个任务
3.4动态
Java程序的基本组成单元就是类,有些类是自己编写的,有一些是从类库中引入的,而类又是运行时动态装载的,这就使得Java可以在分布环境中动态地维护程序及类库。
3.5简单
Java要比C++简单,C++中许多容易混淆的概念,或者被Java弃之不用了,或者以一种更清楚更容易理解的方式实现。
4 脉络
0.前定义 1.数据类型 2.运算 3.语句 4.输入输出 5.高级功能
6.应用
5.开发步骤
5.1Java程序的开发步骤
1) 编写源文件:扩展名必须是 .java。
2) 编译Java源程序:用Java编译器(javac.exe)编译源文件,得到字节码文件。
3) 运行Java程序:使用Java解释器(java.exe)来解释执行字节码文件。
5.2简单Java程序
5.2.1源文件的编写与保存
Java应用程序的源文件是由若干个书写形式互相独立的类组成
例子1:源文件Hello.java是由Hello和Student的类组成。
package app1_1;// Netbeans建立项目时增加的部分
public class Hello {
public static void main (String args[]) {
System.out.println("大家好!");
System.out.println("Nice to meet you");
Student stu = new Student();
stu.speak("We are students");
}
}
class Student {
public void speak(String s) {
System.out.println(s);
}
}
- 1 编写源文件
使用一个文本编辑器,如Edit或记事本编写上述例子1给出的源文件。
Java源程序中语句所涉及到的小括号及标点符号都是英文状态下输入的括号和标点符号,比如“大家好!”中的引号必须是英文状态下的引号,而字符串里面的符号不受汉字符或英文字符的限制。
- 2. 保存源文件
如果源文件中有多个类,那么只能有一个类是public类;如果有一个类是public类,那么源文件的名字必须与这个类的名字完全相同,扩展名是java;如果源文件没有public类,那么源文件的名字只要和某个类的名字相同,并且扩展名是java就可以了。
上述例子1中的源文件必须命名为Hello.java。我们将Hello.java保存到C:\chapter1文件夹中。
- 3.编译
编译器(javac)
进入逻辑分区C的chapter1目录中,使用编译器javac编译源文件(如图1.13):
图1.13 使用javac编译源文件
C:\chapter1> javac Hello.java
图1.13 使用javac编译源文件
- 4.运行
1.应用程序的主类
一个Java应用程序必须有一个类含有
public static void main(String args[ ])
方法,称这个类是应用程序的主类。
保存 有public修饰类.java 或 均无public的话,其他类.java
运行 主类(有psvm方法的类)的main方法
2.解释器(java)
使用Java虚拟机中的Java解释器(java.exe)来解释执行其字节码文件。Java应用程序总是从主类的main方法开始执行。因此,需进入主类字节码所在目录,比如C:\chapter1,然后使用Java解释器(java.exe)运行主类的字节码. 图1.14 使用java解释器运行程序
C:\chapter1\> java Hello
图1.14 使用Java解释器运行程序
例子2
class A { public static void main(String args[]) { People zhubajie; zhubajie = new People(); zhubajie.height = 170; zhubajie.ear = "两只大耳朵"; System.out.println("身高:"+zhubajie.height); System.out.println(zhubajie.ear); zhubajie.speak("师傅,咱们别去西天了,改去月宫吧"); } } public class People { int height; String ear; void speak(String s) { System.out.println(s); } }
5.3java反编译
JDK提供的反编译器是javap.exe(也有真对Java的许多商业反编译软件,例如dj-gui反编译)。如果想反编译例子1中的Hello.class,可使用javap命令:javap Hello.class ,例如:
C:\chapter1\> javap Hello.class
如果想反编译类库中的Date类(其包名是java.util)Date.class,可使用javap命令:javap java.util.Date.class,例如:
C:\chapter1\> javap java.util.Date.class