韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)

上传人:gbs****77 文档编号:10820706 上传时间:2020-04-15 格式:DOC 页数:451 大小:2.87MB
返回 下载 相关 举报
韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)_第1页
第1页 / 共451页
韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)_第2页
第2页 / 共451页
韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)_第3页
第3页 / 共451页
点击查看更多>>
资源描述
韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 1 451 注 笔记中所有示例都能正常通过编译 java 平台 1 J2SE java 开发平台标准版 2 J2EE java 开发平台企业版 java 程序需要在虚拟机上才可以运行 换言之只要有虚拟机的系统都可以运行 java 程序 不同系统上要安装对应的虚拟机才可以运行 java 程序 开发步骤 1 编写源文件 java 2 编译源文件为类文件 class 可用 J2SE 或 J2EE 编译 3 在虚拟机上运行 注释 单行注释 多行注释 java 内容介绍 java 编程可以分成三个方向 1 java se j2se 桌面开发 java 中的基础中的基础 2 java ee j2ee web 开发 3 java me j2me 手机开发 java se 课程介绍 java 面向对象编程 基础 java 图开界面开发 java 数据库编程 java 文件 io 流编程 java 网络编程 java 多线程编程 java ee 基础 1 java 面向对象编程 数据库编程 java se java 基础 2 html css javascript div css java ee 中级部分 Servlet Jsp mvc 模式 java ee 高级部分 Struts Ejb Hibernate Spring Ajax ext dw2 ssh 框架 java 之父 gosling 1990 sun 启动 绿色计划 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 2 451 注 笔记中所有示例都能正常通过编译 1992 创建 oak 语言 java 1994 gosling 参加硅谷大会演示 java 功能 震惊世界 1995 sun 正式发布 java 第一个版本 目前最新是 jdk7 0 java 开发工具 记事本 jcreator jbuilder 退出舞台了 netbean eclipse 如何选择开发工具 先选择记事本 对 java 有一定了解后再使用 eclipse 高级开发工具 为什么呢 1 更深刻的理解 java 技术 培养代码感 2 有利于公司面试 java 语言的特点 1 java 语言是简单的 2 java 语言是面向对象的 3 java 语言是跨平台 操作系统 的 即一次编译 到处运行 4 java 是高性能的 java 第一个程序 hello java 运行 java 程序要安装和配置 jdk jdk 是什么 1 jdk 全称 java dvevlopment kit 中文 java 开发工具包 2 jdk 是 sun 公司开发的 3 jdk 包括 jre java runtime envirnment java 运行环境 一堆 java 工具和 java 基础 的类库 类共 3600 左右 常用类在 150 个左右 4 可以在 下载 开发安装 jdk 用户执行需要安装 jre 配置 JDK 添加环境变量即可 windows 下配置 jdk 在计算机属性 高级设置 环境变量 添加 PATH 将 JDK 所在路径指定即可 多个环境变量 设置时需要用 号进行隔开 1 编写第一个 hello java 注释 解释 作者 功能 在控制台显示 hello 日期 2013 11 28 public 表示这个类是公共的 一个 java 文件中只能有一个 public 类 class 表示这是一个类 hello 类名 公共类的类名必须和文件名一致 public class hello 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 3 451 注 笔记中所有示例都能正常通过编译 一个主函数 相当于是程序的入口 public static void main String args 执行语句 System 是一个包 out println 是输入函数 System out println hello 2 编译 hello java 使用 javac hello java 3 执行 hello java 使用 java hello java 程序运行关系 1 java 源文件 java 文件 2 java 编译器即 javac exe 3 java 字节码文件 class 文件 4 由解释执行器即 java exe 将字节码文件加载到 java 虚拟器 jvm 5 字节码文件 class 就会在 java 虚拟机中执行 对 hello java 程序进行改过使之变为一个简单的加法运算程序 注释 解释 作者 功能 在控制台显示 hello 日期 2013 11 28 public 表示这个类是公共的 一个 java 文件中只能有一个 public 类 class 表示这是一个类 jiafa 类名 公共类的类名必须和文件名一致 public class jiafa 一个主函数 相当于是程序的入口 public static void main String args 执行语句 System 是一个包 out println 是输入函数 System out println hello int a 10 定义一个变量 变量名 a 它的值 10 int b 20 定义一个变量 变量名 b 它的值 20 int result a b 定义一个叫 result 变量将变量 ab 相加的值赋值给 result 输出结果 System out println 结果是 result 为什么有变量 不论是使用哪种高级程序语言编写程序 变量都是其程序的基本组成单位 java 中的基本 数据类型的定义与 c c 中大体一致 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 4 451 注 笔记中所有示例都能正常通过编译 public class Test public static void main String args int a 1 定义一个整形变量 取名 a 并赋初值 1 int b 3 定义一个整形变量 取名 b 并赋初值 3 b 89 给变量 b 赋 89 System out println a 输出语句 把变量 a 的值输出 System out println b 把变量 b 的值输出 java 基本语法 基本数据类型 java 基本数据类型 四大类型 整数类型 小数 浮点 类型 布尔类型 字符类型 整数类型 可以表示一个整数 常用的整数类型有 byte short int long 主要区别是 数据大小范围 请大家看一个小案例 byte 占用内存 一个字节 范围 128 至 127 short 占用内存 两个字节 范围 32768 至 32767 int 占用内存 四个字节 范围 2147483648 至 2147483647 long 占用内存 八个字节 范围 至 小数 浮点 类型 可以表示一个小数 常用的小数 浮点 类型有 float 单精度 double 双精度 float 占用内存 四个字节 范围 3 4E 38 至 3 4E 38 只能提供 7 位有效数字 double 占用内存 八个字节 范围 1 7E 308 至 1 7E 308 可提供 16 位有效数字 布尔类型 可以表示 真 或者 假 类型是 boolean 比如 boolean spBool true 给变量 spBool 定义为 boolean 型并赋值为真 字符类型 可以表示 单个字符 字符类型是 char char 是两个字节 可以存放汉字 多个字符我们称为字符串 在 java 中 String 这种数据类型表示 但是 String 不是基本数 据类型 而是类 类是复合数据类型 结论 在 java 中 对 char 进行运算的时候 直接当做 ascii 码对应的整数对待 思考 int test1 a b 输出值 195 char test2 a b 输出值 char test3 中 输出值 195 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 5 451 注 笔记中所有示例都能正常通过编译 java 基本语法 定义变量 初始化 赋值 定义变量 1 什么是定义变量 int a 这就是定义了一个变量 变量名是 a float haha 这也定义了一个变量 表示一个 float 类型的小数 变量名是 haha 初始化变量 在定义变量的时候 就给值 int a 45 这就是初始化变量 a 给变量赋值 比如你先定义了变量 int tt 然后再给值 tt 780 这就是给变量赋值 java 基本语法 基本数据类型转换 自动转换 int a 1 2 double b 3 结论 数据类型可以自动的从低精度 高精度 高精度不能转为低精度 byte 小于 short 小于 int 小于 long 小于 float 小于大于 3 大于等于 5 b System out println ok2 if a b System out println ok3 请编写一个程序 该程序可以接收两个数 可以是整数 也可是小数 并判断两个数是大于 小于 还是等于 程序代码 import java io 载入 IO 流包 public class Demo5 public static void main String args try 输入流 从键盘接收数 InputStreamReader isr new InputStreamReader System in BufferedReader br new BufferedReader isr 给出提示 System out println 请输入第一个数 从控制台读取一行数据 String a1 br readLine System out println 请输入第二个数 String a2 br readLine 把 String 转为 float float num1 Float parseFloat a1 float num2 Float parseFloat a2 if num1 num2 System out println 第一个大 if num1 num2 System out println 相等 if num18 System out println ok1 b if a b if a b System out println ok3 java 基本语法 三大流程控制 顺序控制 听其名而知其意 让程序可以顺序的执行 请大家看个案例 demo11 java int a 7 System out println a a System out println hello a System out println a a System out println 0 0 a System out println a a 分支控制 让程序有选择的执行 分支控制有三种 1 单分支 2 双分支 3 多分支 a 1 单分支语法 if 条件表达式 语句 2 双分支语法 if 条件表达式 语句 else 语句 3 1 多分支语法 if 条件表达式 语句 else if 条件表达式 语句 else if 条件表达式 语句 else 语句 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 9 451 注 笔记中所有示例都能正常通过编译 3 2 多分支语法 switch 条件表达式 条件表达式数据类型 就和 case 常量表达式一致 否则 就会报错 case 常量 1 语句 1 语句 1 至 break 中相当于 可以加入相应程序代码 break break 表示跳出 switch 语句 case 常量 2 语句 1 break case 常量 n 语句 n break default 语句 break switch 中的可用数据类型主要是 允许 byte short int char enum 等 1 单分支控制作业 请大家看个案例 demo22 java 编写一个程序 可以输入人的年龄 如果该同学的年龄大于 18 岁 则输出 你年龄大于 18 要为自己的行为负责 2 双分支控制作业 请大家看个案例 demo33 java 编写一个程序 可以输入人的年龄 如果该同志的年龄大于 18 岁 则输出 你年龄大于 18 岁 要对自己的行为负责 否则 输出 你的年龄不大这次放过你了 3 多分支控制作业 请大家看个案例 demo44 java 编写一个程序 可以输入人的年龄 如果该同志的年龄大于 18 岁 则输出 你年龄大于 18 要对自己的行业负责 送入监狱 如果该同志的年龄大于 10 岁并且小于等于 18 则 输出 你的年龄也不小了 把你送少管所 其它情况 则输出 小孩子 下次注意 4 多分支控制作业 请大家看个案例 demo55 java 请编写一个程序 该程序可以接收一个字符 比如 a b c d e f g a 表示星期一 b 表示星期二 根据用户的输入显示相应的信息 要求使用 switch 语句完 成 5 多分支控制作业 请大家看个案例 demo66 java 对比 switch 与 if 语句在执行分支语句的区别 switch 分支语句不支持判断类型即 boolean 类型 switch 只支持 byte short int char enum 等数据类型 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 10 451 注 笔记中所有示例都能正常通过编译 循环控制 听其名而知其意 就是让你的代码可以循环的执行 循环控制有三种 1 for 循环 语法 for 循环初值 循环条件 步长 语句 循环体 2 while 循环 语法 while 循环条件 语句 循环体 特别说明 while 循环是先判断在执行语句 3 do while 循环 语法 do 语句 循环体 while 循环条件 特别说明 do while 循环是先执行 再判断 请大家看个案例 demo77 88 99 java 编写一个程序 可以打印 10 句 你好 我是刘德华同志 请大家想想怎么做 1 for 循环 for int a 0 a 10 a System out println 你好 我是刘德华同志 2 while 循环 int i 0 while i 10 System out println 你好 我是刘德华同志 i 3 do while 循环 int i 0 do System out println 你好 我是刘德华同志 i while i打四次 int lay 4 表示有多少层 for int i 1 i lay i 打印 for int j 1 j i j System out print 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 11 451 注 笔记中所有示例都能正常通过编译 System out println 换行 金字塔 Demo101 java public class Demo101 public static void main String args int lay 10 表示有多少层 for int i 1 i3 2 2 3 1 4 0 找出空格 for int k 1 k1 2 3 3 5 4 7 找出星的规律 for int j 1 j i 1 2 1 j System out print System out println 换行 镂空金字塔 Demo102 java public class Demo102 public static void main String args int lay 10 表示有多少层 for int i 1 i3 2 2 3 1 4 0 找出空格 for int k 1 k1 2 3 3 5 4 7 找出星的规律 for int j 1 j i 1 2 1 j 判断该层是否是顶层或者是底层 if i 1 i lay System out print else 如果是第一个 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 12 451 注 笔记中所有示例都能正常通过编译 if j 1 j i 1 2 1 System out print else System out print System out println 换行 空心菱形 Demo103 java public class Demo103 public static void main String args int lay 4 菱形上半部行数 for int i 1 i lay 1 i 判断循环上半部分 for int k 1 k lay i k 找行内 号前输出空格 System out print for int j 1 j i 1 2 1 j 找行内输出星的位置 if j 1 j i 1 2 1 判断行最小长度和最大长度 并在最小长 度和最大长度上输出 号 行内输入出空格 System out print else System out print System out println 换行 for int i 1 i lay i 判断循环菱形下半部分 for int k 1 k i 1 k 判断循环找 号前要输出空格处 System out print for int j 1 j lay i 2 1 j 判断循环行长度 if j 1 j lay i 2 1 判断行最小长度和最大长度 并在最小 长度和最大长度上输出 号 行内输入出空格 System out print else System out print System out println 输出换行 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 13 451 注 笔记中所有示例都能正常通过编译 实心菱形 Demo104 java public class Demo104 public static void main String args int lay 4 菱形上半部行数 for int i 1 i lay 1 i 判断循环上半部分 for int k 1 k lay i k 找行内 号前输出空格 System out print for int j 1 j i 1 2 1 j 找行内输出星的位置 System out print System out println 换行 for int i 1 i lay i 判断循环菱形下半部分 for int k 1 k i 1 k 判断循环找 号前要输出空格处 System out print for int j 1 j猫类 对象 实例 对象 实例 注意 从猫类到对象 目前有几种说法 1 创建一个对象 2 实例化一个对象 3 对类 实例化 以后大家听到这些说法 不要模糊 对象就是实例 实例就是对象 java 最大 的特点就是面向对象 定义猫类 public class Demo105 public static void main String args 创建一个猫对象 Cat cat1 new Cat Cat 是定义的一个数据类型 Cat cat1 cat1 new Cat 等同于 Cat cat1 new Cat 访问属性的 对象名 属性名字 cat1 age 3 cat1 name 小白 cat1 color 白色 创建第二只猫 Cat cat2 new Cat 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 15 451 注 笔记中所有示例都能正常通过编译 cat2 age 100 cat2 name 小花 cat2 color 花色 java 中如何定义一个类 类名的首写字母大写 可根据程序的需要定义类 class Cat 下面的就是类的成员变量 属性 int agr String name String color Master myMaster 引用类型 比如建个主人类 class Master int age String name String address 类和对象的区别和联系 1 类是抽象的 概念的 代表一类事物 比如人类 猫类 2 对象是具体的 实际的 代表一个具体事物 3 类对象的模板 对象是类的一个个体 实例 类 如何定义类 一个全面的类定义比较复杂 如 package 包名 class 类名 extends 父类 implements 接口名 成员变量 构造方法 成员方法 要透彻的掌握类 必须要了解类的构成 class 类名 待定 成员变量 类 类的成员变量 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 16 451 注 笔记中所有示例都能正常通过编译 成员变量是类的一个组成部分 一般是基本数据类型 也可是引用类型 比如我们前面定 义猫类的 int age 就是成员变量 对象 如何创建对象 创建一个对象有两种方法 1 先声明再创建 1 对象声明 类名 对象名 2 对象创建 对象名 new 类名 2 一步到位法 类名 对象名 new 类名 对象 如何访问 使用 对象的成员变量 对象名 变量名 简单先这样理解 以后加下控制符此表达就不准确了 对象总是存在内存中的 一个小思考题 Demo 105 java 为了让大家加深印象 我们定义一个人类 Person 包括名字 年龄 用一步到位法去创 建一个对象 我们看看下面一段代码 System out printlin b age Person a new Person 请问 b age 究竟是多少 a age 10 a name 小明 Person b b a 对象总是存在内存中的 一个小思考题 Demo106 java 在明白对象是如何在内存中存在后 请大家再看看下面的思考题 请问会输出什么信息 Person1 a new Person1 a age 10 a name 小明 Person1 b b a System out println b name 输出 小明 b age 200 System out println a age 输出 a age 为 200 重点也是难点 类 成员方法的初步介绍 在某些情况下 我们要需要定义成员方法 比如人类 除了有一些属性外 成员变量表示的 年龄 姓名 我们人类还有一些行为比如 可以说话 跑步 通过学习 我们人类 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 17 451 注 笔记中所有示例都能正常通过编译 还可以做算术题 这时就要用成员方法才能完成 现在要求对 Person 类完善 1 添加 speak 成员方法 输入出 我是一个好人 2 添加 jisuan 成员方法 可以计算从 1 1000 的结果 3 修改 jisuan 成员方法 该方法可以接收一个数 n 计算从 1 n 的结果 4 添加 add 成员方法 可以计算两个数的和 类 类的成员方法 成员函数 定义 成员方法也叫成员函数 这里希望大家不要被两个名词搞晕了 public 返回数据类型 方法名 参数列表 语句 方法 函数 主体 1 参数列表 表示成员函数输入 2 数据类型 返回类型 表示成员函数输出 3 函数主体 表示为了实现某一功能代码块 类的调用及方法调用 Demo108 java public class Demo108 public static void main String args Person p1 new Person p1 speak 调用 speak 方法 p1 jiSuan 调用计算方法 p1 jiSuan 200 调用可以传入参数的计算方法 p1 add 12 10 调用两个数的和 int res p1 add2 23 34 调用两个数的和并返回值到 res 中 System out println res 返回值是 res System out println num1 num2 num3 p1 add3 2 2 3f 4 5f 返回类型一定要 一致否则报错 定义名字的几个方法 1 驼峰法 如 myCry 2 下划线法 my cry 方法名在有不同参数的情况下可以使用同一个方法名 即有参数和没参数的方法可以同 名 class Person 请注意类名首写字母应为大写如 Person 为类名 int age String name 1 可以输出我是好人方法 public void speak 请注意方法名的首写字母应为小写如 speak 为方法名 System out println 我是一个好人 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 18 451 注 笔记中所有示例都能正常通过编译 2 可以计算 1 1000 的方法 public void jiSuan int result 0 for int i 1 i 1000 i result result i System out println 1 1000 结果是 result 3 带参数的成员方法 可以输入 n 值并计算 1 n public void jiSuan int n int result 0 for int i 1 i n i result i System out println 1 n 结果是 result 4 计算两个数的和 public void add int num1 int num2 int result 0 与下面一句等同于 return num1 num2 result num1 num2 System out println num1 num2 result 5 计算两个数的和 并将结果返回给主调 调用它的 函数 注意 返回类型和返回结果的类型要一致 注意 在调用某个成员方法的时候 给出的具体数值的个数 和类型要相匹配 public int add2 int num1 int num2 return num1 num2 6 计算两个 float 数的和 并将结果返给主调函数 public float add3 int num1 float num2 float num3 return num1 num2 num3 类 类的成员方法 函数 如何理解 如何理解方法这个概念 给大家举个通俗的示例 程序员调用方法 给方法必要的输入 方法返回结果 类的成员方法 声明 public int test int a 方法声明 这句话的作用是声明该方法 声明的格式为 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 19 451 注 笔记中所有示例都能正常通过编译 访问修饰符 数据类型 函数名 参数列表 在给 Person 类添加 add 方法的例题中 我们看到的关键字 return 它的功能是把表达式 的值返回的值返回给主调函数的方法 return 表达式 类的成员方法 函数 特别说明 1 方法的参数列表可以是多个 案例 在 Person 类中编写一个成员方法 从键盘输入三个数 返回最大的那个数 参数列表可以是多个 并且数据类型可以是任意的类型 int float double char 访问修饰符 返回数据类型 函数名 参数列表 语句 函数主体 2 方法可以没有返回值 案例 编写一个函数 从控制台输入一个整数打印出对应的金字塔 返回类型可以是任意的数据类型 int float double char 也可以没有返回值 void 表示 没有返回值 访问修饰符 返回数据类型 函数名 形参列表 语句 函数主体 类的成员方法 函数 小练习 案例 编写一个成员函数 从键盘输入一个整数 1 9 打印出对应的乘法表 Demo110 java 实例键盘输入打印乘法表 Demo110 java import java io public class Demo110 public static void main String args Cfb jiu new Cfb jiu cf class Cfb public void cf try 输入流 从键盘接收数 InputStreamReader isr new InputStreamReader System in BufferedReader br new BufferedReader isr 给出提示 System out println 请输入 1 9 按 0 退出 从控制台读取一行数据 String a1 br readLine 把 String 转为 int 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 20 451 注 笔记中所有示例都能正常通过编译 int num1 Integer decode a1 for int i 1 i num1 i for int j 1 j父 子 孙 3 JDK6 中有 202 个包 3777 个类 接口 异常 枚举 注释和错误 4 在做开发的时候 强烈建议大家多查 jdk 帮助文档 5 在使用类时 实在不知道怎么办 多使用搜索引擎 定义类的改进 在提出包后 我们类的定义就更加完善了 class 类名 class 类名 class 类名 package 包名 成员变量 成员变量 成员变量 class 类名 成员方法 构造方法 成员变量 成员方法 构造方法 成员方法 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 32 451 注 笔记中所有示例都能正常通过编译 package 包名 class 类名 extends 父类 待定 成员变量 构造方法 成员方法 java 面向对象编程 2 方法重载 overload 方法重载 overload 按顺序 我们应该讲解多态 但是在讲解多态前 我们必须讲解方法重载和方法覆盖 override 请编写一个类 Abc 编写方法可以接收两个整数 返回两个数中较大的数 Demo119 java 方法重载 overload getMax public class Demo119 public static void main String args Abc2 abc1 new Abc2 System out println abc1 getMax 12 14 System out println abc1 getMax 24f 20f class Abc2 返回较大的整数 public int getMax int i int j if i j return i else return j public float getMax float a float b if a b return a else return b 如果只是返回类型不一样 能否构成重载 不能够构成重载 public double getMax float d double c if c d return c 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 33 451 注 笔记中所有示例都能正常通过编译 else return d 如果只是控制访问修饰符不同 能否构成重载 不能够构成重载 protected float getMax float c float d if c d return c else return d 方法重载 overload 概念 简单的说 方法重载就是在类的同一种功能的多种实现方式 到底采用哪种方式 取决于 调用者给出的参数 注意事项 1 方法名相同 2 方法的参数类型 个数 顺序至少有一项不同 3 方法返回类型可以不同 只是返回类型不一样 不能构成重载 4 方法的修饰符可以不同 只是控制访问修饰符不同 不能构成重载 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 34 451 注 笔记中所有示例都能正常通过编译 方法覆盖 override 既然子类可以继承父类的属性和方法 这样可以提高代码的复用性 这个很好 可是问题 来了 假设现在我要求大家写三个类猫猫 狗狗 猪猪 我们知道这三个东东都是动物 动物必然存在相同的特点 根据类的抽象特征 我们可以把它们的相同点提取出来 形成 一个父类 然后继承 子类方法覆盖父类方法 Demo120 java public class Demo120 public static void main String args 创建一只猫 Cat cat1 new Cat cat1 cry Dog dog1 new Dog dog1 cry 动物类 class Animal int age String name 都会叫 public void cry System out println 我是动物 不知道怎么叫 猫猫类 class Cat extends Animal 覆盖父类方法 public void cry System out println 猫猫叫 狗狗类 class Dog extends Animal 覆盖父类方法 public void cry System out println 汪汪叫 方法覆盖 override 概念 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 35 451 注 笔记中所有示例都能正常通过编译 简单的说 方法覆盖就是子类有一个方法 和父类的某个方法的名称 返回类型 参数一 样 那么我们就说子类的这个方法覆盖了父类的那个方法 比如上个案例的 Cat 类中的 cry 方法就覆盖了 Animal 类的 cry 方法 注意事项 方法覆盖有很多条件 有些书上说的比较细 总的讲有两点一定注意 1 子类的方法的返回类型 参数 方法名称 要和父类的返回类型 参数 方法名称完全 一样 否则编译出错 2 子类方法不能缩小父类方法的访问权限 作业 上机实习题目 1 Josephu 问题 丢手帕问题 Josephu 问题为 设编号为 1 2 n 的 n 个人围坐一圈 约定编号为 k 1 k n 的人 从 1 开始报数 数到 m 的那个人出列 它的下一位又从 1 开始报数 数到 m 的那个人又出 列 依次类推 直到所有人出列为止 由此产生一个出队编号的序列 提示 用一个不带头结点的循环链表来处理 Josephu 问题 先构成一个有 n 个结点的 单循环链表 然后由 k 结点起从 1 开始计数 计到 m 时 对应结点的人从链表中删除 然 后再从被删除结点的下一个结点又从 1 开始计数 直到最后一个结点从链表中删除算法结 束 Josephu 问题 丢手帕问题 使用单向链表 public class Demo121 public static void main String args CycLink cyclink new CycLink cyclink setLen 5 链表长度 cyclink createLink cyclink setK 2 从第几个人开始数 cyclink setM 2 数几下 cyclink show cyclink play class Child int no Child nextChild null public Child int no 给一个编号 this no no 单向环形链表 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 36 451 注 笔记中所有示例都能正常通过编译 class CycLink 先定义一个指向链表第一个小孩的引用 指向第一个小孩的引用 不能动 Child firstChild null Child temp null int len 0 表示共有多少个小孩 int k 0 int m 0 设置 m 数几下 public void setM int m this m m 设置环形链表大小 public void setLen int len this len len 设置从第几个人开始数数 public void setK int k this k k 开始 play public void play Child temp this firstChild 1 先找到开始数数的人 for int i 1 i k i temp temp nextChild while this len 1 2 数 m 下 for int j 1 j m j temp temp nextChild 找到要出圈的前一个小孩 Child temp2 temp while temp2 nextChild temp temp2 temp2 nextChild 3 将数到 m 的小孩 退出圈 temp2 nextChild temp nextChild 让 temp 指向下一个数数的小孩 temp temp nextChild this len 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 37 451 注 笔记中所有示例都能正常通过编译 最后一个小孩 System out println 最后出圈的小孩 temp no 初始化单向环形链表 public void createLink for int i 1 i len i if i 1 创建第一个小孩 Child ch new Child i this firstChild ch this temp ch else 创建最后一个小孩 if i len Child ch new Child i temp nextChild ch temp ch temp nextChild this firstChild else 继续创建小孩 Child ch new Child i temp nextChild ch temp ch 打印该环形链表 public void show 定义一个跑龙套 Child temp this firstChild do System out print temp no temp temp nextChild while temp this firstChild 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 38 451 注 笔记中所有示例都能正常通过编译 java 面向对象编程 2 四大特征 多态 概念 所谓多态 就是指一个引用 类型 在不同情况下的多种状态 也可以理解成 多态是指通 过指向父类的指针 来调用在不同子类中实现的方法 实现多态有两种方式 1 继承 2 接口 多态演示 Dome122 java 演示继承 方法覆盖 多态 public class Demo122 public static void main String args 非多态演示 Cat cat new Cat cat cry Dog dog new Dog dog cry 多态演示 Animal an new Cat an cry an new Dog an cry 动物类 class Animal String name int age public String getName return name public void setName String name this name name public int getAge return age public void setAge int age this age age 动物会叫 public void cry System out println 不知道怎么叫 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 39 451 注 笔记中所有示例都能正常通过编译 创建 Dog 子类并继承 Animal 父类及覆盖 cry 方法 class Dog extends Animal 狗叫 public void cry System out println 汪汪叫 class Cat extends Animal 猫自己叫 public void cry System out println 猫猫叫 多重多态演示 Dome123 java 演示子类继承父类 方法覆盖 多态方法 public class Demo123 public static void main String args 非多态演示 System out println 非多态演示 Cat cat new Cat cat cry Dog dog new Dog dog cry System out println 多态演示 System out println 多态演示 Animal an new Cat an cry an new Dog an cry System out println 多重多态演示 System out println 多重多态演示 Master master new Master master feed new Dog new Bone master feed new Cat new Fish 主人类 class Master 给动物喂食物 使用多态 只要写一个方法 public void feed Animal an Food f 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 40 451 注 笔记中所有示例都能正常通过编译 an eat f showName 食物父类 class Food String name public void showName System out println 食物 食物鱼子类 class Fish extends Food public void showName System out println 鱼 食物骨头子类 class Bone extends Food public void showName System out println 骨头 动物类 Animal 父类 class Animal String name int age public String getName return name public void setName String name this name name public int getAge return age public void setAge int age this age age 动物会叫 public void cry System out println 不知道怎么叫 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 41 451 注 笔记中所有示例都能正常通过编译 动物吃东西 public void eat System out println 不知道吃什么 创建 Dog 子类并 extends 继承 Animal 父类及覆盖 cry 方法 class Dog extends Animal 狗叫 public void cry System out println 汪汪叫 狗吃东西 public void eat System out println 狗爱吃骨头 class Cat extends Animal 猫自己叫 public void cry System out println 猫猫叫 猫吃东西 public void eat System out println 猫爱吃鱼 多态 注意事项 1 java 允许父类的引用变量引用它的子类的实例 对象 Animal an new Cat 这种转换时自动完成的 2 关于类型转换还有一些具体的细节要求 我们在后面还要提 比如子类能不能转换成父 类 有什么要求等等 java 面向对象编程 3 抽象类 抽象类 解决之道 当父类的一些方法不能确定时 可以用 abstract 关键字来修饰该方法 抽象方法 用 abstract 来修饰该类 抽象类 抽象类的必要性 Demo124 java public class Demo124 public static void main String args Animal an new Animal 抽象类不允许实例化 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 42 451 注 笔记中所有示例都能正常通过编译 Animal an new Cat an cry an new Dog an cry 抽象类 abstract 关键词 abstract class Animal String name int age 动物会叫 使用了 abstract 抽象方法 abstract public void cry 抽象类中可以没有 abstract 抽象方法 抽象类内可以有实现方法 public void sx System out println 实现方法 当一个子类继承的父类是 abstract 抽象类的话 需要程序员把抽象类的抽象方法全部实 现 class Cat extends Animal 实现父类的 cry 其实类似上节学习中的子类覆盖父类 public void cry System out println 猫猫叫 class Dog extends Animal 实现父类的 cry 其实类似上节学习中的子类覆盖父类 public void cry System out println 汪汪叫 抽象类 深入讨论 抽象类是 java 中一个比较重要的类 1 用 abstract 关键字来修饰一个类时 这个类就是抽象类 2 用 abstract 关键字来修饰一个方法时 这个方法就是抽象方法 3 abstract 抽象类中的 abstract 抽象方法是不允许在抽象类中实现的 一旦实现就不是 抽象方法和抽象类了 abstract 抽象方法只能在子类中实现 4 抽象类中可以拥有实现方法 5 抽象方法在编程中用的不是很多 但是在公司笔试时 却是考官比较爱问的知识点 抽象类 注意事项 1 抽象类不能被实例化 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 43 451 注 笔记中所有示例都能正常通过编译 2 抽象类不一定要包含 abstract 方法 也就是说 抽象类可以没有 abstract 抽象方法 3 一旦类包含了 abstract 抽象方法 则这个类必须声明为 abstract 抽象类 4 抽象方法不能有主体 正确的抽象方法例 abstract void abc 错语的抽象方法例 abstract void abc java 面向对象编程 3 接口 接口 为什么有 USB 插槽就是现实中的接口 什么是接口 接口就是给出一些没有内容的方法 封装到一起 到某个类要使用的时候 在根据具体情 况把这些方法写出来 接口的建立语法 interface 接口名 方法 语法 class 类名 implements 接口 方法 变量 小结 接口是更加抽象的抽象的类 抽象类里的方法可以有方法体 接口里的所有方法都 没有方法体 接口体现了程序设计的多态和高内聚低偶合的设计思想 接口 注意事项 1 接口不能被实例化 2 接口中所有的方法都不能有主体 错误语法例 void aaa 注意不能有花括号 接口可以看作更加抽象的抽象类 3 一个类可以实现多个接口 4 接口中可以有变量 但变量不能用 private 和 protected 修饰 a 接口中的变量 本质上都是 static 的而且是 final 类型的 不管你加不加 static 修 饰 b 在 java 开发中 我们经常把常用的变量 定义在接口中 作为全局变量使用 访问形式 接口名 变量名 5 一个接口不能继承其它的类 但是可以继承别的接口 接口的实现 Demo125 java 电脑 相机 u 盘 手机 usb 接口 interface Usb int a 1 加不加 static 都是静态的 不能用 private 和 protected 修饰 声明了两个方法 public void start 接口开始工作 public void stop 接口停止工作 编写了一个相机类 并实现了 usb 接口 韩顺平 Java 从入门到精通视频 全 94 讲详细笔记 44 451 注 笔记中所有示例都能正常通过编译 一个重要的原则 当
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!