现在的位置: 首页 > 综合 > 正文

Java学习第一课–Welcome to Java!

2013年10月01日 ⁄ 综合 ⁄ 共 4668字 ⁄ 字号 评论关闭

作者:zieckey(zieckey@yahoo.com.cn)
说明:本文中很多内容直接引用网上孙鑫老师的Java视频教程的内容.

1. Java的起源

 Java来自于Sun公司的一个叫Green的项目,其原先的目的是为家用消费电子产品开发一个分布式代码系统,这样我们可以把E-mail发给电冰箱、电视机等家用电器,对它们进行控制,和它们进行信息交流。开始,准备采用C++,但C++太复杂,安全性差,最后基于C++开发了一种新的语言Oak(Java的前身),Oak是一种用于网络的精巧而安全的语言,Sun公司曾以此投标一个交互式电视项目,但结果被SGI打败。可怜的Oak几乎无家可归,恰巧这时Mark Ardreesen开发的Mosaic和Netscape启发了Oak项目组成员,他们用Java编制了HotJava浏览器,得到了Sun公司首席执行官Scott McNealy的支持,触发了Java进军Internet。 Java的取名也有一则趣闻,有一天,几 位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎样,得到了其他人的赞赏,于是,Java这个名字就这样传开了。
 
2. Java的特性
 
 简单的
 面向对象的
 健壮的
 安全的
 解释的
 与平台无关的
 多线程的
 动态的语言
  
