免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 761 | 回复: 0
打印 上一主题 下一主题

Java学习第一课 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-27 13:21 |只看该作者 |倒序浏览
说明:本文中很多内容直接引用网上孙鑫老师的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 Javapublic 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.classException in thread "main" java.lang.NoClassDefFoundError: Welcome/class
E:\study\JAVA\Java-Study\JavaLesson\Lesson1\src>java WelcomeWelcome 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


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/29039/showart_221930.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP