1-JavaSE核心编程.ppt_第1页
1-JavaSE核心编程.ppt_第2页
1-JavaSE核心编程.ppt_第3页
1-JavaSE核心编程.ppt_第4页
1-JavaSE核心编程.ppt_第5页
已阅读5页,还剩707页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JavaSE核心编程 2 课程整体目标 掌握Java语言基础知识理解面向对象的编程思想运用Java编写命令行程序运用JDBC编写数据库访问程序运用Swing组件编写图形用户界面程序运用Swing组件和JDBC实现C S结构的应用程序 3 本章目标 了解Java语言了解Java程序的类型理解Java虚拟机 JVM 掌握Java程序运行环境的配置编写第一个基于Java的程序 4 Java简介 掌握Java程序运行环境的配置编写第一个基于Java的程序 5 Java释义 Java 一词的本意是地名 爪哇 爪哇岛位于南太平洋 是印度尼西亚的一部分 爪哇岛 6 关于爪哇 全世界三大咖啡产地 巴西印尼爪哇岛中国海南岛由此可见 Java的原意是指一个咖啡的产地 也可以说是一种咖啡的品牌 7 Java语言简介 Java是一种程序设计语言 由SunMicrosystem公司于1995年推出 早在1991年 Sun公司的JamesGosling等人开始开发名为Oak的程序设计语言 希望用来控制嵌入在有线电视机顶盒和PDA等设备中的微处理器 1994年 Oak语言正式更名为Java Java语言凭借其独有的安全性 可移植性和平台无关性 迅速走红 8 Java与Internet Internet使Java成为网络上最流行的编程语言 同时 Java对Internet的影响也意义深远 在Java出现以前 几乎没有工具可以在Internet上执行动态交互程序 使用Java语言编写的Applet程序可以对用户的输入和操作作出响应 9 Java程序的类型 Applet Applet是用Java编写 在Internet上运行的程序 可以在任何客户端系统上下载 在浏览器中运行 10 Java程序的类型 Application Application是指在计算机操作系统支持下运行的程序 它既可以基于图形界面 又可以基于控制台 11 Java的平台无关性 Java是一种既面向对象又可以跨平台的语言 即 编写一次 随处运行 Java不仅适用于单机应用程序和基于网络的程序 也可用于创建消费类设备的附件程序 如移动电话 掌上设备等 12 Java虚拟机 Java虚拟机 JavaVirtualMachine 是可运行Java字节码的虚拟计算机系统 使用Java语言编写的程序 实际上是运行在JVM之上 而不是运行在操作系统上 它有一个解释器组件 可以实现Java字节码和计算机操作系统之间的通信 用户USER 字节码程序 JVM Java虚拟机 操作系统 硬件 13 Java虚拟机的运行过程 14 Java开发工具包 开发和运行Java程序 必须依赖和使用由Sun公司提供的Java开发工具包 JavaDevelopmentKit 15 JavaPlatform2 JDK Java开发工具包 从1 3版本以后 Sun公司将其正式更名为JavaPlatform2 为适应不同的用途 又将其细分为三个版本 J2SE StandardEdition 标准版 适用于普通应用程序的开发 J2EE EnterpriseEdition 企业版 适用于大型企业级应用程序的开发 J2ME MicroEdition 微型版 适用于移动设备或嵌入式设备的程序开发 16 下载安装JDK 打开浏览器 在地址栏键入 bin目录 存放可执行文件 lib目录 存放Java的类库文件 demo目录 存放演示程序 jre目录 存放Java运行环境文件 17 配置环境变量 安装JDK后 还要配置环境变量才能开发和调试Java程序 右击 我的电脑 属性 高级 环境变量 编辑Path变量 新建classpath变量 18 开发Java程序的步骤 创建Java源程序Java源程序可以使用任何文本编辑器创建与编辑 一般用 java作为扩展名 其实就是一个使用Java语言编写的文本文件 编译源程序Java编译器读取Java源程序并翻译成Java虚拟机能够明白的指令集合 并以字节码的形式保存在文件中 通常 字节码文件以 class作为扩展名 运行class 字节码 文件Java解释器读取字节码文件 取出指令并翻译成计算机能够执行的机器代码 完成运行过程 19 编写第一个Java程序 打开记事本 新建一个文本文件 将文件名改为Hello java 在文件中键入如下内容并保存 publicclassHello publicstaticvoidmain String args System out println Helloworld 20 Java源程序 扩展名为 java的源文件 使用记事本进行编辑 21 使用javac编译器编译源文件 接下来需要将源程序进行编译 进入命令提示行 切换到源文件所在的目录 执行javac命令 使用javac编译器编译源文件 javac命令的格式是 javac完整的源文件名 切换到源文件所在的目录 切换到源文件所在的目录 切换到源文件所在的目录 22 class 字节码 文件 顺利通过编译后将生成一个扩展名为 class的字节码文件 类描述文件 通过编译后生成的扩展名为 class的字节码文件 扩展名为 java的源文件 23 使用java解释器运行字节码文件 进入命令提示行 在字节码文件所在的目录下 执行java命令 使用java解释器运行字节码文件java命令的格式是 java类名称这里只需要类名称 而不是带扩展名的文件名 执行java命令运行字节码文件 程序运行效果 24 分析程序3 1 关键字class用来定义一个类 Hello是类的名称 在Java程序中 所有的语句都必须放在某个类中 整个类及其所有成员都包含在一对花括号中 即 和 之间 它们标志着类定义块的开始和结束 定义类的一般语法 class类名 25 分析程序3 2 程序必须从main函数开始执行 关键字public是访问修饰符 用来控制类成员的可见范围及作用域 关键字static允许在不创建类的实例的情况下 调用main函数 关键字void用来说明main函数是没有返回值的 args是字符串数组 用来从命令行接收参数 main函数的一般形式如下 publicstaticvoidmain String args 26 分析程序3 3 String 是字符串类型的数组 在Java中 类名称一般首字母大写 使用System out println 将信息输出到控制台上 即打印出来 27 JavaAPI文档 JavaAPI文档描述了Java的许多内置功能 以及提供各种类的帮助说明 它是程序员经常查阅的资料可登录Sun公司的官方网站免费下载 28 Java文件中的注释 与其它编程语言一样 也可以在Java文件添加注释 Java文件中的注释有三种 单行注释 以 开始 在行尾结束多行注释 以 开始 以 结束 可以有多行文档注释 以 开始 以 结束 可以有多行可以使用javadoc命令 将文档注释从源代码中提取出来 生成HTML文件 形成类似于JavaAPI文档的帮助说明文件 29 使用javadoc命令生成API文档 javadoc命令的格式是 javadoc完整的源文件名 执行javadoc命令提取文档注释的内容 30 生成的文档 31 Java语言的特点2 1 简单去掉了C和C 中许多复杂功能 如指针 运算符重载等 没有goto语句 没有struct和union等面向对象Java是完全面向对象的编程语言 比C 更彻底 纯度更高健壮性没有指针 避免对指针的误操作造成程序崩溃程序员分配的内存空间 无需释放 由Java虚拟机的垃圾回收机制来统一完成此项工作 避免了内存泄漏 32 Java语言的特点2 2 安全性由于Java取消了指针运算 有效地提高了程序的安全性Java程序运行在Java虚拟机上 虚拟机可以有效地过滤掉恶意代码 防止程序员有意编写的病毒程序分布性Java程序可以跨平台 跨操作系统 完全支持网络应用程序的设计多线程Java程序使用一个称为 多线程 的进程同时处理多项任务 33 使用Eclipse来开发 34 总结 Java是面向对象的 跨平台的程序设计语言 Java程序是运行在Java虚拟机之上的 要下载安装JDK 才可以开发和运行Java程序 JDK提供一系列的工具 这些工具位于JDK安装路径的bin目录下 常用的有 javac 编译java 运行javadoc 提取文档可以使用任何文本编辑器编写Java源程序 35 作业 熟悉JDK目录 以及JDK环境变量使用记事本编写HelloWorld程序使用记事本编写九九乘法表使用记事本编写空心菱形 36 Java语言基础 Java是面向对象并且可以跨平台的编程语言Java程序是运行在JVM Java虚拟机 之上的要运行和开发Java程序 必须下载和安装由Sun公司提供的JDK Java开发工具包 配置环境变量 Path和classpath三个常用的JDK工具 javac java和javadoc 37 本章相关词汇 蓝色为关键字 38 本章目标 Java中的变量和数据类型Java中变量的作用域规则数据类型转换Java中的输出语句Java中的运算符和表达式 39 Java语言基础 Java中的变量和数据类型 40 变量 变量是内存中的一块存储区域 是存储数据的基本单元 声明变量的语法 数据类型标识符 值 如 intnum floatmoney 123 45f charch1 ch2 A 41 数据类型 数据类型用来确定要存储在内存单元中的数据的类型 在Java中 数据类型被区分成两个种类 原始数据类型引用数据类型 42 原始数据类型 原始数据类型是最简单的数据形式 与C的基本数据类型很相似 43 引用数据类型 在Java中 除了上述8种原始数据类型的变量以外 其余的全都属于引用数据类型 其中包括 数组对象存储在引用类型变量中的值是该变量表示的值的地址 可以借用C语言中指针的概念来理解引用数据类型 44 回顾C语言中的内存分配 C语言中内存分配的两种形式 栈内存 特点 和作用域同生命周期 自动申请 自动释放 申请方式 局部变量 形式参数 栈内存中的空间一般都有名称 通过变量名访问其存储的数据 堆内存 即动态内存分配 特点 手工申请 手工释放 生命周期由程序员决定 申请方式 由malloc函数或calloc函数申请 realloc函数进行调整 free函数负责释放 堆内存中的空间一般没有名称 只能通过指针访问 45 Java中的内存分配 Java中的原始数据类型与C语言中的基本数据类型一样 其变量都是在栈中分配空间 而除了8种原始数据类型以外 其它的任何数据都不可以在栈中分配 只能到堆中开辟空间 而在堆中分配的空间又只能通过指针访问 通过指针访问堆内存的方式 在Java中被称作引用数据类型 可以认为 Java中的引用就类似于C语言中的指针 只是对指针进行了一定程度上的包装 避免了因直接操作指针而造成的数据意外损坏 从而导致程序错误的情况 46 标识符命名规则 变量 函数 数组 对象 类和接口等等都需要命名 这些名称统称为标识符 Java中对于标识符的命名规则作了如下限制 只能由英文字母 数字 下划线 和 符号组成 必须以英文字母 或 开头 即不能以数字开头 除 和 以外 不能包含其它任何特殊字符 不能与关键字冲突 严格区分大小写 47 变量的作用域和生命周期 变量的作用域指变量起作用的范围 说明变量在什么部分可以被访问 变量的生命周期是指变量在内存中存在的周期 即什么时候分配空间 什么时候销毁 48 有1 2 3 4四个数字 能组成多少个不相同且无重复的三位数 publicclassScopeVariable publicstaticvoidmain String args intcount 0 for inti 1 i 4 i 在需要使用变量时声明 for intj 1 j 4 j for intk 1 k 4 k if i j 作用域示例 49 数据类型转换 程序中经常会遇到要将数据类型进行转换的情况 如 在一个表达式中存在不同类型的操作数时 Java的数据类型转换比C控制得更为严格 数据类型转换有两种情况 自动类型转换强制类型转换 50 自动类型转换 自动类型转换也称作隐式类型转换 将一种类型的变量赋值给另一种类型的变量时 只要满足以下条件 就会发生自动类型转换 两种类型之间相互兼容 目标类型大于源类型 即类型提升 如 charch A intnum ch floatf num doubled f 类型转换自动发生 无需显式说明 51 强制类型转换 强制类型转换也称作显式类型转换 如果被转换的值的数据类型大于其目标类型 将会丢失部分信息 如 intx 65 charch x 这样的语句将报错 因为char类型小于int类型 编译器无法将其自动转换 只能进行强制转换 intx 65 charch char x 52 类型提升规则 不难看出 在有类型提升的情况下 编译器将自动进行类型转换 否则就要进行强制类型转换 类型提升应遵循如下规则 两种类型必须兼容 且目标类型大于源类型 例如 byte char和short类型都可以提升为int型 对于表达式而言 其最终结果将会与表达式中最高的数据类型相同 53 输出语句 如果要将某些信息打印到屏幕上 就必须使用输出语句 使用System out println 实现换行输出效果 使用System out print 实现输出但不换行效果 无论输出什么类型的数据 只需将数据作为参数传递给它们即可 而无需像C语言中那样 使用 s d之类的控制字符 如 inta 10 floatf 3 14f System out println a System out print f System out println X 54 使用转义字符控制输出格式 有些时候 我们可能会需要对输出格式进行控制 这就使用到了转义字符 以下是一些常用的转义字符 55 运算符和表达式 运算符是通过一定的运算规则操作一个或多个操作数 并生成结果的特定符号 运算符和操作数的有效组合称为表达式 Java提供了一系列丰富的运算符 包括 算术运算符关系运算符逻辑运算符条件运算符赋值运算符 56 算术运算符 算术运算符主要用于数学计算 一般使用数值作为操作数 57 关系运算符 关系运算符可以测试两个操作数之间的关系 但不会改变操作数的值 关系表达式的结果为boolean型true false 58 逻辑运算符 逻辑运算符与boolean型操作数一起使用 59 位运算符 60 短路与和短路或 Java提供了两个在其它计算机语言中没有的逻辑运算符 这就是逻辑与和逻辑或的短路版本 对于短路与 如果其左侧为false 则不再计算其右侧 整个表达式的结果为false 只有左侧为true时才计算右侧 对于短路或 如果其左侧为true 则不再计算其右侧 整个表达式的结果为true 只有左侧为false时 才计算右侧 61 inta 10 intb 20 if a 12 这里使用的是逻辑与 试分析最后的输出结果 inta 10 intb 20 if a 12 这里使用的是短路与 试分析最后的输出结果 11 21 11 20 短路与示例 62 赋值运算符 赋值运算符的运算顺序是从右至左的 63 条件运算符 条件运算符是三元运算符 它的一般形式是 表达式1 表达式2 表达式3根据表达式1的结果来判断执行表达式2还是表达式3 如果表达式1的结果为true 则执行表达式2 否则执行表达式3 条件运算符在某些情况下能够替代小型的if else语句 64 运算符的优先级 很多情况下 一个表达式由多个运算符组成 优先级决定运算符的计算顺序 65 总结 Java中的变量和数据类型Java中变量的作用域规则数据类型转换Java中的输出语句Java中的运算符和表达式 66 流程控制与数组 Java中的数组new关键字 67 控制流语句 一般情况下 程序是从上往下依次顺序执行的 但很多时候 我们需要改变程序执行的流程 这就使用到了控制流语句 控制流语句包括 判断语句循环语句跳转语句 68 判断语句 判断语句也称作条件语句或分支语句 判断语句主要用来控制程序在何种情况下执行某一部分 判断语句包括 if语句if else语句if elseif语句switch case语句 69 循环语句 循环语句也称作迭代语句 循环语句可用于重复执行相同的操作 循环语句包括 while语句do while语句for语句 70 跳转语句 跳转语句允许以非线性的方式执行程序 可以将控制权转到程序的其它部分 跳转语句包括 break语句continue语句Java抛弃了C语言中的goto语句 71 数组 数组用于将相同类型的数据存储在连续的存储单元中 可以通过指定数组的名称和长度来声明数组 一旦声明数组的大小 就不能再修改 数组元素通过数组名和索引来访问 索引从0开始 数组可以是一维 也可以是多维 72 回顾C语言中的数组 在C语言中 从存储方式上讲 声明数组有两种情况 在栈内存中分配空间 如 intary 10 声明有10个整型元素的数组在堆内存中分配空间 如 int p NULL 声明整型指针 指针指向堆空间p int malloc 10 sizeof int C语言允许有栈数组 也允许有堆数组 73 new关键字 在Java中 不允许将数组分配在栈内存中 只能分配在堆内存中 Java中没有类似于malloc calloc realloc和free等函数 取而代之的是new关键字 new是Java中内置的操作符 new操作符用来从堆中分配指定类型的内存空间 并返回相应类型的引用 其作用类似于malloc函数 74 声明数组示例 publicclassArrayDemo publicstaticvoidmain String args 声明整型数组的引用 类似于C中的int p int ary 为数组引用在堆内存中分配实际的内存空间 类似于C中的p int malloc 10 sizeof int ary newint 10 使用循环为数组元素赋值for inti 0 i ary length i ary i i 使用循环将数组元素逐个输出到控制台for inti 0 i ary length i System out println ary i 75 Java中声明数组的几种方式 在Java中声明数组有如下方式 仅声明数组的引用 但没有分配内存空间float fAry 声明数组的同时 根据指定的长度分配内存 但数组中没有值char chAry newchar 10 声明数组并分配内存 同时将其初始化int ary1 newint 1 2 3 4 5 与前一种方式相同 仅仅只是语法相对简略int ary2 1 2 3 4 5 76 数组之间赋值 在C语言中 不可以将数组直接赋值给另一个数组 在Java中 语法上允许这样做 但实际得到的效果是两个数组引用指向同一块内存 int ary1 2 4 6 8 10 int ary2 ary2 ary1 允许这样赋值 77 数组赋值示例 publicclassArrayDemo publicstaticvoidmain String args int ary1 2 4 6 8 10 声明并初始化数组1int ary2 声明数组2ary2 ary1 将数组1赋值给数组2ary2 3 1024 通过数组2修改其中一个元素的值 打印出数组1中的元素System out println 数组1中的元素 for inti 0 i ary1 length i System out println ary1 i 打印出数组2中的元素System out println 数组2中的元素 for inti 0 i ary2 length i System out println ary2 i 78 关于数组长度 在Java中 程序员可以不再关注数组的长度 数组自带的length属性将负责保管数组的长度 C语言不检查数组的边界 数组索引完全由程序员掌握 Java对数组下标越界情况强加约束 如果试图访问不在有效索引以内的元素 将会引发运行错误 79 Java中的垃圾回收机制 在C语言中 被malloc或calloc函数分配的堆内存在使用完毕以后 必须使用free函数进行释放 否则将会造成内存泄漏 同样的 在Java中由new分配的内存也将存在内存泄漏的可能 但释放内存的任务是由Java虚拟机来完成的 程序员可以不再关心此项工作 如果某块内存空间没有任何引用指向它 那么虚拟机就将其认定为垃圾 虚拟机并不是随时随地地立即回收垃圾 而是在系统比较空闲的时候 才会执行回收任务 80 命令行参数 在命令行使用java命令执行程序时 可以将一些参数传递给main函数 main函数携带的String 字符串数组 类型的形参args正是为了接收这些来自命令行的参数 可以从命令行传递任意多个字符串给main函数 其间使用空格隔开 也可以不传递任何参数 这些传递进来的多个字符串最后以字符串数组的形式 供main函数中加以使用 81 命令行参数示例 publicclassArgumentDemo publicstaticvoidmain String args intlen args length 获得命令行参数的个数if len 0 判断是否有命令行参数 如果有 将其逐一打印到控制台System out println len 个命令行参数 具体如下 for inti 0 i args length i System out println args i else 否则给出提示信息System out println 您没有传递任何命令行参数 82 总结 Java中数组是引用数据类型 只能存放在堆内存中 数组必须由new关键字为其分配内存 释放内存的工作由Java虚拟机的垃圾回收机制来完成 可以利用命令行参数接收来自用户的输入 83 作业 利用命令行参数输入一个整数 并判断该数字是否为奇数 如果是奇数 则用其作行数打印空心菱形PS 将字符串转换为数字的方法intnum Integer parseInt Stringnumber 利用命令行参数输入三个整数 并对三个数字进行降序排列 PS 将字符串转换为数字的方法intnum Integer parseInt Stringnumber 利用命令行参数输入多个参数 并赋值给一数组 同时判断该数组是否为回文数组PS 例如数组 123 222 333 222 123 就是回文数组 即元素倒置过后与原元素一样 84 逻辑趣味思考题 有两个桶 一个容量为5升 一个容量为3升 现在用桶子来乘水 请您用这两个桶准确的乘出4升水来 有10堆鱼 每堆鱼10条 正常情况下每条鱼10斤 但是现在这10堆鱼中有1堆鱼全是每条9斤 现在给你一把秤 假设这把秤可以称很重很重的东西 请问您能通过一次称量就找出这堆缺斤少量的鱼吗 85 回顾 Java中的数据类型分为 原始数据类型和引用数据类型 在数据类型转换中 由低类型转至高类型 将会自动 隐式 类型转换 而从高类型转至低类型 则必须强制 显式 类型转换 Java中的数组是引用数据类型 必须由new关键字在堆中分配内存 Java虚拟机的垃圾回收机制将自动释放不再使用的内存 使用命令行参数接收来自用户的输入 相关词汇 类和对象I 了解什么是面向对象面向对象的基本概念类对象封装继承多态如何定义类 如何创建对象成员运算符访问控制权限 public和private构造方法 类和对象I 了解什么是面向对象面向对象的基本概念类对象封装继承多态如何定义类 如何创建对象成员运算符访问控制权限 public和private构造方法 什么是面向对象 ObjectOriendtedProgramming 对象 以 为导向的 程序设计 面向对象编程就是使用对象进行程序设计 简写成OOP 90 面向对象的编程语言 如今 面向对象的编程思想已经成为主流 面向对象的编程语言正大行其道 最具代表性的有 C JavaC 连数据库也开始面向对象了 如Oracle 91 面向对象的编程思想 OOP 旨在计算机程序中模拟现实世界中的概念 在计算机程序中用相似的实体模拟现实世界中的实体 在OOP中 现实世界的所有事物全都被视为对象 设计和实现软件系统的方法 92 C语言的编程方式 C语言是结构化的编程语言 StructuredProgramming 简作SP 强调精巧的数据结构和优越的算法 关注程序的运行效率 不适合于大规模的程序开发 程序模块之间协调性差 程序的重用性 安全性 健壮性和可维护性都存在较大的缺陷 93 SP和OOP对比 94 面向对象的三大原则 封装 继承 多态 抽象 95 对象 对象是面向对象编程的核心部分 是实际存在的具体实体 具有明确定义的状态和行为 对象其实就是 数据 和 函数 的封装体 其中 数据表示自身的状态 也称作 属性 或 成员数据 函数表示自身的功能 也称作 方法 或 成员函数 状态 行为 96 类 人们为了更好地认识世界 将现实生活中的事物 对象 划分成类 同一类中的事物总是具有一些共性 类以共同的特性和行为定义实体 类是具有相同属性和和行为的一组对象的集合 97 属性 事物的特性在类中用变量表示 每个对象的每个属性都拥有其特定的值 属性名称由类的所有对象共享 对象或实体拥有的特征在类中表示时称为属性 98 方法 事物的行为和动作在类中用函数表示 每个对象都有相同的动作和行为 对象执行的操作在类中表示为方法 99 类和对象的区别 类是用来描述实体的 模板 或 原型 对象是实际的实体 每一个对象都是类的一个具体实例 类用来定义对象所有的属性和方法 同一类的所有对象都拥有相同的特征和操作 可以将类理解成生产产品的模具 而对象则是根据此模具生产的一个个产品 100 类与结构 最简单的理解方式 区别在于 结构体一般只有数据 属性 而没有函数 方法 101 封装 将某些东西包装在一起 然后以新的完整形式呈现出来 隐藏属性 方法或实现细节的处理方式称为封装 封装其实就是有选择性地公开或隐藏某些信息 它解决了数据的安全性问题 可以公开 无所谓 不可以公开 102 继承 继承就是重用现有的类来生成新类的一种特征 通俗地讲就是从现有的类 即父类或基类 创建新类 子类或派生类 的过程 现实生活中 继承可以达到财产重用的目的 而在Java中 继承可以使代码重用 103 多态 多态是指同一函数在不同的类中有不同的实现 多态的好处就是使类更灵活 更便于扩充 104 抽象 把相同的或相似的对象归为一类的这个过程就是抽象 所以 抽象就是分析问题的方法 抽象的基本原则 只关心主要问题 而不关心次要问题 只关心主要矛盾 而不关心次要矛盾 只关心相同的东西 而不关心不同的东西 只关心问题是什么 能够完成什么 而不关心怎样去完成 抽象的过程其实就是面向对象编程的核心思想 105 在Java中定义类 定义学生类 classStudent Stringname 姓名intage 年龄floatweight 体重 吃饭的方法 voiddining System out println 吃饱了 weight 走路的方法 voidwalk System out println 走累了 weight 106 定义类的语法 习惯上 类名的首字母大写 如 Student 107 在Java中创建对象 Test类 用来容纳main方法 publicclassTest main方法 程序入口 publicstaticvoidmain String args Studentstd 声明Student类型的引用std newStudent 创建Student类型的对象std name 张三 为姓名赋值std age 18 为年龄赋值std weight 50 为体重赋值std dining 调用成员方法System out println std weight std walk System out println std weight 108 创建对象的语法 和数组相似 对象也是引用数据类型 只能使用new运算符从堆中分配内存 创建对象的一般语法 类名引用名 new类名 使用已经定义好的类 创建该类对象的过程称为 实例化 注意 这里要有括号 109 成员运算符 在C语言中 必须要先声明结构体变量 才可以访问结构体中的成员 同样的 只有先实例化类的对象 才可以访问到类中的成员 属性和方法 使用成员运算符 来访问成员属性或成员方法 一般语法是 对象名 成员名如 std age 18 为成员属性赋值std dining 调用成员方法 110 访问权限 public和private C语言中结构体的成员可以从任何地方进行访问 这将给数据的安全留下极大的隐患 为了避免从类外部直接访问类成员而造成的数据损坏 Java对类成员的访问制定了约束 关键字public和private是访问修饰符 用来说明某个成员是否可以从类外部进行访问 public修饰的成员可以在任何地方进行访问 不受任何约束 private修饰的成员只能够被本类中的其它成员访问 而不能从类的外部进行访问 111 访问权限 无法从类的外部访问私有成员 其它类的私有成员对于当前类也是隐藏的 112 访问权限示例 classStudent privateStringname 姓名 私有的 不可以从类外部直接访问privateintage 年龄 私有的 不可以从类外部直接访问privatefloatweight 体重 私有的 不可以从类外部直接访问 吃饭的方法 公有的 可以从任何地方访问publicvoiddining System out println 吃饱了 weight dining方法是类内部成员 可以直接访问本类私有成员 走路的方法 公有的 可以从任何地方访问publicvoidwalk System out println 走累了 weight walk方法是类内部成员 可以直接访问本类私有成员 publicclassTest publicstaticvoidmain String args Studentstd newStudent 实例化一个Student对象std age 18 试图从类外部访问私有成员 将会报出一个错误std dining 允许访问公有成员 113 访问权限 续 加上访问修饰符有时候可能会给操作数据带来不便 但可以在很大程度上保证数据的安全 一般地 我们会将成员属性声明为private 而将成员方法声明为public 但这样做并不是绝对的 有时候 类外部可能要操作到某些私有数据成员 那么就可以增加一个公有的方法 再由这个方法来操作私有数据 避免因类外部的误操作而造成的数据损坏 因为main方法要由类外部的虚拟机来调用 所以main方法必须声明成public 114 修改Student类 classStudent 定义学生类privateStringname 姓名 私有privateintage 年龄 私有privatefloatweight 体重 私有publicvoidsetName Stringname 为姓名赋值的方法 公有this name name publicvoidsetAge inta 为年龄赋值的方法 公有age a publicvoidsetWeight floatw 为体重赋值的方法 公有weight w publicvoiddisplay 将所有信息打印出来的方法 公有System out println 姓名 name 年龄 age 体重 weight publicvoiddining 吃饭的方法 公有 代码略publicvoidwalk 走路的方法 公有 代码略 publicclassTest publicstaticvoidmain String args Studentstd newStudent 实例化学生类对象std setName 张三 为姓名赋值std setAge 18 为年龄赋值std setWeight 55 为体重赋值std dining 调用吃饭的方法std display 将信息打印出来 对象初始化 在上例中 只能逐个地为数据成员赋值 如果想在对象实例化的同时就初始化成员属性 就使用到了构造方法 构造方法是特殊的成员方法 它与类同名 在对象实例化时由虚拟机自动调用 请注意 构造方法没有返回值类型 也不能有返回值 116 构造方法示例 定义ConstructorDemo类 对构造方法进行测试 classConstructorDemo 构造方法 方法名与类名完全一致无需指定返回值类型 也不能有返回值 publicConstructorDemo System out println 这是构造方法 Test类 用来容纳main方法一般将包含有main方法的类声明为public publicclassTest main方法 程序入口 publicstaticvoidmain String args 实例化ConstructorDemo类的对象 ConstructorDemocd newConstructorDemo 117 构造方法 正是由于在实例化对象的同时会自动调用构造方法 所以构造方法一般用来给数据成员分配资源或初始化数据成员 构造方法的一般形式 访问权限类名 形参列表 方法体 因为是由虚拟机来调用构造方法 所以构造方法一般应定义成public 118 为Student类添加构造方法 classStudent 定义学生类privateStringname 姓名 私有privateintage 年龄 私有privatefloatweight 体重 私有 构造方法 根据传递进来的参数 为数据成员赋值publicStudent Stringn inta floatw 分别为每个数据成员赋初始值name n age a weight w publicvoidsetName Stringn 为姓名赋值的方法 公有 代码略publicvoidsetAge inta 为年龄赋值的方法 公有 代码略publicvoidsetWeight floatw 为体重赋值的方法 公有 代码略publicvoiddisplay 将所有信息打印出来的方法 公有 代码略publicvoiddining 吃饭的方法 公有 代码略publicvoidwalk 走路的方法 公有 代码略 publicclassTest publicstaticvoidmain String args 利用构造方法 为数据成员指定初始值Studentstd newStudent 张三 18 55 std display 将信息打印出来 119 构造方法 续 每个对象在生成时都必须执行构造方法 而且只能执行一次 如果构造方法调用失败 那么对象也无法创建 不可以显式地直接调用构造方法 在没有定义构造方法的情况下 类会自动产生一个无参数的默认构造方法 这个默认的构造方法什么都不做 一旦显式地定义了构造方法 默认构造方法自动消失 120 总结 对象由状态 属性 和行为 方法 组成 类是具有相同属性和方法的对象的集合 封装可以隐藏对象实现的具体细节 必须先实例化类的对象 才可以访问到其中的成员 成员运算符用于访问对象的成员 成员可以定义为公有 也可以定义为私有 构造方法一般用来初始化对象中的数据成员 如果不定义构造方法 将有默认的构造方法 一旦定义 默认的构造方法自动消失 练习 编写一个包含名为Calculator类的程序 定义两个整型属性以及对该两个变量的setter和getter 编写用于对两个属性执行加 减 乘 除运算方法 在main方法里创建该类的对象并访问这些方法 编写一个名为Box的类 含整型的length width height volume四个属性 要求在构造方法中将其初始化 并定义一个计算体积的calcVolume方法和一个输出体积的print方法 在main方法中进行调用 思考 有三筐水果 一筐装的全是苹果 第二筐装的全是橘子 第三筐是橘子与苹果混在一起 筐上的标签都是骗人的 比如 如果标签写的是橘子 那么可以肯定筐里不会只有橘子 可能还有苹果 你的任务是拿出其中一筐 从里面只拿一只水果 然后正确写出三筐水果的标签 一列时速15英里的火车从洛杉矶出发 驶向纽约 另外一列时速20英里的火车从纽约出发 驶向洛杉矶 如果一只鸟以每小时25英里的速度飞行 在同一时间从洛杉矶出发 在两列火车之间往返飞行 到火车相遇时为止 鸟飞了多远 回顾 对象由属性 数据 和方法 函数 组成 类是具有相同属性和方法的对象的集合 封装可以隐藏对象实现的细节部分 对象是引用数据类型 使用new运算符创建对象实例 使用成员运算符访问对象中的成员 访问修饰符用来控制访问权限 可以有效地保证数据安全 构造方法一般用来初始化对象中的数据成员 相关词汇 类和对象II 方法重载重载构造方法对象在内存中的存放形式this关键字静态成员 static关键字包打包 package关键字导入包 import关键字 类和对象II 方法重载重载构造方法对象在内存中的存放形式this关键字静态成员 static关键字包打包 package关键字导入包 import关键字 提示 在Java中 函数无需C语言中的前向声明 只要直接定义即可 Java中 函数被称为方法 定义一个方法的一般形式 访问权限 返回值类型方法名称 形参列表 方法主体 我们更关注的是方法原型 对于方法原型的三个主要组成部分应当明确区分 返回值类型方法名称形式参数 在Java中定义方法 Java中的方法示例代码片段 定义求平方值的方法 publicintsquare intx return x x 返回值类型 方法名称 形式参数 129 案例 编写求绝对值的方法来求整数的绝对值 AbsoluteValue类 其中包含求绝对值的方法Java中的任何方法都必须在类中定义 publicclassAbsoluteValue 求绝对值的方法 publicintabs intx return x 0 x x main方法 程序入口 publicstaticvoidmain String args 必须先实例化类的对象 才可以调用到其中的成员方法AbsoluteValueobj newAbsoluteValue inta 8 b b obj abs a 调用abs方法求a的绝对值System out println a 的绝对值是 b 方法的定义 方法的调用 130 案例分析 在上面的案例中 我们已经定义了求整数绝对值的方法 但有时候 我们可能还需要求浮点数的绝对值 请问 可以继续使用这个方法吗 事实上是行不通的 这个方法只能求出整数的绝对值 对于浮点数 还需另外再定义求浮点数绝对值的方法 131 修改案例 publicclassAbsoluteValue 求整数绝对值的方法 publicintabsOfInt intx return x 0 x x 求浮点数绝对值的方法 publicfloatabsOfFloat floatx return x 0 x x publicstaticvoidmain String args AbsoluteValueobj newAbsoluteValue inta 8 b b obj absOfInt a System out println a 的绝对值是 b floatc 3 14f d d obj absOfFloat c System out println c 的绝对值是 d 如果还要求其它类型的绝对值 就需要定义更多的方法 这对于调用者来说 将会是非常麻烦的事情 132 方法重载 用于定义一组方法 这些方法具有相同的名称 并执行类似的操作 但是却使用不同的参数列表 编译器会根据调用时传递的实际参数自动判断具体调用的是哪个重载方法 如 abs方法的重载 intabs intx floatabs floatx doubleabs doublex longabs longx 133 方法重载的三大原则 方法名相同参数不同 可以有三方面的不同 数量不同类型不同顺序不同同一作用域温馨提示 方法重载跟方法的返回值类型没有任何关系 也就是说 只有返回值不同的方法不能构成重载 错误的方法重载 voidfun intx intfun intx 134 方法重载示例 publicclassAbsoluteValue publicintabs intx 重载方式1 求整数的绝对值return x 0 x x publicfloatabs floatx 重载方式2 求浮点数的绝对值return x 0 x x publicdoubleabs doublex 重载方式3 求双精度数的绝对值return x 0 x x publiclongabs longx 重载方式4 求长整型数的绝对值return x 0 x x publicstaticvoidmain String args AbsoluteValueobj newAbsoluteValue inta 8 b b obj abs a System out println a 的绝对值是 b floatc 3 14f d d obj abs c System out println c 的绝对值是 d 135 方法重载的两种方式之一 利用不同数据类型的参数重载 对于带有相同数量参数但参数类型不同的重载方法 编译器可以区分它们 如 只要所有参数式样都是唯一的 就可以使用多个重载 很多编程语言已经重载了输出方法 以便您可以用相同的函数名称输出任何类型的数据 intsquare intx floatsquare floatx doublesquare doublex 136 方法重载的两种方式之二 利用不同数量的参数重载 如 将调用与参数最匹配的方法 如果没有方法得出最佳匹配 那么编译器将报错 编译器解决重载的方式与方法定义的顺序无关 重载不考虑方法的返回值类型 函数定义 intfun intn1 intfun intn1 intn2 intn3 函数调用 fun a fun x y z 137 方法重载的作用域规则 只有属于同一作用域范围内的方法才能构成重载 classFirst publicvoidshow classSecond publicvoidshow intx 不构成重载 138 课堂练习1 在Java中 对于成员方法floatadd floatf1 floatf2 下面选项 是对该成员方法的重载 intadd intn1 intn2 floatadd floatf voidadd floatf1 floatf2 voidadd floatf1 floatf2 floatx floatadd floatf2 floatf1 课堂练习2 在Java中 下列方法 不能与intfun intx 构成方法重载 intfun intx inty floatfun intx intfu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论