




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第一阶段视频学习内容 进入 cmd 程序运行进入 F 盘 f 编译文件目录 进入 java 目录 cd 空格 java 目录 存放代码的目录 编译 javac 空格文件名 java 运行 java 空格类名 包 编译 java 空格 d 空格 空格文件名 java 运行 java 空格包名 类名 一 java 起源背景 1 Java 起源 Sun 公司 Sun 公司现在被 oracle 公司收购了 1995 年 5 月 23 日 Java 语言 问世 Java 语言是在 Green 项目团队里 James gosling 的带领下创建的 一开始 java 语言的命名为 Oak 语言 Java 是仿照 C 来编写的 也是用 C 开发的 二 Java 语言的特性 1 跨平台性 2 简单性 这个简单性是 C 对比 3 纯面向对象 4 开放性 三 语言的运行机制 源文件 可执行文件 运行可执行文件 机器指令 Java 源文件 编译 class 字节码文件 解释执行 真正的解释指令 Java 源文件 编译 class 字节码文件 在 JVM java 虚拟机 中解释执行 真正的解释 指令 JVM 虚拟机屏蔽不同操作系统差异 编译的方式运行效率高 解释的方式可以夸平台 2 先编译先编译 后解释后解释 java Java 源文件 class 字节码文件 解释运行 class 文件 平台中立 Java 是先编译后解释 所以运行效率高 且可以夸平台 JVM 解释器 JAE java 运行环境 JDK java 开发工具包 JRE 编译器 工具 类库 四 Java 环境变量 JAVA HOME JDK 安装目录 给其他软件使用 三个环境的作用 PATH 后追加 JAVA HOME bin 安装目录 加安装目录前加个分号 你要运行 exe 软件 它 去找 PATH 下的根目录 想在任何情况下运行 java 就需要把 bin 根目录放在 PATH 下 CLASSPATH 指示编译器和 JVM 到哪儿去找所需要的类 要使配置后的环境变量适用 必须重新打开命令行 cmd 里重新开一行输入命令 你的安 装目录名字 之后输入 javac 名字 java 在运行中学会看错误 名字 java 4 需要 在语句第 4 行前有错误 需要分号 错误前的数字表示有几处错误 查看目录下的文件用 dir 命令 java 编译成功会生成一个 class 文件 而这个文件的名为 java 里编写时取的名字 class 文件 如 class abc public static void main String args System out println liqin 产生一个 abc class 文件 在命令符输入 javac c java c 为你编写程序文件取的名字 java 有 1 个空格后跟 abc abc 为类名为类名 会显示 liqin 编译 javac 有 1 个空格后跟源文件源文件名 一个类编译之后 会对应一个个类编译之后 会对应一个 class 文文件 3 运行 java 有 1 个空格后跟类名 一个源文件里可以有很多的类 类前可以加 public 就称公开类公开类 包外用 谁都可以用 一个源文件中可以定义多个类 一个源文件中只能定义一个公开类 而且公开类的类名必公开类的类名必 须和文件名完全相同须和文件名完全相同 5 第一个程序 1 首先我们写出 HelloWorld 程序的代码 在硬盘上创建一个名为 test java 的文件 并用记 事本打开这个文件 书写如下内容 注意 区分大小写 并注 意空格 class HelloWorld public static void main String args System out println Hello World 2 深入 HelloWorld 首先 第一行 class HelloWorld 这句话定义了一个名字叫做 HelloWorld 的类 其中 class 是 Java 语言的关键字 而 HelloWorld 则是定义的类的 名字 至于什么是类 这个概念对于初学者来说比较复杂 在此不多做介绍 对于初学者来说 可以把类理解成 代码的容器 也就是说 在 Java 中绝大 部分代码都要写在类的范围之内 要写代码就必须先定义一个类 在定义完 了 HelloWorld 之后 后面有一对花括号 花括号中的内容就表示是这个类中 的内容 在这个花括号里 下面的这行 public static void main String args 这一行定义了一个主方法 也叫主函数 在 Java 中 主方法的定 义比较长 但是非常 有用 也许你现在还无法理解这些内容 随着学习的深入 你会理解这里面的每一个单词 但是现在 照着写并且记住主方法的写法就行 了 那么主方法有什么用呢 我们把主方法称之为 程序执行的入口 也就是 说 Java 程序在执行的时候 会执行类中的主方法 当主方法执行完毕之后 程序也就退出了 6 包 4 本节内容介绍包的使用 主要包括 packagepackage 语句语句和 importimport 语句 语句 1 11 1 packagepackage 语句 语句 随着代码的大量增加 程序员写的 java 源文件以及编译产生的 class 字节码文件会大量的增加 如果任由这种情况发生的话 无论是查询还是管理 都会非常的不方便 为了解决这 方面的问题 Java 提供了 包 来帮助我们 组织和管理类 使用 package 语句可以用来将一个特定的类放入包中 要注意的是 如果要使 用 package 语句 则这个语句必须作为 java 文件的第一个语句 并写在任何 类的外面 例如 对我们 之前写的 HelloWorld 类放入 book corejava chp2 包 则代码 如下 package book corejava chp2 public class HelloWorld public static void main String args System out println Hello World 上面的这段代码 就把 HelloWorld 类放在了 book corejava chp2 包下 要 注意的是 在 加包之后 使用 HelloWorld 类时必须加上包名作为前缀 因此 完整的写法应当是 book corejava chp2 HelloWorld 这种在类名前面加上 包名的写法称为类的全限定名全限定名 使用包的主要目的是为了避免类名冲突 包结构必须和硬盘上的文件夹结构一致 2 22 2 importimport 语句语句 前面的 import 语句 就好比是一个声明 这个声明表明 在程序接下来 的代码中 如果 遇到 HelloWorld 类 则指的都是之前引入的 book corejava chp2 HelloWorld 类 这样在后面 我们定义 hello 这个变量 的时候 就省略了冗长的包名 此外 一个 java 文件中可以有多个 import 语句 用于导入多个类 如 果想要一次导入某个包下的所有类 则可以使用 通配符 例如 下面这个语句 5 import java util 表示导入 java util 包内的所有类 也就是说 当我们 用到这个包里面任何一个类的时候 都可以省略包名 特别要提醒的是 上述 语句并不能导入 util 包的子包 也就是说 java util jar java util logging 等包下的类并未导入 由于 import java util 能够导入 java util ArrayList 和 java util HashSet 类 但不能导入 java util 的子包中的类 因此 java util logging Logger 类没有导入 编译器找不到这个类 因 此编译出 错 import 语句表示导入特定的类 在使用 import 语句导入一个类之后 使 用时就能简单的 使用类名 另外 只能用 导入一个包 而不能使用 java 或 java 等语法 试 图导入所有以 java 为前缀的包 最后 java lang 包为标准 Java 库中的最 常用的包 这个包中的类会在所有 java 程序中自 动被导入 也可以理解为 在所有 java 文件中 import java lang 这个语句都不用写 编译 器会自 动导入这个包下的类 类 一个网站里包含很多类 类 class 文件 Java p1 Hello JVM 会根据 Classpath 在当前目录下 找 p1 子目录 并在这个子目录中找 Hello class 运行 java 类名 一个源文件中可以定义多个类 一个源文件中只能定义一个公开类 公开类的类名必须和文件名相同 CLASSPATH 指示编译器和 JVM 到哪去找所需要的类 java p1 Hello JVM 会根据 ClassPath 在当前目录下 找 p1 子目录 并在这个子目录中找 Hello class 6 javac d 编译时 d 表示生成的 class 文件自动的按照包结构去存放 d 空格 空格 Hello java import 引入包 避免重复的写包名 import java lang 系统默认添加的 为通配符 package 0 1 可以使用多个 import 0 n 可以使用多个 class 1 n 可以使用多个 公开类 0 1 只能用一个或不用 cmd 命令 cls 清屏 cd JAVA 打开 JAVA 文件夹 cd 返回上一级目录 cd 返回主目录 dir 查看当前文件夹的所有文件 DEL D aaaaa 删除 aaaaa 下所有文件 而非文件夹 rd s D aaaaa 删除 aaaaa 下的所有空文件夹 注释注释 能够极大的增强代码的可读性 注释指的是一些描述代码的文字 Java 中的注释从语法上来说主要有三种 单 行注释 多行注释和 javadoc 注释 1 单行注释 注释开始 换行结束 2 多行注释 注释开始 注释结束 多行注释里允许单行注释 但是不允许多行 注释嵌套多行注释 3 多行注释 注释开始 注释结束 配合 JavaDoc 工具使用的 JavaDoc 工具 7 可以将你代码里的所有注释单独抽取出来形成一个文档交给用户 只有这样 形式的注 释可以被 JavaDoc 工具抽取出来 javadoc 注释 是 Java 中一种比较特殊的注释 这种注释用来生成 api 文档 程序员在对外发布 Java 代码的时候 还应当 对外公布这些代码的用法 这样 才能让 其他的程序员能够更加方便的利用已 有的代码 在 Java 中 我们往往使用 api 文档 来向其 他程序员介绍代码 的组成和用法 抽取方法 javadoc 空格 d 空格 doc 空格 Hello java 注意 doc 是生成的文件夹 查看 index html 3 3 编码规范编码规范 1 良好的注释 2 良好的标识符命名 3 良好的缩进 标识符 指的是程序员为程序组件起的名字 起名字是一门艺术 这一点对标 识符也一 样 而所有的 Java 程序组件基本分为 5 大类 包 类 变量 函数 常量 首先 我们介绍一下 Java 标识符的 命名规则 一 Java 标识符由字母 数字 下划线 货币符号 组成 其中数字不能 开头 要注意的是 所谓 字母 从技术上说 是一个 unicode 字符 包 括中文字符 换句 话说 Java 标识符能够使用中文 二 Java 标识符区分大小写 也就是说 helloWorld HelloWorld HELLOWORLD 这三个标识符 对于 Java 来说是 完 全不同的三个名字 三 不能与 Java 关键字重名 四 没有长度限制 习惯 习惯 1 望文生义 这指的是说 标识符的名字应当起的有意义 最好能通过名字 让人一眼就能看出标识 符的作用 例如 变量 totalScore 肯定是用来统计总 分 函数 addStudent 肯定是用来增加一 个学生 这样的名字是比较好的名字 它们很容易让人理解这个标识符的意义 从而提高程 序的可读性 二 大小写规范 相比上一条规范 这一条显得非常教条 Java 语言中 对于 不同的程序组件 有着不同 的大小写规范 罗列一下 包名 全小写 例如 book corejava 类名 每个单词首字母大写 例如 HelloWorld 8 变量 函数名 首单词小写 后面每个单词首字母大写 例如 helloWorld 常量名 全大写 单词之间用下划线分隔 例如 HELLO WORLD 缩进缩进指的是在写代码的时候 在某些行的行首 会留出一些空白字符 良好 规范的缩进能够极大的提高代码的清晰程度 让可读性大大增加 数据类型数据类型 变量变量 此外 在 Java 中 变量是强类型的 所谓强类型 指的是每一个变量都 有自身的类型 不同的变量类型 大小不同 所能存放的数据也不同 下面我们就来介绍一下 Java 语言中的变量类型 在 Java 中 所有变量 类型分为两类 一类为基本类型 一类为对象类型 本章主要介绍的是基本类 型 基本类型 英语叫 primitive type 也有人翻译成 原始类型 简 单类型 等等 这类 变量属于编程语言中比较基础的组成部分 因此也被称之 为 基本类型 基本类型总共分为 8 种 分别为 byte short int long float double char boolean 有四种类型都用来表示整数 他们是 byte short int long 他们之间 的区别在于他们 所占的内存空间和表示范围 下表为这四种基本类型的参数 类型名称 所占空间 表示范围 byte 1 个字节 128 127 Short 2 个字节 32768 32767 int 4 个字节 long 8 个字节 可以把这四种基本类型想象成四个大小不同的饭盒 虽然空间不同 但是 所装的数据基 本上是一类的 要注意的是 表示范围小的类型可以直接赋值给 表示范围大的类型 而反之不行 字面值指的是某个类型的合法取值 或者说 可以为该类型的变量赋值的数据 例如 int a 5 在这个代码中 a 就是变量 5 就是字面值 4 2 24 2 2 浮点数类型浮点数类型 在计算机术语中 小数被称为浮点数 在 Java 语言中 浮点数有两种 分别为 float 和 double 两者相关参数如下 类型名称 所占空间 表示范围 float 4 个字节 3 1038 1 4 10 45 double 8 个字节 1 23157 10308 9 4 9 10 324 浮点数类型的符号可以是正的 也可以是负的 强类型 变量类型必须和数据类型一致 定义变量 变量类型 变量名 数据类型 对象类型 有无穷无限种 每一个类都可以成为对象类型 除去 8 种简单类型之外都是对象 类型 简单类型 基本类型 原始类型 8 种 byte short int long foalt double char boolean 1 整数类型 4 种 1 byte 1B 字节 8 位 128 127 自左至右左高右低自左至右左高右低 可以表示 2 8 256 个不同 的数据 2 short 2B 字节 16 位 32768 32767 3 int 4B 字节 32 位 4 long 8B 字节 64 位 2 63 2 63 1 字面值 byte 200 是错误的 short 200 是正 确的 long P 14L 大 L 和小 l 都可以 就是把 14 赋值给 P 5 6 浮点数 小数 float 单精度 4B float f 1 4f 系统默认小数为 double 类型 因此要赋值给 float 型时 后边加小 f 和大 F 都可以但是后边必须加 f double 双精度 8B double d 1 4d 系统默认小数为 double 类型后边加不加 d 都可以 大 D 和小 d 一样 double s 1 4e10 表示 1 4 10 10 7 字符型 char 2B 字节 unicode 编码方式 A 65 u0041 十六进制 char 可以参与 整型运算 A 65 a 97 10 转义字符 t 表示水平跳格 n 表示换行 单引号 双引号 反斜杠 String 字符串 字面值 Hello World 只能参与加法运算 表示字符串连接 单引号引的是字符 A 双引号引的是字符串 abcd 字符相加得到是数 char A 65 char B 66 A B 131 String 字符串相 加得到的是字符串 A B AB ab cd abcd ab 10 ab10 8 boolean 布尔类型 4 字节 字面值 true 真 false 假 判断用 布尔类型在 java 中 不能参与运算 c 语言里能参与运算 true 相当于 1 false 相当于 0 short s 280 byte b byte s 强制转换 将剩下的舍去 280 24 int i short s 自动类型转换 i s 强制类型转换 s short i a b 两个简单类型的数参与运算就会被自动类型提升 如果 a 和 b 里边有一个是 double 的 结果就是 double 如果 a 和 b 里边有一个是 float 的 结果就是 float 如果 a 和 b 里边有 long 的 结果就是 long 上述结果都不满足时 默认结果是默认结果是 int 表达式 变量和字面值用某个运算符连接的式子 一个表达式必须有固定值 4 运算符 运算符 取余也叫模 11 赋值 a 3 不会进行 byte 变化 a a 3 值会进行提升变化 a 3 a a 3 a 等同于 a 1 相当于 a a 1 如果 a 4 a 为 4 先取值在加 1 a 为 5 先加 1 在取值 a 的值都是 5 在布尔运算符 a b 判断 ab 值是否一样 判断真假 相等为真取前边 不等为假取后 边 等于 大于 大于等于 a 1 右移 1 位 相当于整数除以 2 高位需要补 1 位 正数移后是正 负 数移后是负 符号不会丢 a 数学移位 移完后 高位补以前的数 负数还是负数 无符号移位 移完后高位直接补 0 12 a 10110 a 1 01011 前边补 0 a b 3 2 a b 时取 3 a b 为假时 取 2 局部变量 在函数内部定义的变量 1 先赋值 后使用 2 作用范围 从定义开始 到定义它的代码块结束 3 在重合范围内 不允许两个局部变量发生命名冲突 流程控制 顺序执行流程 条件分支流程 条件满足执行 不满足不执行 if if else if else if else switch case switch 表达式 只允许整型表达式 例如 switch i i 的类型只允许 byte short int char case 后只能跟一个数 break 跳出循环语句 子句 default 匹配所有 case 语句不成功后匹配 default 语句 习惯把 default 放在所有 case 之后 swicth 只允许整型表达式 byte short int char 13 循环流程 while 布尔表达式 0 N 次执行 do while 条件 1 N 次执行 至少执行一次 适合用在不确定循环 for 0 N 次执行 定义变量赋值语句 条件语句 布尔表达式 条件不写 默认为真 一 直循环 语句 对循环的自加或减 循环体 适合用在 确定循环 事先知道循环几次 循环图下 break 跳出循环 continue 跳出本次循环 继续下一次循环 双重循环 outer inner 是给 for 循环起名 循环的标号 package chp2 public class jisuan public static void main String args outer for int i 1 i 5 i inner for int j 1 j建立思路 目标代码 面向过程的思想 自顶向下 逐步求精 面向对象的思想 最早的语言 Smalltalk 对象 什么都是对象 一切客观存在的事物 属性 这个对象有什么 方法 这个对象能做什么 对象的属性可能又是一个对象 对象的方法的使用者又是一个对象 客观世界是由对象组成的 1 小对象组成大对象 2 对象间彼此方法调用 解决客观问题 1 把解决问题所需要的对象准备好 2 对象间如何配合 完成需求 计算机需求 来源于 客观世界 17 解决计算机问题 同样可以采用面向对象的思想 计算机中的对象 JVM 中连续的存储空间 数据 代表生活中的对象 生活中的对象在计算机中的抽象 各司其职 对象应该保持简单性 弱耦合性 对象和对象之间的联系应该尽量弱化 可重用性 可扩展性 类 1 对象共性的抽象 2 客观对象在人脑中的主观反映 类是人对对象的认识 3 类是对象的模版 如何编写一个类 属性 实例变量 static 是静态的意思 1 有默认值 数值类型 0 布尔类型 false 对象类型 null 2 作用范围 至少是全类内部 3 可以和局部变量发生冲突 冲突的时候局部变量优先 18 方法 方法的声明 对象能做什么 修饰符 返回至类型 方法名 参数表 抛出的异常 方法的实现 对象怎么做 方法的重载 允许定义多个同名的方法 参数表不同 1 参数个数不同 2 参数类型不同 3 参数类型排列不同 形参名不同不算重载 由编译器在程序编译的时候 根据实参的类型选择一个合适的方法调用 方法的重载还可以 叫做编译时多态 向上就近匹配原则 类型相近 避免混淆 重载的作用 让一个对象的同类方法 由于参数表的不同造成的差异 对用户屏蔽 构造方法 1 没有返回值类型 2 方法名必须和类名相同 3 不允许手工调用 在对象构造过程中自动调用 1 次 如果一个类没有定义任何构造方法 系统会默认添加一个公开无参的构造方法 对象的创建过程 19 1 分配空间 所有的实例变量被赋予了默认值 2 初始化属性 所有的实例变量被赋予初始值 3 调用构造方法 实例变量常常被第三次赋值 构造方法经常用来为属性赋值 变量按照类型划分 简单变量 存值 对象变量 引用 存对象的地址 Java 中参数的传递规则 简单类型的参数 传值 对象类型的参数 传地址 传引用 实参和形参指向同一个对象 this 1 引用 当前对象 当实例变量和局部变量命名冲突的时候 用 this 表示实例变量 2 用在构造方法中 this 调用本类的其他构造方法 必须是构造方法中的第一个语句 封装 对象的边界对对象的内部起到保护的作用 数据隐藏 public 公开的 不受边界约束 20 private 私有的 只能在本类内部访问 无法突破边界 属性私有 提供公开的 setXXX getXXX 用来访问属性 方法私有 只给自己调用 方法公开 声明的公开 实现的隐藏 实现的改变对架构的影响最小 继承 父类 子类 一般 特殊 父类 子类的共性抽象出来 所有子类能够访问的父类属性和方法 即是子类从父类中继承到的属性和方法 从严到宽的顺序 private 私有的 本类内部使用 无法继承 default 本类内部 同包 同包子类可以继承 protected 受保护的 本类 同包 不同包的子类 public 公开的 可以继承 构造方法不能继承 方法的覆盖 子类用特殊的方法实现替换掉父类继承给它的一般的方法实现 返回值类型 方法名 参数表相同 访问修饰符相同或更宽泛 21 对象的构造过程 1 分配空间 本类 父类 一并分配 2 递归的构造父类对象 2 4 3 初始化本类属性 4 调用本类的构造方法 A B C 创建 C 对象 递归的构造父类对象 分配空间 初始化 A 的属性 调用 A 的构造方法 初始化 B 属性 调用 B 的构造方法 初始化 C 的属性 调用 C 的构造方法 super 关键字 1 引用 父类对象 访问父类被遮盖的属性或者调用父类被覆盖的方法 2 用在构造方法中 指定调用父类的构造方法中 必须是构造方法的第一句 如果一个构造方法的第一句话 不是 this 也不是 super 系统会默认添加 super super 常常用来把构造参数传给父类 去设置父类的属性 22 Java 中的单继承 一个类最多只能有一个直接父类 简单 类之间会形成简单的树状结构 子类的对象可以看作是父类的对象 1 对象类型不变 2 只能对引用调用其引用类型中声明的方法 3 运行时 根据对象实际类型找子类覆盖之后的方法 子类引用赋值给父类引用 可以直接赋值 父类引用赋值给子类引用 必须强制类型转换 保证编译通过 运行时可能发生类型转换异常 在强制类型转换之前 可以用 instanceof 判断 避免类型转换异常 多态的作用 将不同的子类对象统一看作父类对象 屏蔽了不同子类的差异 多态的常见用法 1 多态用在方法参数上 形参可以是父类引用 实参可以传子类对象 m A a 可以用 A 的任何子类对象作为参数 Animal a new Dog 23 2 多态用在方法的返回值上 A m m 方法完全可以返回 A 的某个子类对象 private 可以修饰 属性 方法 构造方法 default 可以修饰 属性 方法 构造方法 类 protected 可以修饰 属性 方法 构造方法 public 可以修饰 属性 方法 构造方法 类 static 静态的 1 属性 类变量 全类公有 允许直接用类名访问 类加载 当 JVM 第一次使用一个类时 需要通过 ClassPath 找到这个类对应的 class 文件 把这个文件中包含的类的信息读入 JVM 并保存起来 一般的说 一个类只会加载一次 类变量是在类加载的时候分配空间 并且初始化 类加载的时机 1 创建类的对象 2 访问类的静态成员 3 加载子类必须先加载父类 4 如果仅仅是声明引用 不会类加载 2 方法 静态方法 允许直接用类名调用 在静态方法中 只能访问类的静态成员 24 静态方法可以被子类的静态方法覆盖 而且没有多态 3 初始化代码块 静态初始代码块中的代码 在类加载的时候执行一次 final 1 变量 常量 一旦赋值 不能改变 对于 final 属性 系统不会提供默认值 如果 final 实例变量 可以在初始化属性或是构造方法中赋值 如果 final 类变量 可以在初始化属性或是静态初始代码块中赋值 2 方法 该方法不能被子 类覆盖 3 类 该类不能被子类继承 abstract 抽象的 1 类 抽象类只能声明引用 不能创建对象 2 方法 抽象方法 只有声明 没有实现 如果一个类中有抽象方法 这个类就必须是抽象类 但是抽象类中未必有抽象方法 抽象类中可以有构造方法 子类继承抽象类 如果子类不希望也成为抽象类 就必须实现父类中声明的所有抽象方法 利用 abstract 可以把方法声明抽象到父类中 而方法实现留在子类 更好的体现 共性 放在父类 原则 修饰符组合 25 private static final 均不能和 abstract 联用 Chp9 接口 特殊的抽象类 1 所有的属性都是公开静态常量 2 所有的方法都是公开抽象方法 3 没有构造方法 如果有一个抽象类 其所有属性都是公开静态常量 所有方法都是公开抽 象方法 例如 下面代码所示 abstract class MyAbstractClass public static final int VALUE1 100 属性是公开静态常量 public static final int VALUE2 200 第二个属性 public abstract void m1 方法是公开抽象方法 public abstract void m2 int n 第二个方法 上面的 MyAbstractClass 类 具有的两个属性 VALUE1 和 VALUE2 都是 公开静态常量 具 有的两个方法 m1 和 m2 都是公开抽象方法 由于 MyAbstractClass 是抽象类 因此无法创建对象 只能够声明引用 如果要创建对 象的话 必须要写一个类继承 MyAbstractClass 类 并且实现 这个类中的 m1 和 m2 方法 例 如下面的代码 class MySubClass extends MyAbstractClass public void m1 public void m2 int n 要注意的是 方法覆盖要求 子类的访问修饰符相同或更宽 由于 MyAbstarctClass 类 中的 m1 方法和 m2 方法都是 public 的 MySubClass 中的 m1 和 m2 方法的访问修饰符也必 须是 public 的 使用关键字 interface 来定义接口 把 MyAbstractClass 改写成接口 26 结果如下 既然接口中所有属性都是公开静态常量 则接口中的属性 可以省略 public static final 关键字 同样的 由于接口中所有方法都是公开抽象方 法 因此可以省略 public abstract 关 键字 interface MyInterface int VALUE1 100 int VALUE2 200 void m1 void m2 int n 注意 interface 替代了 abstract class 这两个关键字 interface 关键字和 class 关键字类似 一个接口编译后会生成一个 class 文件 一个 java 文件中可以有多个接口 但是最多只能有一个公开的接口 且公开接口的 接口名与文件名相同 要注意的是 要注意的是 1 一个类实现接口 如果不希望这个类作为抽象类 则应 该实现接口中定义的所有方 法 2 接口中所有的方法都是公开方法 因此 在实现接口中的方法时 实 现类的方法也 必须写成公开的 由于类中的方法 默认访问修饰符是 default 因此 在实现接 口中的方法时 修饰符 public 不能省略 从语法上说 接口很类似 特殊的抽象类 只不过在接口语法中增加了两个 关键字 interface 和 implements 而已 一个类去实现接口 如果这个类不希望也称为抽象类 就必须实现接口中所有方法 接口之间可以多继承 不同于 Java 中对于类之间的单继承的要求 接口之间 没 有这个限制 一个接口可以继承多个接口 一个类在继承另外一个类的同时 还可以实现多个接口 利用接口实现多继承 不会破坏类之间树状关系的简单性 解耦合的工具 标准 把标准的使用者和标准的实现着分离 27 接口的回调 在定义接口之后 先有接口的使用者 后有接口的额实现者 使用者通过接口调用实现者 中的方法 内部类 类中定义类 成员内部类 1 可以访问外部类的私有成员 2 创建成员内部类对象 必须先创建外部类对象 再通过外部类对象 new 构造内部 类对象 3 成员内部类中不能有静态成员 4 外部类类名 this 指向外部类的当前对象 静态内部类 1 静态内部类只能访问外部类的静态成员 2 创建静态内部类对象 不需要先创建外部类对象 局部内部类 1 使用范围等同于局部变量 2 不仅可以访问外部类的私有成员 还可以访问外部类的局部变量 但是必须被声明 为 final 匿名内部类 1 特殊的局部内部类 2 继承一个类或者实现一个接口 3 只会创建该类的一个对象 匿名内部类无法定义构造方法 28 1 内部类可以访问外部类的私有成员 而不破坏封装 2 接口公开 接口的实现类作为内部类隐藏起来 强制弱耦合 Object 类 Java 中所有类的父类 类继承关系树的树根 1 Object o o 中可以装任何对象 2 Object 类中的方法 是所有对象都具有的方法 1 finalize 由垃圾收集器在回收垃圾对象时 最后调用 a 垃圾回收器如何认定垃圾对象 零引用算法 b 垃圾回收器何时释放垃圾对象 必须释放的时候 2 getClass 返回对象的实际类型 3 toString 返回对象的 String 形式 打印一个对象就是打印这个对象的 toString 方法的返 回值 4 boolean equals Object o 判断 this 和 o 内容是否相同 包装类 1 为 8 中简单类型提供对象形式 让 Object 统一所有数据 2 对于数值类型的属性 区分 0 和 null 包装类 简单类型 String 之间的转换 JDK5 0 自动封箱 由编译器自动完成简单类型和包装之间的转换 29 集合框架 集合部分多做题 集合 容器 一个对象 用来存储其它多个对象 接口的特点 接口中的方法 遍历 实现类 Collection 特点 元素是 Object 对象 主要的方法 add Object o 把对象 o 放入集合 addAll Collection c 把 c 中的所有对象放入集合 clear 清空集合 contains Object o 判断对象 o 在集合中是否存在 isEmpty 判断集合是否为空 remove Object o 把对象 o 从集合中删去 size 返回集合中对象的个数 遍历 实现类 Collection 没有直接实现类 30 List 特点 元素有顺序 下标 可以重复 方法 add int pos Object o 把对象 o 插入到 pos 位置 get int pos 返回 pos 位置的元素 indexOf Object o 返回对象 o 在数组中的下标 remove int pos 删除 pos 位置的元素 set int pos Object o 把 pos 位置的元素替换为 o 遍历 1 for 下标遍历 2 迭代遍历 实现类 1 ArrayList 用数组实现 List 查询快 增删慢 1 2 版本 轻量级 线程不安全 2 Vector 用数组实现 1 0 版本 重量级 线程安全 3 LinkedList 用链表实现 查询慢 增删快 迭代遍历 获得迭代器 Iteraotr it set iterator 判断右面是否还有元素 while it hasNext 指针跳到下一格继续查询 31 Object o it next System out println o Set 特点 元素无顺序 内容不可重复 方法 全部继承自 Collection 接口 遍历 迭代遍历 实现类 HashSet 把自定义对象放入 HashSet 为保证元素不重复 必须 1 覆盖 hashCode 保证相同对象返回相同的 int 为了提高效率 尽量保证不同对象返回不同的 int 2 覆盖 equals 保证相同对象返回 true TreeSet 实现了 SortedSet Set 的子接口 对元素自动排序 要求元素对象必须实现 Comparable 接口 Map 特点 元素由键值对组成 其中键 唯一 值 可以重复 方法 put Object k Object v 把 k v 这个键值对放入 Map 如果 k 已经存在 那么新的 v 会替换旧的 v get Object k 返回 Map 中 k 对应的 v remove Object k 删除以 k 为键的键值对 size 返回键值对的数量 32 containsKey Object k 判断 k 这个键是否存在 containsValue Object v 判断 v 这个值是否存在 遍历 1 值遍历 values 返回 Map 中所有值的集合 Collection 2 键遍历 keySet 返回 Map 中所有键值对的集合 键值对 Map Entry 对象 封装了一个 key 和一个 value 实现类 1 hashMap 1 2 允许用 null 作为 key 或者 value 2 hashtable 1 0 不允许 null 作为 key 或者 value 3 Properties Hashtable 的子类 key 和 value 都是 String 一般用于配置文件的读取 4 TreeMap 实现了 SortedMap Map 的子接口 自动对 key 排序 JDK 5 0 泛型 模版编程 不同泛型之间不能相互赋值 泛型的通配符 就是通配符 表示任何类型 extends Number 表示 Number 类或 Number 的任何子类 super Number Number 类或 Number 的任何父类 extends Comparable 任何实现 Comparable 接口的类 泛型的方法 33 T 既是 Number 的子类 又实现 Comparable 接口 泛型类 泛型技术应用在集合框架中 实现类型安全的集合 泛型 约定集合中的元素类型 1 自动封箱 2 for each 3 静态引入 用到一个类中静态成员时 可以省略类名 4 可变长参数 其实就是系统帮你封装一个数组 由编译器负责将多个实参封装成数组 一个方法中 最多只能有一个可变长参数 且必须是参数表中最后一个参数 5 格式化的输入输出 枚举 enum 类 这个类的对象是构造好的 不允许用户构造该类的新对象 特殊的类 默认是 Enum 的子类 所有构造方法必须是私有的 枚举值 枚举类的对象 也是枚举类中的公开静态常量 枚举中可以定义抽象方法 由枚举值分别实现 34 异常处理 提高程序的 容错性 当异常发生时 运行某一部分代码 来减少异常的损失 避免异常 VS 处理异常 异常的分类 Throwable 父类 有两个子类 Error Exception Error 错误 严重的底层错误 无法处理 例 虚拟机崩溃 Exception 异常 可以处理 RuntimeException 的子类 叫未检查异常 可以避免 可处理可不处理 非 RuntimeException 的子类 叫已检查异常 不可避免 必须处理 如果一个程序可能发生已检查异常 而程序员未加处理 程序的编译出错 异常对象的产生 throw 动作 抛出一个异常 将异常对象作为方法的返回值返回 等同于 return 语句 异常对象的传递 相当于返回值的返回 沿着方法调用链反向传递 直至 JVM 最终导致程序中止 异常的处理 1 throws 声明抛出 消极的处理方式 用在方法的声明中 2 try catch 捕获异常 积极的处理方式 try catch finally 35 finally 无论有没有异常 都会执行 主要用于释放资源 try finally try 插卡 输入密码 输入金额 2000 余额 2000 吐钱 2000 catch 吐钱异常 e 吐钱失败时 余额 2000 finally 退卡 自定义异常 方法的覆盖 访问修饰符相同或更宽泛 方法名 参数表 返回值类型相同 子类不能比父类抛出更多的异常 不是数个数 而是看范围 36 多线程 进程 OS 操作系统 中并发的一个任务 CPU 分时间片 宏观并行 微观串行 线程 在一个进程中 并发的一个顺序执行流程 线程的组成 1 CPU 由 OS 负责分配 2 Data 堆空间共享 栈空间独立 进程间 堆和栈都是独立的 堆空间 存储对象 存储实例变量 栈空间 存储局部变量 3 Code 代码 由程序员指定 继承 Thread 类或者实现 Runnable 接口 一个 Thread 对象代表一个线程 t1 t2 join 表示 t1 对 t2 调用篆方法 t1 阻塞 当 t2 进入终止状态时 t1 回到可运行状态 线程的同步 当多线程并发访问临界资源 同一个对象 时 如果破坏了原子操作 不可分割的操作 就会造成数据不一致 37 zynchronized o 对 o 加锁的同步代码块 任何对象都有一个互斥锁标记 用来分配给线程 只有拿到对象锁标记的线程 才能进入对该对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业废水处理与环保技术创新
- 工业旅游的兴起与发展机遇
- 工业安全管理与职业病防治
- 工业建筑改造与再生策略
- 工业自动化中实时机器视觉系统的研究
- 工业设备中的热传导与热设计
- 工业生产中的火灾风险评估
- 工业自动化与智能制造的结合点
- 工业设计中的材料与工艺选择研究
- 工业自动化与生产监控系统
- 《企业内部控制问题研究-以康美药业公司为例》9000字(论文)
- 北京市通州区2023-2024学年八年级下学期期末考试物理试题【含答案、解析】
- 一年级下册语文课件统编版-11 浪花【新课标版】
- 区域国别研究的跨学科性
- 园艺论文开题报告范文
- 儿科学知到智慧树章节测试课后答案2024年秋山东第一医科大学
- 林业工程开工申请
- 2025年甘肃省中考语文作文预测题及范文
- 高等教育信息化建设方案
- GB/T 44757-2024钛及钛合金阳极氧化膜
- 《BOM培训资料》课件
评论
0/150
提交评论