3. Java的跨平台原理

 Java的跨平台是通过Java虚拟机(JVM)来实现的。

    Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。

 运行JVM字节码的工作是由解释器来完成的。解释执行过程分三步进行:代码的装入、代码的校验和代码的执行。装入代码的工作由“类装载器”(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中。除了通过符号引用自己名字空间以外的类,类之间没有其他办法可以影响其它类。在本台计算机上的所有类都在同一地址空间内,而所有从外部引进的类,都有一个自己独立的名字空间。这使得本地类通过共享相同的名字空间获得较高的运行效率,同时又保证它们与从外部引进的类不会相互影响。当装入了运行程序需要的所有类后,解释器便可确定整个可执行程序的内存布局。解释器为符号引用同特定的地址空间建立对应关系及查询表。通过在这一阶段确定代码的内存布局,Java很好地解决了由超类改变而使子类崩溃的问题,同时也防止了代码对地址的非法访问。
 随后,被装入的代码由字节码校验器进行检查。校验器可发现操作数栈溢出,非法数据类型转换等多种错误。通过校验后,代码便开始执行了。
 
4. Java开发工具包(JDK)的下载与安装
 
 下载网址:http://java.sun.com/j2se/1.4.2/download.html.
另外,http://java.sun.com/j2se/1.4.2/download.html下面有Document下载.
http://java.sun.com/docs/books/tutorial/information/download.html下面有开发指南下载。
安装很简单,跟一般的软件安装一样的.
这里我下载的是:jdk-1_5_0_08-windows-i586-p.exe,
安装目录是:C:/Program Files/Java,安装完后,该目录下有两个目录:
jdk1.5.0_08,jre1.5.0_08
这两目录一个是JDK的安装目录,另一个是Java运行环境的安装目录.

5. 第一个Java程序的编写。

下面我们用记事本写一个名为"Welcome.java"的Java程序,程序源码如下:

//This is the first program of Java
public class Welcome
{
 public static void main( String[] args )
 {
  System.out.println( "Welcome to Java!" ); 
 }
}
 
我们应该明白Java程序的源文件后缀名为 *.java,这就像C语言文件的后缀名必须为 *.c 一样。
好的,我们保存在E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src目录下。
下面我们编译看看,打开命令提示符窗口(在开始菜单->运行对话框里输入: cmd ),
好的,下面是我的编译过程:

M:/Documents and Settings/apple>e:

E:/>cd E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src

E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src>

进入到我们刚刚存放"Welcome.java"的Java源程序目录:
 E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src
然后编译:

E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src>javac Welcome.java

E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src>

这里如果提示找不到javac,类似如下的错误信息:
E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src>javac Welcome.java
'javac' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
这说明,我们的Java开发环境还没有在windows系统注册,可以通过如下方法注册:
右键点击"我的电脑"-->属性--〉高级--〉环境变量,
然后在"系统变量(S)"中选择 Path ,双击Path 出现对话框,
在"变量值(V)"这一栏里添加";C:/Program Files/Java/jdk1.5.0_08/bin" ,
注意不要把原来的值删掉了。现在应该就可以了。

编译好后运行:
E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src>java Welcome.class
Exception in thread "main" java.lang.NoClassDefFoundError: Welcome/class

E:/study/JAVA/Java-Study/JavaLesson/Lesson1/src>java Welcome
Welcome to Java!

哈哈,我们的第一个程序就编译成功了。
注意下,运行时,不用将Java字节码文件的 .class 后缀加上了,
在运行Java解释器 java.exe 时它会自动为我们添加.class 后缀。

 

6. Java的基本变量类型
 
 Java定义了8个简单(或基本)的数据类型:
字节型(byte),短整型(short),整型(int),长整型(long),字符型(char),浮点型(float),双精度型(double),布尔型(boolean)。
这些类型可分为4组:
 (1)整数:该组包括字节型(byte),短整型(short),整型(int),长整型(long),
它们有符号整数。
 (2)浮点型数:该组包括浮点型(float),双精度型(double),它们代表有小数精度要求的数字。
 (3)字符:这个组包括字符型(char),它代表字符集的符号,例如字母和数字。
 (4)布尔型:这个组包括布尔型(boolean),它是一种特殊的类型,表示真/假值。
 java提供的8种数据类型的长度如下:
  byte  b;//这里b是一个8位的数,可以表示:-128~127之间的任何数。
  short  s;//2字节的有符号的整数.可以表示:-32768~32767之间的任何数。
  int   i;//4字节的有符号的整数
  long l;//8字节的有符号的整数
  char    c;//2个字节的无符号整数,可以表示:0~65535之间的任何数。
  float  f;//4字节的
  double  d;//8字节的
  boolean bool;//只能用 true 和 false
  
  
7. 数组
 
 数组(array)是相同类型变量的集合,可以使用共同的名字引用它。数组可被定义为
任何类型,可以是一维或多维。数组中的一个特别要素是通过下标来访问它。数组提供了
一种将有联系的信息分组的便利方法。  
 Java中不能像在C/C++中那样定义的: int num[5];会出现错误,
 int num[5];//这里不能预先写出数组的空间大小。
 而只能这样先定义,后分配空间。
 int num[]; //OK
 num = new int[5];  //先定义,后分配空间。
 
 另外,在Java中推荐使用 int[] num; 这种方式定义数组,这样就直白明了,
是定义了一个int类型的数组 num ,如果int num[];那么到底num是变量呢还num[]是变量?
如这样:
 int[] num; //int [] num; int []num; []的位置没有关系
 num = new int[5];
 
 下面是几种初始化数组的方法:
 
 //可以在定义的时候初始化
 int []num={1,2,3};//OK
 //或者
 int []num2 = new int[]{1,2,3};//OK
 但是不能指定空间大小
 //int []num3 = new int[3]{1,2,3};//ERROR
 
 对数组的赋值,例如:
  int [] num3;
  num3 = new int[3];
  num3[0] = 1;
  num3[1] = 12;
  num3[2] = 13;

好的,下面看看二维数组的情况:
 二维数组:
 int [][] a;//OK
 a = new int [3][4];//3行4列
 a[0][1] = 12;
 a[2][3] = 14;
对于二维数组,Java中每行的列数可以不相等,这就和C/C++中的指针数组较为相像,
这对于存储字符串比较方便。 
 二维数组初始化
 //int [][] c = new int [][]{1,2,3,4,5,6};//ERROR
 //int [][] c = new int [2][]{{1,2,3},{4,5,6}};//Error
 int [][] c = new int [][]{{1,2,3},{4,5,6}};//OK
 int [][] d = {{1,2,3},{4,5,6}};//OK
 int [][] e = {{1,2,3},{4,5},{6}};//OK
这里还要注意与C/C++中的不同的地方,Java中数组所有值自动初始化为0  

总结:
我们在这里了解了下Java的历史的发展,Java的基本数据类型和数组的定义语法规则,
并且我还自己动手编译成功了第一个Java程序.
  

抱歉!评论已关闭.