Java基础入门.docx
- 文档编号:12650078
- 上传时间:2023-04-21
- 格式:DOCX
- 页数:38
- 大小:69.47KB
Java基础入门.docx
《Java基础入门.docx》由会员分享,可在线阅读,更多相关《Java基础入门.docx(38页珍藏版)》请在冰豆网上搜索。
Java基础入门
123第一页:
什么是Java?
Java好象随处可见-甚至在TV中。
尽管如此,说清楚Java是什
么和它能做什么却不那么容易。
刚开始接触Java的人通常有三
个问题:
什么是Java?
Java能做什么?
Java怎样改变我的生活?
让我们先回答第一个问题:
什么是Java?
Java既是一种编程语言,又是一个平台。
Java程序语言
Java是具有以下特征的高级程序语言:
简单
面向对象
可分布
可解释
强壮
安全性
结构化
轻便
功能强大
多线程
动态
Java既可以被编译,也可以被解释。
通过编译器,可以把Java
程序翻译成一种中间代码-称为字节码-可以被Java解释器
解释的独立于平台的代码。
通过解释器,每条Java字节指令被
分析,然后在计算机上运行。
只需编译一次,程序运行时解释
执行。
下图说明了它是如何工作的:
可以把Java字节码看作运行在Java虚拟机(JavaVM)上的机器
代码指令。
每中Java解释器,不管是Java开发工具还是可以运
行Java小应用程序的Web浏览器,都是一种JavaVM的实例。
Java
VM也可以由硬件实现。
Java字节码使“写一次,到处运行”成为可能。
可以在任何有
Java编译器的平台上把Java程序编译成字节码。
这个字节码可以
运行在任何JavaVM上。
例如,同一个Java程序可以运行在Windows
NT、Solaris和Macintosh上。
Java平台
平台是程序运行的硬件或软件环境。
Java平台与大多数其它平台
不同之处在于它是运行于其它基于硬件平台的纯软件平台。
大
多数其它平台是硬件和操作系统的结合。
Java平台由两部分组成:
Java虚拟机(JavaVM)
Java应用程序界面(JavaAPI)
我们已经介绍了JavaVM,它是Java平台的基础,可以移植到各
种基于硬件的平台上。
JavaAPI是软件组件的集合,它们提供了很多有用的功能,如图
形用户界面(GUI)。
JavaAPI被分组为相关组件的库(包)。
下图描述了一个运行在Java平台上的Java程序,如应用程
序(application)或小应用程序(applet)。
如图中显示的,Java
API和VM把Java程序从硬件依赖中分离出来。
作为一种独立于平台的环境,Java比本地代码慢一些。
然而,聪
明的编译器、很好地调制过的解释器和即时字节码编译器可以
在不牺牲可移植性的条件下使Java的表现接近本地代码。
第二页:
Java能做什么?
最有名的Java程序可能是Java小应用程序(applet)。
小应用程
序是遵循一定的规则,运行在支持Java的浏览器上的Java程序。
然而,Java不只用来为WWW写聪明的、娱乐性的小应用程序,它
是一个通用的、高级程序语言和强大的软件平台。
使用通用的Java
API,可以写很多种程序。
最常见的程序类型可能是小应用程序和应用程序,Java应用程序
是直接运行在Java平台上的独立的程序。
一种特殊的称为“服
务器”的应用程序可以支持网络上的客户。
服务器的包括Web
服务器、代理服务器、邮件服务器、打印服务器和导入服务
器。
另一种特殊的程序是servlet,它与小应用程序类似-在都
是应用程序的实时扩展方面。
不运行在浏览器中,servlet运行
在Java服务器上,配置或裁剪服务器。
JavaAPI是如何支持各种程序的呢?
它通过软件包提供各种功
能。
核心API(coreAPI)是实现Java平台功能的API。
核心API有
以下特征:
要素:
对象、字符串、线程、数字、输入和输出、数据
结构、系统属性、日期和时间等。
小应用程序:
Java小应用程序使用的指令集。
网络:
URL、TCP和UDP插槽、IP地址。
国际化:
可以写可本地化的代码。
程序可自动适应特殊的
场所和以适当的语言显示。
安全性:
在低级和高级两方面,包括电子签名、公/私密
钥管理、访问控制、认证。
软件组件:
称为JavaBean,可以插到已有的组件结构中,
如微软的OLE/COM/Active-X结构、OpenDoc、网景的Live
Connect。
对象系列化:
可以通过RMI(远程方法调用)进行轻量级
的持续和通讯。
JDBC(Java数据库互联):
提供对大量关系数据库的统一
访问。
Java不仅有核心API,还有标准扩展。
标准扩展定义了3D、服
务器、合作、电话、演讲、动画等的API。
第三页:
Java怎样改变我的生活?
我们不能保证你学Java会成名、发财或者找到工作。
Java只是使
你的程序更好和比其它语言付出更少的努力。
我们相信Java会帮
你做以下事情:
迅速开始:
虽然Java是一种功能强大的面向对象的语言,
但是它很容易学,尤其是对那些熟悉C或++的程序员。
写更少的代码:
程序韵律学(类、方法等)使用Java写的
程序比用C++写的小四倍。
写更好的代码:
Java语言鼓励好的编程实践,它的垃圾收
集功能可以帮你避免使用内存时出问题。
Java的面向对
象、JavaBeans组件结构和它的广泛涉及、容易扩展的API
可以使你重用别人的经过测试的代码和引入尽量少的错误。
更快地开发程序:
开发时间只相当于写同样C++程序的
一半。
为什么?
因为用Java写的代码行数更少,Java也比
C++程序简单。
用100%纯Java可以避免对平台的依赖性:
通过遵守它的语
言规则和避免使用其它语言库,可以保持程序的可移植性。
写一次,到处运行:
因为100%纯Java程序可以编译成独立
于机器的字节码,它们可以运行在任何Java平台上。
更容易的分发软件:
可以容易地从一个中心服务器升级小
应用程序。
小应用程序可以利用Java的新类即时装载而不
用重新编译整个程序的特性。
"HelloWorld"小应用程序
按照以下步骤,可以创建一个Java小应用程序。
创建Java源文件
建立一个名为HelloWorld.java的文件:
importjava.applet.Applet;
importjava.awt.Graphics;
publicclassHelloWorldextendsApplet{
publicvoidpaint(Graphicsg)
{
g.drawString("Helloworld!
",50,25);
}
}
编译源文件
用Java编译器编译这个源文件。
如果编译成功,编译器产生一个与Java源文
件(HelloWorldApp.java)在同一个目录(文件夹)的名
为HelloWorldApp.class的文件。
这个class文件包含Java字
节码,是可以被Java运行系统解释的独立于平台的代码。
如果编译失败,查看敲入的文件名是否正确,尤其是大小写。
如果还不能发现问题,可以查看编译问题。
建立一个包含小应用程序的HTML文件
用文本编辑器建立一个与HelloWorld.class在同一目录下
的Hello.html文件。
这个HTML文件包含以下代码:
Hereistheoutputofmyprogram:
WIDTH=150HEIGHT=25> 运行小应用程序 要运行小应用程序,需要在可以运行Java小应用程序的应用程序 中调用上面的HTML文件。 这个应用程序可以是支持Java的浏览 器,或者是一个Java小应用程序查看程序,如JDK提供的Applet Viewer。 例如,可以在浏览器的URL窗口中输入: file: /home/kwalrath/HTML/Hello.html 如果这些步骤成功,可以在浏览器窗口中看到如下的结果: 常见编译和解释错误 如果你在编译Java源代码或运行应用程序时遇到问题,本页的内容 可能会帮助你。 如果还不能解决问题,可以参看你使用的编译器或 解释器的文档。 编译问题 Can'tLocatetheCompiler 在UNIX系统中,如果路径设得不对,可能看到以下的错误信息: javac: Commandnotfound 用setenv或类似的命令修改PATH环境变量,把Java编译器的目录包含 进去。 SyntaxErrors 如果程序中的某些部分输入错误,编译器会产生一个语法错误消 息。 这个消息通常显示错误的类型、发生错误的行号、错误行的代 码和代码中错误的位置。 下面是一个在句末丢失分号的错误: testing.java: 14: `;'expected. System.out.println("Inputhas"+ count+"chars.") ^ 1error 有时编译器不能理解你的意图,打印出令人迷惑的错误信息或者很 多行错误信息。 例如,下面的代码片段取消了一个分号: while(System.in.read()! =-1) count++ System.out.println("Inputhas"+ count+"chars."); 当处理这个代码时,编译器发布两条错误信息: testing.java: 13: Invalidtypeexpression. count++ ^ testing.java: 14: Invaliddeclaration. System.out.println("Inputhas"+count+"chars."); ^ 2errors 编译器发布两个错误信息,因为在处理count++后,编译器的状 态指出它在表达式的中间。 没有分号,编译器无法知道这个句 子结束了。 如果发现编译器错误,那么你的程序就不会被成功编译,也不 产生.clsss文件。 仔细检查这个程序,修正错误,然后再试。 SemanticErrors 除了验证程序在语句构成上是正确的,编译器还检查其它基本的 错误。 例如,编译器在你使用一个没有被初始化的变量时会警 告你: testing.java: 13: Variablecountmaynothavebeeninitialized. count++ ^ testing.java: 14: Variablecountmaynothavebeeninitialized. System.out.println("Inputhas"+count+"chars."); ^ 2errors 解释器问题 Can'tFindClass 使用UNIX或Windows95/NTJDK的Java初学者的一个常见错误是 试图编译编译器产生的.class文件。 例如,如果你试图解 释HelloWorldApp.class,而不是类HelloWorldApp,解释器显 示如下错误信息: Can'tfindclassHelloWorldApp.class Java解释器的参数是类名,而不是文件名。 ThemainMethodIsNotDefined Java解释器要求你执行的类有一个称为main的方法,因为解释 器必须有一个开始执行Java应用程序的地方。 如果试图运行一个没有main方法的类,解释器将显示如下错误 信息: Inclassclassname: voidmain(Stringargv[]) isnotdefined 这里,classname是你试图运行的类名。 ChangestoMyProgramDidn'tTakeEffect 有时当你在编辑/调试/运行的循环中,好象你对程序的改变不 起作用-例如,一个print语句不打印。 这在MacOS上使用Java Runner运行Java应用程序时很常见。 如果重新编译.class文 件,必须停止JavaRunner,然后重新运行,因为JavaRunner不 会重新装载类。 面向对象编程 过去几年里你可能听说过很多面向对象编程的事,每个人都在 谈论它。 那么什么是对象和面向对象技术呢? 是真事还是骗局呢? 事实是 -两者都有。 面向对象技术确实为软件开发者和他们的产品提 供了很多便利。 然而,由于历史上很多骗局包围在这种技术 周围,使经理和程序员都很困惑。 很多公司认为是这种艰辛的 受害者,然后宣称他们的软件产品的面向对象的,实际上,它 们不是。 这些虚假导致困惑的顾客、引起对面向对象技术的广 泛的误导和不信任。 然而,尽管对面向对象技术的过度使用和滥用,计算机产业正 在开始克服这个骗局。 人们对它的理解正在逐渐加深。 本课揭穿了骗局,解释了面向对象编程、设计和开发后面的关 键概念。 什么是对象? 如同在“面向对象”这个名称中所隐含的,对象是理解面向对象技术的关键。 你现在可以看看周围的世界,这里有很多现实世界中对象的例子: 你的狗、你的书桌、电视机和自行车。 这些现实世界中的对象有两个相同的特征: 它们都有状态和行为。 例如,狗有状态(名字、颜色、种类)和行为(叫、吃东西)。 自行车也有状态(当前档、两个轮子、档的个数)和行为(刹车、加速、减慢、换档)。 软件对象以现实世界中的对象为模型,它们也有状态和行为。 软件对象在变量中包含它的状态、用方法实现它的行为。 可以用软件对象表示现实世界中的对象,也可以用它表示抽象概念。 例如,GUI窗口系统中的对象中的事件可以表示用户按鼠标或按键的行为。 在很多语言中,包括Java,一个对象可以选择把它的变量暴露给其它对象,允许其它对象查看甚至改变变量。 同时,对象也可以把方法隐藏起来,防止其它对象的调用。 一个对象对其它对象能否访问它的变量和方法有绝对的权限。 封装的好处 把相关变量和方法封装在一个软件包中为软件开发者提供了两个好处: 模块化-一个对象的源代码可以独立的编写和维护。 同时,对象也可以容易地在系统中传送。 信息隐藏-一个对象有一个公共界面,其它对象可以与之通讯。 但是对象也可以维护私有信息和方法,而不影响依赖于它的其它对象。 什么是消息? 一个单一的对象本身一般没什么大用,它通常作为包含很多对 象的更大的程序或应用程序的一个组件而存在。 通过这些对象 的交互作用,可以得到更高级别的功能和更复杂的行为。 软件对象通过互相发送消息进行交互和通讯。 当对象A希望对象 B执行B中的一个方法时,对象A发送一条消息给对象B。 有时,接收信息的对象需要更多的信息,以便确切知道做什 么。 这些与消息一起传送的信息叫做参数。 消息由三部分组成: 消息到达的对象。 执行的方法名。 方法需要的参数 消息的好处: 对象的行为通过它的方法表达,因此消息传送支持所有可 能的对象之间的交互。 对象不必在相同的程序或者在相同的机器上,也能互相传 送消息。 什么是类? 在现实世界中,经常有属于同一类的对象。 例如,你的自行车只是世界上很多自行车中的一辆。 在面向对象软件中,也有很多共享相同特征的不同的对象: 矩形、雇用记录、视频剪辑等。 可以利用这些对象的相同特征为它们建立一个蓝图。 对象的软件蓝图称为类。 定义: 类是定义同一类所有对象的变量和方法的蓝图或原型。 例如,可以建立一个定义包含当前档位等实例变量的自行车类。 这个类也定义和提供了实例方法(变档、刹车)的实现。 实例变量的值由类的每个实例提供。 因此,当你创建自行车类以后,必须在使用之前对它进行实例化。 当创建类的实例时,就建立了这种类型的一个对象,然后系统为类定义的实例变量分配内存。 然后可以调用对象的实例方法实现一些功能。 相同类的实例共享相同的实例方法。 除了实例变量和方法,类也可以定义类变量和类方法。 可以从类的实例中或者直接从类中访问类变量和方法。 类方法只能操作类变量-不必访问实例变量或实例方法。 系统在第一次在程序中遇到一个类时为这个类建立它的所有类变量的拷贝-这个类的所有实例共享它的类变量。 类和对象 你可能会注意到对象和类的说明很相似。 实际上,类和对象之间的差别经常是一些困惑的起源。 在现实世界中很明显,类不是它描述的对象-自行车的蓝图不是自行车。 但是在软件中就有点难区分类和对象。 着部分是由于软件对象只是现实世界的电子 模型或抽象概念。 但是也由于很多人用“对象”指类和它们的实例这两者。 类的好处 对象提供了模型化和信息隐藏的好处。 类提供了可重用性的好处。 自行车制造商一遍一遍地重用相同的蓝图来制造大量的自行车。 软件程序员用相同的类,即相同的代码一遍一遍地建立对象。 什么是继承? 一般来说,对象用类来定义。 通过了解类可以了解对象。 即使你不知道penny-farthing是什么,但是如果我告诉你它是一种自行车,你就会知道它有两个轮子、车把和脚蹬。 面向对象系统比这走得更远,它允许在其它类的基础上定义类。 例如,山地车、跑车是自行车的不同类型。 在面向对象的术语中,山地车和跑车都是自行车类的子类。 自行车类是山地车和跑车的父类。 每个子类从父类继承状态(以变量定义的形式)。 山地车和跑车拥有相同的状态: 速度等。 每个子类从父类继承方法。 山地车和跑车共享相同的行为: 刹车和变档等。 但是,子类不限于他们的父类提供的状态和行为。 子类可以在继承的父类中增加变量和方法。 子类也可以覆盖被继承的方法和提供这些方法的特定实现。 可以不只限于一层继承。 继承树,即类的层次,可以尽量深。 方法和变量沿着层次向下传递。 一般来说,层次越深,行为越特定。 继承的好处 子类可以基于父类的一般元素提供特定的行为。 通过使用继承,程序员可以重用父类的代码很多次。 程序员可以实现定义“一般”行为的父类,称为抽象类。 抽象父类定义和可能部分实现行为,但是多数类的行为没有被定义和实现。 其它程序员可以在其子类中填充细节。 Java语言 下面例子中的类Count包含一个名为countChars的方法,它从一 个Reader(实现字符输入流的一个对象)读和计算字符然后显示 读出的字符数。 即使这样小的方法都使用了JavaAPI中很多传统 语言的特征。 importjava.io.*; publicclassCount{ publicstaticvoidcountChars(Readerin) throwsIOException { intcount=0; while(in.read()! =-1) count++; System.out.println("Counted" +count+"chars."); } //...mainmethodomitted... } 通过对这个简单方法的逐行研究,本课描述了Java语言中的传统 语言特征,如变量和数据类型、操作符、表达式、流程控制等。 变量和数据类型 变量是程序语言中的名词,即它们是执行动作或被执行动作的 实体(值和数据)。 countChars方法定义了两个变量-count 和in。 程序每次从变量in中读一个字符,然后count加1。 这两 个变量的定义以黑体出现: importjava.io.*; publicclassCount{ publicstaticvoidcountChars(Readerin) throwsIOException { intcount=0; while(in.read()! =-1) count++; System.out.println("Counted"+count+"chars."); } //...mainmethodomitted... } 变量定义包含两部分: 变量的类型和变量名。 变量定义的位置 决定了它的范围。 数据类型 Java语言中的所有变量都必须有数据类型。 变量的数据类型决 定了变量可以包含的值和可以在其上进行的操作。 例如,定义int count定义count是一个整数。 Java语言中有两类数据类型: 原始数据类型和参考数据类型。 下表按关键字类出了Java支持的所有原始数据类型、它们的大 小和格式和简单描述。 类型 大小/格式 描述 (integers) byte 8-bittwo'scomplement Byte-lengthinteger short 16-bittwo'scomplement Shortinteger int 32-bittwo'scomplement Integer long 64-bittwo'scomplement Longinteger (realnumbers) float 32-bitIEEE754Single-precision floatingpoint double 64-bitIEEE754Double-precision floatingpoint (othertypes) char 16-bitUnicodecharacter Asinglecharacter boolean trueorfalse Abooleanvalue(trueorfalse) 原始数据类型的变量包含它的类型的单一值: 数字、字符或布 尔值。 例如,int的值是整数,char的值是一个16位的Unicode 字符。 数组、类和接口是参考数据类型。 参考数据类型的值是对变量 表示的真实值或值的集合的参考。 参考数据类型变量不是数组 或对象本身,而是到达它的一种方式。 countChars方法使用参考数据类型in-一个Reader对象。 当用 在语句或表达式中时,in指向对象的参考。 因此可以用对象名 访问它的成员变量或它的方法。 变量名 程序通过变量名引用它的值。 例如,当countChars方法希望引 用变量count的值时,只需简单地使用名字count。 变量的范围 变量的范围是变量可以被访问和确定变量什么时候被建立和破 坏的代码块。 程序中的变量定义的位置建立了它的范围并使之 成为下面四种类型中的一种: 成员变量 局部变量 方法参数 例外处理参数 成员变量是类或对象中的一个成员。 它可以在类中任何地方 定义,除了在方法中。 它在类中对所有代码可用。 Count类没有 定义成员变量。 可以在方法或方法的代码块中定义局部变量。 在countChars 中,count是局部变量。 count的范围,即可以访问count的代 码,从count的定义开始到countChars方法的结束。 一般来说, 局部变量的范围从它的定义到它定义所在的代码块的结束为止。 方法参数变量和异常处理参数将在以后的课程中提到。 变量初始化 局部变量和成员变量可以在它们定义时用赋值语句初始化。 赋 值语句两端的数据类型
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 基础 入门