已阅读5页,还剩499页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章Java语言概述 本章导读1 Java语言的诞生2 学习Java的必要性3 java的特点4 java与C C 之关系5 Java运行平台6 Java程序开发7 SDK1 6编译器的新规定 1 1Java语言的诞生 Java诞生于1995年 是Sun公司组织开发的一编程语言 主要贡献者是JamesGosling 1990年Sun公司成立了由JamesGosling领导的开发小组 开始致力于开发一种可移植的 跨平台的语言 该语言能生成正确运行于各种操作系统 各种CPU芯片上的代码 他们的钻研和努力促成了Java语言的诞生 Java的发展得利于Internet和Web的出现 Internet上有各种不同的计算机 它们可能使用完全不同的操作系统和CPU芯片 但仍希望运行相同的程序 Java的出现标志着真正的分布式系统的到来 返回 1 2学习Java的必要性 Java不仅可以用来开发大型的桌面应用程序 而且特别适合于Internet的应用开发 目前 Java语言不仅是一门正在被广泛使用的编程语言 而且已成为软件设计开发者应当掌握的一门基础语言 Java语言是面向对象编程 并涉及到网络 多线程等重要的基础知识 而且很多新的技术领域都涉及到了Java语言 因此 学习和掌握Java已成为共识 国内外许多大学已将Java语言列入了本科教学计划 IT行业对Java人才的需求正在不断的增长 一些软件公司对其开发人员周期地进行Java的基础培训工作 在IT行业发达的北美洲 有将近60 的软件开发人员在使用Java完成他们的工作 EvansData公司在2002年做的一项调查中发现 在北美洲 Java的使用率已经接近C C 返回 1 3java的特点 1 平台无关性Java语言和其他语言相比 最大的优势就是能够在所有的计算机上运行 这也是Java风靡全球的主要原因 2 面向对象面向对象编程是一种先进的编程思想 更加容易解决复杂的问题 3 多线程Java的特点之一就是内置对多线程的支持 多线程允许同时完成多个任务 4 安全5 动态 返回 1 4java与C C 之关系 如果你学习过C 语言 你会感觉Java很眼熟 因为Java中许多基本语句的语法和C 一样 像常用的循环语句 控制语句等和C 几乎一样 但不要误解为Java是C 的增强版 Java和C 是两种完全不同的语言 他们各有各的优势 将会长期并存下去 Java语言和C 语言已成为软件开发者应当掌握的语言 返回 1 5Java运行平台 1 三种平台简介目前Java运行平台主要分为下列3个版本 JavaSE 曾称作J2SE Java标准版或Java标准平台 JavaSE提供了标准的JDK开发平台 利用该平台可以开发Java桌面应用程序和低端的服务器应用程序 也可以开发JavaApplet JavaEE 曾称作J2EE Java企业版或Java企业平台 可以构建企业级的服务应用 JavaEE平台包含了JavaSE平台 并增加了附加类库 以便支持目录管理 交易管理和企业级消息处理等功能 JavaME 曾称作J2ME Java微型版或Java小型平台 JavaME是一种很小的Java运行环境 用于嵌入式的消费产品中 如移动电话 掌上电脑或其他无线设备等 2 安装JavaSE平台 学习Java必须从JavaSE开始 因此 本书基于JavaSE来学习Java 目前Sun公司已发布了JDK的1 6版本 如果安装JDK选择安装到E Jdk1 6目录下 则会生成如图1 1的目录结构 图1 1JDK目录结构 3 系统环境Path值的设置 JDK平台提供的Java编译器 javac exe 和Java解释器 java exe 位于Java安装目录的bin文件夹中 为了能在任何目录中使用编译器和解释器 应在系统特性中设置Path 对于Windows2000 Windows2003 WindowsXP 用鼠标右键点击 我的电脑 弹出菜单 然后选择 属性 弹出 系统属性 对话框 再单击该对话框中的 高级 选项 然后点击按钮 环境变量 添加如下的系统环境变量 如图1 2所示 图1 2设置环境变量path 4 系统环境ClassPath值的设置 编辑系统环境变量ClassPath的值 对于Windows2000 Windows2003 WindowsXP 用鼠标右键点击 我的电脑 弹出菜单 然后选择属性 弹出 系统特性 对话框 再单击该对话框中的高级选项 然后点击按钮 环境变量 添加如下的系统环境变量 如图1 3所示 如果曾经设置过环境变量 ClassPath 可点击该变量进行编辑操作 将需要的值加入即可 对于Win9x 用记事本编辑Autoexec bat文件 将如下的设置语句加入即可 setclasspth E jdk1 6 jre lib rt jar 也可以在命令行窗口 如MS DOS窗口键入命令 setclasspth E jdk1 6 jre lib rt jar 图1 3设置环境变量classpath 5 仅仅安装JRE 如果你只想运行别人的Java程序可以只安装Java运行环境JRE JRE由Java虚拟机 Java的核心类以及一些支持文件组成 可以登录Sun的网站免费下载Java的JRE 返回 1 6Java程序开发 1 Java应用程序的开发开发一个Java应用程序的步骤 编写源文件 编译源文件生成字节码 加载运行字节码 FileName java FileName class 1 编写源文件 1 源文件的组成使用一个文字编辑器 如Edit或记事本 来编写源文件 不可使用Word编辑器 因它含有不可见字符 Java是面向对象编程 Java应用程序的源文件是由若干个书写形式互相独立的类组成 见例子1 2 应用程序的主类 一个Java应用程序必须有一个类含有publicstaticvoidmain Stringargs 方法 称这个类是应用程序的主类 args 是main方法的一个参数 是一个字符串类型的数组 注意String的第一个字母是大写的 以后会学习怎样使用这个参数 3 源文件的命名规则 源文件有几个类 源文件名 该类类名 有public类 源文件名 类名之一 有几个public类 源文件名 该Public类名 这是不允许的 4 良好的编程习惯 在编写程序时 一行最好只写一条语句 类体的以方法的大括号最好也独占一行 并有明显的缩进 本书在编写代码时 尽量遵守良好的编程习惯 良好的编程习惯对一个优秀的程序员是至关重要的 2 编译Java源程序当创建了Hello java这个源文件后 就要使用编译器 javac exe 对其进行编译 需要打开MS DOS命令行窗口 进入C盘 然后进入到1000目录中 如图1 4所示 3 运行Java程序 Java应用程序必须通过Java虚拟机中的Java解释器 java exe 来解释执行其字节码文件 Java应用程序总是从主类的main方法开始执行 因此 必须如下运行Java应用程序 C 1000 javaHello运行效果如图1 5所示 当Java应用程序中有多个类时 java命令执行的类名必须是主类的名字 没有扩展名 例 1 编译源文件c 1000 javacTom java如果编译成功 你的目录1000下就会有Tom class和Example class这两个字节码文件了 2 执行c 1000 javaExamplejava命令后的名字必须是主类的名字 运行效果如图1 6 返回 2 JavaApplet程序的开发 开发一个JavaApplet程序需经过三个步骤 编写源文件 编译源文件生成字节码 通过浏览器加载运行字节码 1 编写源文件一个JavaApplet源文件也是由若干个类组成的 一个JavaApplet源文件不再需要main方法 但必须有且只有一个类扩展了Applet类 即它是Applet类的子类 Applet类是系统提供的类 我们把这个类称作JavaApplet源文件的主类 下面的例子2是一个简单的JavaApplet源文件 2 编译 c 1000 javacBoy java编译成功后 文件夹C 1000下会生成一个Boy class文件 如果源文件有多个类 将生成多个class文件 都和源文件在同一文件夹里 如果你对源文件进行了修改 那么你必须重新编译 再生成新的字节码文件 3 运行 JavaApplet由浏览器来运行 因此我们必须编写一个超文本文件 含有applet标记的web页 通知浏览器来运行这个JavaApplet 下面是一个最简单的一个html文件 通知浏览器运行JavaApplet 我们使用记事本编辑如下 现在可以使用浏览器打开文件Boy html运行JavaApplet 效果如图1 7所示 返回 如果你的浏览器不能运行你的Applet 如没有安装浏览器 或浏览器没有内嵌的java实时运行环境等 你也可以使用J2SE提供的appletviewer 小程序查看器 来运行你的Applet C temp appletviewerBoy html 1 7JDK1 6编译器的新规定 和以前版本的编译器有了一个很大的不同 JDK1 6的编译器javac exe不再向下兼容 也就是说 如果在编译源文件时没有特别约定的话 用JDK1 6的编译器生成的字节码只能在安装了JDK1 6或JRE1 6的Java平台环境中运行 可用 source 参数约定字节码适合的Java平台 如javac source1 2 返回 第2章基本数据类型和数组 本章导读1 标识符和关键字2 基本数据类型3 基本数据类型的转换4 数据的输入与输出5 数组 2 1标识符和关键字 1 标识符用来标识类名 变量名 方法名 类型名 数组名 文件名的有效字符序列称为标识符 简单地说 标识符就是一个名字 Java语言规定标识符由字母 下划线 美元符号和数字组成 并且第一个字符不能是数字 标识符中的字母是区分大小写的 Beijing和beijing是不同的标识符 2 关键字关键字就是Java语言中已经被赋予特定意义的一些单词 它们在程序中有着不同的用途 不可以把关键字作为标识符来用 Java语言中的关键字 在大多数的JAVAIDE中 关键字用蓝色字体显示 返回 2 2基本数据类型 基本数据类型也称作简单数据类型 Java语言有8种简单数据类型 分别是 boolean byte short int long float double char 这8种数据类型习惯上可分为4大类型 逻辑类型 boolean字符类型 char整数类型 byte short int long浮点类型 float double 2 2基本数据类型 1 逻辑类型常量 true false 变量的定义 使用关键字boolean来定义逻辑变量 定义时也可以赋给初值 如 booleanx ok true 关闭 false 2 整数类型常量 123 6000 十进制 077 八进制 0 x3ABC 十六进制 整型变量的定义分为4种 2 2基本数据类型 1 int型使用关键字int来定义int型整型变量 定义时也可以赋给初值 例如 intx 平均 9898 对于int型变量 内存分配给4个字节 byte int型变量的取值范围是 231 231 1 2 byte型使用关键字byte来定义byte型整型变量 对于byte型变量 内存分配给1个字节 占8位 byte型变量的取值范围是 27 27 1 2 2基本数据类型 3 short型使用关键字short来定义short型整型变量 对于short型变量 内存分配给2个字节 short型变量的取值范围是 215 215 1 4 long型使用关键字long来定义long型整型变量 对于long型变量 内存分配给8个字节 long型变量的取值范围是 263 263 1 2 2基本数据类型 3 字符类型常量 Unicode表中的字符就是一个字符常量 例如 A 9 好 等 Java还使用转意字符常量 如 n 换行 b 退格 t 水平制表 单引号 双引号变量的定义 使用关键字char来定义字符变量 例如 charx A 漂亮 假 jiafei 2 2基本数据类型 char型变量 内存分配给2个字节 占16位 最高位不是符号位 没有负数的char char型变量的取值范围是0 65536 要观察一个字符在unicode表中的顺序位置 必须使用int类型显示转换 不可以使用short型转换 因为char的最高位不是符号位 同样 要得到一个0 65536之间的数所代表的Unicode表中相应位置上的字符也必须使用char型显示转换 下面的例子1中 分别用显示转换来显示一些字符在Unicode表中的位置 以及某些位置上的字符 2 2基本数据类型 4 浮点类型浮点型分两种 1 float型常量 453 5439f 21379 987F 2e40f 2乘10的40次方 科学计数法 变量的定义 使用关键字float来定义float型变量 对于float型变量 内存分配给4个字节 其取值范围是10 38 1038和 1038 10 38 2 2基本数据类型 2 double型常量 21389 5439d d可以省略 23189908 987 123 0 6e 140 6乘10的 140次方 科学计数法 变量的定义 使用关键字double来定义double型变量 double型变量 内存分配给8个字节 double型变量的取值范围大约是10 308 10308和 10308 10 308 返回 2 3基本数据类型的转换 基本数据类型的转换就是把一种基本数据类型变量转变成另一种基本类型变量 下列基本类型会涉及数据转换 不包括逻辑类型和字符类型 我们将这些类型按精度从 低 到 高 排列了顺序 byteshortintlongfloatdouble当把级别低的变量的值赋给级别高的变量时 系统自动完成数据类型的转换 如int型转换成long型 当把级别高的变量的值赋给级别低的变量时 必须使用显示类型转换运算 显示转换的格式 类型名 要转换的值 2 3基本数据类型的转换 例如intx int 34 89 输出x将是34 强制转换运算可能导致精度的损失 当把一个整数赋值给一个byte short int或long型变量时 不可以超出这些变量的取值范围 否则必须进行类型转换运算 下面我们看一个例子 程序运行结果见右图 返回 2 4数据的输入与输出 由于C语言出现的比较早 那个时候还没有图形用户界面的概念 GraphicsUserInterface 因此 C语言提供了许多用来输入 输出数据的函数 例如printf scanf等 Java不象C 提供在命令行进行数据输入 输出的功能不多 关于输入 输出我们将在第九章详细介绍 现在只需知道它的作用是在命令行窗口 例如 MS DOS窗口 输出数据即可 Sun公司新推出的JDK1 5又新增了一些在命令行进行数据输入 输出的功能 2 4数据的输入与输出 1 数据输出 System out printfSystem out printf的功能完全类似C语言中的printf函数 pringf的一般格式 printf 格式控制部分 表达式1 表达式2 表达式n 例如 System out printf 点 的坐标为 d d x y 输出 点 的坐标为 200 300 Printf方法的用法与C语言相同 下面我们看一个例子 来进一步了解System out printf数据输出 Printf 的格式控制部分 格式控制部分由格式控制符和普通字符组成 格式控制符用来输出表达式的值 普通字符原样输出 d 输出整数类型数据 c 输出字符类型数据 f 输出浮点类型数据 最多保留6位小数 s 输出字符串类型数据 输出数据时 也可以控制数据在命令行的位置 md 输出的int类型数据占m列 m nf 输出的浮点数据占m列 保留n位小数 Java提倡用 n 表示回车换行 2 4数据的输入与输出 2 数据的输入 ScannerScanner是SDK1 5新增的一个类 可以使用该类创建一个对象 Scannerreader newScanner System in 然后reader对象调用下列方法 函数 读取用户在命令行输入的各种数据类型 nextByte nextDouble nextFloat nextInt nextLine nextLong nextShort 2 4数据的输入与输出 上述方法执行时都会堵塞 等待你在命令行输入数据回车确认 下面让我们来看一个例子 来更好的了解Scanner语句 在这个例子中 用户在键盘依次输入若干个数字 每输入一个数字都需要按回车键确认 最后在键盘输入一个非数字字符结束整个的输入操作过程 程序将计算出这些数的和及平均值 返回 2 5数组 数组是相同类型的数据按顺序组成的一种复合数据类型 通过数组名加数组下标来使用数组中的数据 下标从0开始 1 声明数组声明数组包括数组的名字 数组包含的元素的数据类型 声明一维数组有下列两种格式 数组元素类型数组名字 数组元素类型 数组名字 2 5数组 声明二维数组有下列两种格式 数组元素类型数组名字 数组元素类型 数组名字 2 创建数组声明数组仅仅是给出了数组名和元素的数据类型 要想使用数组还必须为它分配内存空间 即创建数组 在为数组分配内存空间时必须指明数组的长度 格式如下 数组名字 new数组元素的类型 数组元素的个数 例如 boy newfloat 4 2 5数组 0 x785BA 数组的内存模式 36 50 12 87 68 78 96 67 2 5数组 3 数组元素的使用一维数组通过下标符访问自己的元素 如boy 0 boy 1 等 需要注意的是下标从0开始 因此 数组若是7个元素 下标到6为止 如果你将来使用下标超过6将会发生异常 数组下标越界 二维数组也通过下标符访问自己的元素 如a 0 1 a 1 2 等 下标也是从0开始 2 5数组 4 数组的初始化创建数组后 系统会给每个数组元素一个默认的值 如 float型是0 0 我们在声明数组时同时也还可以给数组的元素一个初始值 如 floatboy 21 3f 23 89f 2 0f 23f 778 98f 数组属于引用型变量 因此两个相同类型的数组如果具有相同的引用 它们就有完全相同的元素 例如 对于int a 1 2 3 b 4 5 数组变量a和b分别存放着不同的引用 但是 如果使用了赋值语句 a b 那么 a中存放的引用就和b的相同 这时系统将释放最初分配给数组a的元素 使得a的元素和b的元素相同 即a 0 a 1 就是b 0 b 1 而最初分配给数组a的三个元素已不复存在 2 5数组 下面让我们结合这个例子来看怎样使用数组 2 5数组 返回 0 xB9671 0 xB8321 0 xB9671 Unicode标准字符集 Java语言使用 可识别65536个字符 前128个字符为ASCII码 包含了世界上几乎所有语言中的 字母 返回 第3章运算符 表达式与语句 本章导读1 算术运算符和算术表达式2 关系运算符与关系表达式3 逻辑运算符与逻辑表达式4 赋值运算符与赋值表达式5 移位运算符6 位运算符7 条件运算符8 instanceof运算符 9 一般表达式10 语句概述11 分支语句12 循环语句13 跳转语句 3 1算术运算符和算术表达式 1 加减运算符加减运算的结合性是从左到右 加减运算的操作元是整型或浮点型数据 加减运算符的优先级是4级 2 乘 除和求余运算符乘 除和求余运算的运算符号为 都是双目运算符 运算符的结合性是从左到右 例如 2 3 8 先计算2 3 然后再将得到的结果除以8 乘 除和求余运算的操作元是整型或浮点型数据 运算符的优先级是3级 3 自增 自减运算符自增 自减运算的运算符号为 都是单目运算符 运算符的优先级是2级 运算符可以放在操作元之前 也可以放在操作元之后 但操作元必须是一个整型或浮点型变量 不能是常量或表达式 运算符的作用是使变量的值增1或减1 如 x x表示在使用x之前 先使x的值加 减 1 x x 表示在使用x之后 使x的值加 减 1 粗略地看 x和x 的作用相当于x x 1 但 x和x 的不同之处在于 x是先执行x x 1再使用x的值 而x 是先使用x的值再执行x x 1 如果x的原值是5 则 对于y x y的值为6 对于y x y的值为5 然后x的值变为6 4 算术表达式用算术符号和操作元连接起来的符合Java语法规则的式子 称为算术表达式 如x 2 y 30 3 y 5 12 n n 5 算术混合运算的精度精度从 低 到 高 排列的顺序是 byteshortintlongfloatdoubleJava将按运算符两边的操作元的最高精度保留结果的精度 例如 5 2的结果是2 要想得到2 5 必须写成5 0 2或5 0f 2 char型数据和整型数据运算结果的精度是int 例如 bytek 18 那么 H k 的结果是int型 因此下列写法是不正确的 charch H k 应当写成 charch char H k 返回 3 2关系运算符与关系表达式 关系运算符用来比较两个值的关系 关系运算符的运算结果是boolean型数据 当运算符对应的关系成立时 运算结果是true 否则是false 1 大小关系运算符大小关系运算的符号分别是 1的结果是true 在书写时要特别注意的是 20 17的结果为true 因为算术运算符的级别高于关系运算符 10 20 17相当于10 20 17 2 等与不等关系等与不等关系运算的符号分别是 都是双目运算符 运算符的级别是7级 和 都是由2个字符组成的一个完整的符号 书写时不要含有空格 注意不要将后面讲述的赋值运算符 与等号运算符 混淆 3 关系表达式结果为数值型的变量或表达式可以通过关系运算符形成关系表达式 例如 24 18 x y z 30 x等 返回 3 3逻辑运算符与逻辑表达式 逻辑运算用来实现boolean型数据的逻辑 与 或 和 非 运算 运算结果是boolean型数据 1 逻辑 与 和逻辑 或 逻辑 与 和逻辑 或 运算的符号是 是双目运算符 操作元是boolean型的变量或求值结果是boolean型数据的表达式 的运算法则是 当2个操作元的值都是true时 运算结果是true 否则是false 的运算法则是 当2个操作元的值都是flase时 运算结果是false 否则是true 和 的级别分别是11和12级 结合性是左到右 例如 1 8 9 2的结果为false 1 8 6 2的结果为true 由于关系运算符的级别高于 和 的级别 所以 1 8 9 2相当于 1 8 9 2 逻辑运算符 和 也称做短路逻辑运算符 进行op1 op2运算时 如果op1的值是false 运算符在运算时不再去计算op2的值 直接就得出op1 op2的结果是false 当op1的值是true时 运算符在运算时不再去计算op2的值 直接就得出op1 op2的结果是true 2 逻辑 非 逻辑 非 运算的符号是 是单目运算符 操作元在左面 当操作元的值是TURE时 运算结果是FALSE 反之为TURE 的运算级别是2级 结合性从右到左 例如 X相当于 X 3 逻辑表达式结果为boolean型的变量或表达式可以通过逻辑运算符形成逻辑表达式 例如 24 18 4 0 x 0 y 0 返回 3 4赋值运算符与赋值表达式 赋值运算符 赋值运算符是双目运算符 左面的操作元必须是变量 不能是常量或表达式 设x是一个整型变量 y是一个boolean型变量 x 120和y false都是正确的赋值表达式 赋值运算符的优先级较低 是14级 结合方向右到左 赋值表达式的值就是 左面变量的值 注意不要将赋值运算符 与等号运算符 混淆 返回 3 5移位运算符 移位运算符用来对二进制位进行移位操作 分为左移位操作和右移位操作 1 左移位运算符左移位运算的符号为 是双目运算符 左移位运算符左面的操作元称作被移位数 右面的操作数称作移位量 操作元必须是整型类型的数据 假设a是一个被移位的整型数据 n是位移量 a n运算的结果是通过将a的所有位都左移n位 每左移一个位 左边的高阶位上的0或1被移出丢弃 并用0填充右边的低位 对于byte或short型数据 a n的运算结果是int型精度 当进行a 2运算时 计算系统首先将a升级为int型数据 对于正数将高位用0填充 负数用1填充 然后在进行移位运算 例如 对于bytea 8 11111000在进行a 1运算时 首先将11111000生级为int型 将高位用1填充 11111111111111111111111111111000然后在进行移位运算得到 16 11111111111111111111111111110000 因此 如果把a 1的结果赋值给一个byte型变量就必须进行强制转换运算 byteb byte a 1 在进行a n运算时 如果a是byte short或int型数据 系统总是先计算出n 32的结果m 然后进行a m运算 例如 a 33的计算结果与a 1相同 对于long型数据 系统总是先计算出n 64的结果m 然后进行a m运算 2 右移位运算符右移位运算的符号为 是双目运算符 假设a是一个被移位的整型数据 n是位移量 a n运算的结果是通过将a的所有位都右移n位 每右移一个位 右边的低阶位被移出丢弃 并用0或1填充左边的高位 a是正数用0填充 负数时用1填充 因此 a每右移一次 如果该数的每一计算有效位都没有从低位移出时 就相当于将a除以2并舍弃了余数 正数不断右移位的最后结果一定是0 而负数不断右移位的最后结果是 1 对于byte或short型数据 a n的运算结果是int型精度 在进行a n运算时 如果a是byte short或int型数据 系统总是先计算出n 32的结果m 然后进行a m运算 例如 a 33的计算结果与a 1相同 对于long型数据 系统总是先计算出n 64的结果m 然后进行a m运算 在下面的例子1中 用户输入移位运算的两个操作元 程序给出右移和左移后的结果 返回 3 6位运算符 1 按位与 运算符 是双目运算符 对两个整型数据a b按位进行运算 运算结果是一个整型数据c 运算法则是 如果a b两个数据对应位都是1 则c的该位是1 否则是0 如果b的精度高于a 那么结果c的精度和b相同 2 按位或 运算符 是双目运算符 对两个整型数据a b按位进行运算 运算结果是一个整型数据c 运算法则是 如果a b两个数据对应位都是0 则c的该位是0 否则是1 如果b的精度高于a 那么结果c的精度和b相同 3 按位非 运算符 是单目运算符 对一个整型数据a按位进行运算 运算结果是一个整型数据c 运算法则是 如果a对应位是0 则c的该位是1 否则是0 4 按位异或 运算符 是双目运算符 对两个整型数据a b按位进行运算 运算结果是一个整型数据c 运算法则是 如果a b两个数据对应位相同 则c的该位是0 否则是1 如果b的精度高于a 那么结果c的精度和b相同 位运算符在操作逻辑型数据时 与逻辑运算符 不同的是 位运算要计算完a和b之后再给出运算的结果 在下面的例子2中 利用 异或 运算的性质 对几个字符进行加密并输出密文 然后再解密 运行结果见图3 2 图3 2 返回 3 7条件运算符 条件运算符是一个3目运算符 它的符号是 需要连接3个操作元 用法如下 op1 op2 op3运算法则是 当op1的值是true时 op1 op2 op3运算的结果是op2的值 当op1的值是false时 op1 op2 op3运算的结果是op3的值 例如 12 8 100 200的结果是100 12 8 100 200的结果是200 返回 boolean型 同一数据类型 3 8instanceof运算符 该运算符是双目运算符 左面的操作元是一个对象 右面是一个类 当左面的对象是右面的类创建的对象时 该运算的结果是true 否则是false 该运算符将在第4章以后使用 运算的级别 返回 3 9一般表达式 Java的一般表达式就是用运算符及操作元连接起来的符合Java规则的式子 简称表达式 一个Java表达式必须能求值 即按着运算符的计算法则 可以计算出表达式的值 例如 假如intx 1 y 2 n 10 那么 表达式x y n x y x 0 x 1 y 的值是int型数据 结果为17 返回 3 10语句概述 Java里的语句可分为以下5类 1 方法调用语句在第4章将介绍类 对象等概念 对象可以调用类中的方法产生行为 如 例子1中的reader nextInt 2 表达式语句一个表达式的最后加上一个分号就构成了一个语句 称作表达式语句 分号是语句不可缺少的部分 例如 赋值语句 x 23 3 复合语句可以用 和 把一些语句括起来构成复合语句 一个复合语句也称作一个代码块 例如 z 23 x System out println hello 4 控制语句控制语句包括 条件分支语句 循环语句和跳转语句 5 package语句和import语句package语句和import语句与类 对象有关 将在第4章讲解 返回 3 11分支语句 1 条件分支语句 1 if else语句 if else语句是Java中的一条语句 由一个 if else 和两个复合语句按一定格式构成 if else语句的格式如下 if 表达式 若干语句 else 若干语句 一条if else语句的作用是根据不同的条件产生不同的操作 执行法则如下 if后面 内的表达式的值必须是boolean型的 如果表达式的值为true 则执行紧跟着的复合语句 如果表达式的值为false 则执行else后面的复合语句 2 多条件if elseif else语句程序有时需要根据多条件来选择某一操作 这时就可以使用if elseif else语句 if elseif else语句是Java中的一条语句 由一个 if 若干个 elseif 一个 else 与若干个复合语句按一定规则构成 语句的格式如下 if 表达式1 若干语句 elseif 表达式2 若干语句 elseif 表达式n 若干语句 else 若干语句 有时为了编程的需要 复合语句中可以没有任何语句 一条if elseif else语句的作用是根据不同的条件产生不同的操作 执行法则如下 if以及elseif后面 内的表达式的值必须是boolean型的 该语句执行时 首先计算if后括号中的表达式的值 如果该表达式的值为true 则执行紧跟着的复合语句 然后就结束整个语句的执行 如果if后括号中的表达式的值为false 就依次再计算后面的elseif的表达式的值 直到出现某个表达式的值为true为止 然后执行该elseif后面的复合语句 结束整个语句的执行 如果所有的表达式的值都是false 就执行else后面复合语句 结束整个语句的执行 在下面的例子3中 用户在键盘输入3个数 程序判断这3个数能构成什么形状的三角形 2 switch开关语句switch语句是多分支的开关语句 它的一般格式定义如下 switch 表达式 case常量值1 若干个语句break case常量值2 若干个语句break case常量值n 若干个语句break default 若干语句 switch语句中表达式的值必须是整型或字符型 常量值1到常量值n必须也是整型或字符型 switch语句首先计算表达式的值 如果表达式的值和某个case后面的常量值相同 就执行该case里的若干个语句 直到碰到break语句为止 若没有任何常量值与表达式的值相同 则执行default后面的若干个语句 其中default是可有可无的 如果它不存在 并且所有的常量值都和表达式的值不相同 那么switch语句就不会进行任何处理 需要注意的是 在同一个switch语句中 case后的常量值必须互不相同 下面的例子4使用了switch语句 用户在键盘输入一个代表月份的整数 程序输出是该月是在年度的第几季度 返回 3 12循环语句 1 while循环while语句的一般格式 while 表达式 若干语句 while语句由关键字while 括号中的一个求值为boolean型数据的表达式和一个复合语句组成 其中的复合语句称作循环体 循环体只有一条语句时 大括号 可以省略 但最好不要省略 以便增加程序的可读性 表达式称作循环条件 while语句的执行规则是 1 计算表达式的值 如果该值是true时 就进行 2 否则进行 3 2 执行循环体 再进行 1 3 结束while语句的执行while语句执行规则如流程图3 5所示 while语句执行规则如流程图3 5所示 图3 5while循环语句 2 do while循环一般格式 do 若干语句 while 表达式 do while循环和while循环的区别是 do while的循环体至少被执行一次 如图3 6所示 下面的例子5分别用while和do while循环计算常数e的近似值 e 1 1 1 1 2 1 3 3 for循环for语句的一般格式 for 表达式1 表达式2 表达式3 循环体 for语句由关键字for 括号中用分号分割的3个表达式 以及一个复合语句组成 其中的 表达式2 必须是一个求值为boolean型数据的表达式 而复合语句称作循环体 for语句的执行规则是 1 计算 表达式1 完成必要的初始化工作 2 判断 表达式2 的值 若 表达式2 的值为true 则进行 3 否则进行 4 3 执行循环体 然后计算 表达式3 以便改变循环条件 进行 2 4 结束for语句的执行 一个数如果恰好等于它的因子之和 这个数就称为 完数 例如 6 1 2 3 下面的例子6使用for循环计算出1000内的全部完数 返回 3 13跳转语句 跳转语句是指用关键字break或continue加上分号构成的语句 例如 break 在循环语句的循环体中使用跳转语句 在一个循环中 比如循环50次的循环语句中 如果在某次循环体的执行中执行了break语句 那么整个循环语句就结束 如果在某次循环体的执行中执行了continue语句 那么本次循环就结束 即不再执行本次循环中循环体中continue语句后面的语句 而转入进行下一次循环 下面的例子7和例子8使用的跳转语句 返回 本章导读0 面向对象编程1 类声明和类体2 类体的构成3 构造方法与对象的创建4 对象的引用与实体5 成员变量6 方法 第4章类与对象 7 方法重载8 this关键字9 包10 import语句11 访问权限12 对象的组合13 基本类型数据的类包装14 反编译和文档生成器15 JAR文件 面向对象编程 封装封装是面向对象方法的核心思想之一 它有两个含义 一是指把对象的属性和行为看成为一个密不可分的整体 将这两者 封装 在一个不可分割的独立单位 即对象 中 另一层含义指 信息隐蔽 把不需要让外界知道的信息隐藏起来 有些对象的属性及行为允许外界用户知道或使用 但不允许更改 而另一些属性或行为 则不允许外界知晓 或只允许使用对象的功能 而尽可能隐蔽对象的功能实现细节 继承子类可以继承父类的属性 数据 和功能 操作 继承是面向对象方法中的重要概念 并且是提高软件开发效率的重要手段 多态多态 程序中允许出现重名现象 Java语言中具有操作名称的多态 和继承有关的多态 返回 类Java程序设计的基本单位是类 class Java的源文件由若干个书写形式相互独立的类构成 类有两个基本成员 成员变量和 成员 方法 成员变量刻画对象的属性 成员方法体现对象的功能 类是用来定义对象的模板 可以用类创建对象 当使用一个类创建了一个对象时 我们也说给出了这个类的一个实例 创建了该类的一个实例 4 1类声明和类体 在语法上 类由两部分构成 类声明和类体 基本格式为 class类名 类体的内容 class是关键字 用来定义类 class类名 是类的声明部分 类名必须是合法的Java标识符 两个大括号 以及之间的内容称作类体 以下是两个类声明的例子 classDog class机动车 类的名字不能是Java中的关键字 要符合标识符规定 即名字可以由字母 下划线 数字或美元符号组成 并且第一个字符不能是数字 但给类命名时 最好遵守下列习惯 1 如果类名使用拉丁字母 那么名字的首字母使用大写字母 如Hello Time People等 2 类名最好容易识别 见名知意 3 当类名由几个 单词 复合而成时 每个单词的首字母要大写 如BeijingTime AmericanGame HelloChina等 返回 4 2类体的构成 类体内容可以有2种类型的成员 1 成员变量 通过变量声明定义的变量 称作成员变量或域 用来刻画类创建的对象的属性 将在后面的第3节详细地讨论成员变量 2 方法 方法是类体的重要成员之一 其中的构造方法是具有特殊地位的方法 供类创建对象时使用 用来给出类所创建的对象的初始状态 另一类方法 可以由类所创建的对象调用 对象调用这些方法操作成员变量形成一定的算法 体现对象具有某种功能 下面是一个类名为 机动车 的类 类体内容的变量定义部分定义了2个float类型的变量 weight height 和一个int型变量 speed 方法定义部分定义了3个方法 changSpeed getWeight 和 getHeight 成员变量的类型可以是Java中的任何一种数据类型 包括前面学习过的基本类型 整型 浮点型 字符型 数组以及后面要学习的对象及接口 成员变量在整个类内都有效 与它在类体中书写的先后位置无关 例如 前述的机动车类也可以写成 在定义类的成员变量时可以同时赋予初值 表明类所创建的对象的初始状态 需要注意的是 对成员变量的操作只能放在方法中 方法可以对成员变量进行操作形成算法 如 但是不可以这样做 因为 a 12是赋值语句 不是数据的声明 类的成员类型中可以有数据和方法 即数据的定义和方法的定义 但没有语句 语句必须放在方法中 返回 4 3构造方法与对象的创建 类中有一部分方法称作构造方法 类创建对象时需使用构造方法 以便给类所创建的对象一个合理的初始状态 构造方法是一种特殊方法 它的名字必须与它所在的类的名字完全相同 并且不返回任何数据类型 即它是void型 但void必须省略不写 Java允许一个类中有若干个构造方法 但这些构造方法的参数必须不同 即或者是参数的个数不同 或者是参数的类型不同 下面的Rect类有两个构造方法 当使用一个类创建了一个对象时 我们也说给出了这个类的一个实例 创建一个对象包括对象的声明和为对象分配成员变量两个步骤 1 对象的声明 一般格式为 类的名字对象名字 如 RectrectangleOne 2 为声明的对象分配成员变量使用new运算符和类的构造方法为声明的对象分配成员变量 如果类中没有构造方法 系统会调用默认的构造方法 默认的构造方法是无参数的 你一定还记得构造方法的名字必须和类名相同这一规定 上述的Rect类提供了2个构造方法 下面都是合法的创建对象的语句 rectangleOne newRect 或rectangleOne newRect 10 20 如果类里定义了一个或多个构造方法 那么Java不提供默认的构造方法 如果上述Rect只提供一个带参数的构造方法 代码 rectangleOne newRect 创建对象是非法的 创建对象的代码 rectangleOne newRect 10 20 会实现下述两件事 1 为成员变量分配内存空间 然后执行构造方法中的语句 2 给出一个信息 已确保这些成员变量是属于对象rectangleOne的 创建对象就是指为它分配成员变量 并获得一个引用 以确保这些成员变量由它来 操作管理 为对象分配成员变量后 内存模型由声明对象时的模型图4 1 变成如图4 2所示 箭头示意对象可以操作这些属于自己的成员变量 图4 2分配实体后的对象 0 xAA11 RectangleOne 3 创建多个不同的对象一个类通过使用new运算符可以创建多个不同的对象 这些对象将被分配不同的内存空间 因此 改变其中一个对象的状态不会影响其它对象的状态 例如 我们使用前面的Rect类创建两个对象 rectangleOne rectangleTwo rectangleOne newRect 10 20 rectangleTwo newRect 33 66 当创建对象rectangleOne时 Rect类中的成员变量sizeA sizeB被分配内存空间 并返回一个引用给ectangleOne 当再创建一个对象rectangleTwo时 Rect类中的成员变量sizeA sizeB再一次被分配内存空间 并返回一个引用给rectangleTwo 内存模型如图4 3所示 rectangleOne 图4 3创建多个对象 0 xBB42 rectangleTwo 4 使用对象对象不仅可以操作自己的变量改变状态 而且还拥有了使用创建它的那个类中的方法的能力 对象通过使用这些方法可以产生一定的行为 通过使用运算符 对象可以实现对自己的变量访问和方法的调用 1 对象操作自己的变量 对象的属性 2 对象调用类中的方法 对象的功能 下面例子1中 Ladder 类创建了2个对象 ladderOne ladderTwo 返回 4 4对象的引用与实体 我们已经知道 当用类创建一个对象时 成员变量被分配内存空间 这些内存空间称做该对象的实体或变量 而对象中存放着引用 以确保这些变量由该对象操作使用 因此 如果两个对象有相同的引用 那么就具有同样的实体 假如使用例子1 Ladder 类的构造方法创建了两个对象t1 t2 t1 newLadder 11 22 33 t2 newLadder 6 12 18 0 xAA t1 0 xDD t2 0 xDD Java具有 垃圾收集 机制 Java的运行环境周期地检测某个实体是否已不再被任何对象所引用 如果发现这样的实体 就释放实体占有的内存 因此 Java编程人员不必象C 程序员那样 要时刻自己检查哪些对象应该释放内存 当把变量t2中存放的引用赋给t1后 最初分配给对象t1的成员变量 实体 所占有的内存就会被释放 没有实体的对象称作空对象 空对象不能使用 即不能让一个空对象去调用方法产生行为 假如程序中使用了空对象 程序在运行时会出现异常 NullPointerException 由于对象是动态地分配实体 所以Java的编译器对空对象不做检查 因此 在编写程序时要避免使用空对象 返回 4 5成员变量 用关键字static修饰的成员变量称作静态变量或类变量 而没有使用static修饰的成员变量称作实例变量 例如 下述A类中 x是实例变量 而y是类变量 classA floatx 实例变量staticinty 类变量 类变量是与类相关联的数据变量 也就是说 类变量是和该类所创建的所有对象相关联的变量 改变其中一个对象的这个类变量就同时改变了其它对象的这个类变量 因此 类变量不仅可以通过某个对象访问也可以直接通过类名
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GA 2317-2024警服移民管理警察冬执勤服
- 河北初级统计师资格考试(统计专业知识和实务)试题库及答案(2026年)
- 2026年造价员考试工程造价基础知识全真模拟试题及答案
- 2026年上半年全国英语等级考试(PETS)一级B全真模拟试题及答案解析(娄底)
- 2026年全国成人高等学校招生考试(英语-高起点)练习题及答案
- 2026年1月浙江自学考试试题及答案
- 执业药师药学专业知识一真题及答案
- 2026三级公共营养师(高级)考试题库及答案
- 血站护理考试题及答案
- 2026年高级健康管理师(健康风险评估与干预)考试题及答案
- 公路安全韧性提升技术指南(试行)
- 人教版六年级数学上册期末专题04求比值和化简比八大类型练习(含答案和解析)
- 2025年开放大学化工原理试题库及答案
- 四川商投集团招聘笔试题库2025
- 2025年定西辅警招聘考试真题及参考答案详解一套
- 贪婪的多巴胺课件
- 生产车间领料管理制度
- 建筑工程项目验收资料清单
- 夏季高温中暑教育培训
- 人力资源部门面试流程标准化手册
- 2025年法院书记员面试题目及答案
评论
0/150
提交评论