《JAVA培训一》PPT课件.ppt

上传人:jun****875 文档编号:7553171 上传时间:2020-03-22 格式:PPT 页数:114 大小:2.16MB
返回 下载 相关 举报
《JAVA培训一》PPT课件.ppt_第1页
第1页 / 共114页
《JAVA培训一》PPT课件.ppt_第2页
第2页 / 共114页
《JAVA培训一》PPT课件.ppt_第3页
第3页 / 共114页
点击查看更多>>
资源描述
Java科园 颜诗超 自我介绍 架构师 产品经理东软 Tieto 平安科技现在创业中 小豹科技 课程整体内容 1 基础java 面向对象 语法 java基础类库 内存管理 2课时2 高级java 多线程 socket NIO 编程规范 2课时3 javaWEB开发 servlet spring springmvc mybatis 事务 quartz 前后端验证 poi maven jenkins等 6课时4 java调优与问题诊断 调试 问题定位 性能调优 2课时5 centos和tomcat服务器与高可用等 javaweb应用的部署环境centos tomcat等服务器及高可用环境haproxy keepalived的使用 2课时6 基于java的架构设计 针对示例项目的架构设计 基于功能性需求 非功能需求做出适合此项目的架构设计 2课时 语言基础面向对象基础类库java的内存管理 1语言基础 1语言基础 本章是讲述java语言的基础语法 课程内容 1 1Java语言入门1 2标识符 关键字和数据类型1 3运算符 表达式和语句1 4数组1 5方法的封装 1 1 1Java特点 简单面向对象与平台无关健壮性 Java的强类型机制 异常处理 内存的自动收集等 1 1 2Java程序开发基本过程 Java编程基础Java的基本语法格式 所有的java程序都应该写在类中class 类的修饰符 public和默认修饰符 publicclassMyFirstJavaApp publicstaticvoidmain String args System out println ThisisMyFirstJavaApplication 1 1 3Java程序开发基本过程 编译Java程序JavacMyFirstJavaApp java运行Java程序JavaMyFirstJavaApp 1 1 4Java程序开发基本过程 Java注释单行注释 多行注释 文档注释 1 1 5开发工具 EclipseIntellijIDEA 1 2标识符 关键字和数据类型 1 2 1标识符1 2 2关键字1 2 3数据类型1 2 4常量1 2 5变量1 2 6类型转换 1 2 1标识符 标识符命名规则定义 Java对各种变量 方法和类等要素命名时使用的字符序列称为标识符规则 标识符应以字母 下划线 美元符号开头标识符应以字母 下划线 美元符号或数字组成标识符对大小写敏感 长度无限止合法的标识符 Indentifier username user name userName username非法的标识符 class 98 3 HelloWorld 1 2 2关键字 注 java无sizeof goto const关键字 但不能用gotoconst作为变量名 1 2 3数据类型 1 2 4常量 常量 就是持续不变的值常量类型 整型常量 十进制 12 十六进制 0 x12 八进制 012 长整型常量 13L浮点数常量 1 单精度浮点数5 1f 4f 2e3f 0f 2 双精度浮点数5 1 4 2e 3 0d布尔常量 true和false 1 2 4常量 字符常量 a 8 u0027 r 表示接受键盘输入 相当于按下了回车键 n 是换行 t 是制表符 相当于table键 b 是退格键 相当于BackSpace 是单引号 而 是双引号 是一个斜杠 字符串常量 HelloWorld 123 Welcome nXXX null常量 null常量只有一个值 用null表示 表示对象的引用为空 1 2 5变量 变量概念变量就是系统为程序分配的一块内存单元 用来存储各种类型的数据 先声明 再使用变量的元素变量名 变量值 变量的作用范围变量定义intx 0 y y x 3 x和y就是变量 1 2 5变量 变量字节大小及有效取值范围byte占用一个字节 数字大小为 27 27 1short占用两个字节 数字大小为 215 215 1int占用四个字节 数字大小为 231 231 1long占用八个字节 数字大小为 263 263 1float占用四个字节 数字大小为1 4E 45 3 4E 38 1 4E 45 3 4E 38 用二进制的指数形式表示一个浮点数的格式 如 101 22 101 2 3double占用八个字节 数字大小为4 9E 324 1 7E 308 4 9E 324 1 7E 308 char占两个字节 数字大小为0 216 1 是unicode编码 字符的本来面目 我们为什么可以直接将一个数字赋给字符变量 Boolean占一个字节 有两种取值 true和false 1 2 5变量 变量作用域变量要先定义 后使用 但不是在变量定义后的语句中一直都能使用前面定义的变量 比如 可以用大括号将多个语句包起来形成一个复合语句 则复合语句中定义的变量只能在定义它的复合语句中使用 局部变量在方法或方法中的代码块中定义的变量称为局部变量成员变量在方法外 在类内部定义的变量 1 2 5变量 局部变量的定义在方法或方法中的代码块中定义的变量称为局部变量 局部变量在方法或代码块被执行时创建 在方法或代码块结束时被销毁 局部变量的初始化局部变量在进行取值操作前必须被初始化 否则会出现编译错误 1 2 6类型转换 自动类型转换 也叫隐式类型转换 byteb 3 intx b b被自动转换为int型强制类型转换 也叫显式类型转换 bytea intb a byte b b被强制转换为byte型 1 3运算符 表达式和语句 1 3 1运算符1 3 2表达式1 3 3控制语句 1 3 1运算符 何为运算符运算符是一种特殊符号 用以表示数据的运算 赋值和比较 一般由一至三个字符组成 运算符类型算术运算符赋值运算符比较运算符逻辑运算符位运算符移位运算符 1 3 1运算符 1 3 1运算符 算术运算符的注意问题 除字符串相加功能外 还能把非字符串转换成字符串 如 x 123 的结果是 x123 如果对负数取模 可以把模数负号忽略不记 如 5 2 1 但被模数是负数就另当别论了 对于除号 它的整数除和小数除是有区别的 整数之间做除法时 只保留整数部分而舍弃小数部分 intx 3510 x x 1000 1000 实际运行结果是3000 想想为什么 1 3 1运算符 赋值运算符 1 3 1运算符 赋值运算符注意 注1 在JAVA里可以把赋值语句连在一起 如 x y z 5 在这个语句中 所有三个变量都得到同样的值5 注2 x 3等效于x x 3 等于 依此类推 1 3 1运算符 比较运算符 1 3 1运算符 比较运算符注意 注1 比较运算符的结果都是boolean型 也就是要么是true 要么是false 注2 比较运算符 不能误写成 1 3 1运算符 逻辑运算符 1 3 1运算符 逻辑运算符注意点注1 逻辑运算符用于对boolean型结果的表达式进行运算 运算的结果都是boolean型 注2 和 的区别在于 如果使用前者连接 那么无论任何情况 两边的表达式都会参与计算 如果使用后者连接 当 的左边为false 则将不会计算其右边的表达式 和 的区别与 和 的区别一样 1 3 1运算符 位运算符任何信息在计算机中都是以二进制的形式保存的 除了可以作为逻辑运算符 也可以做为位算符 它们对两个操作数中的每一个二进制位都进行运算 只有参加运算的两位都为1 运算的结果才为1 否则就为0 只有参加运算的两位都为0 运算的结果才为0 否则就为1 只有参加运算的两位不同 运算的结果才为1 否则就为0 1 3 1运算符 移位运算符 右移 无符号右移 1 3 1运算符 移位运算的注意事项及小技巧移位运算符适用类型有byte short char int long对低于int型的操作数将先自动转换为int型再移位 对于int型整数移位a b 系统先将b对32取模 得到的结果才是真正移位的位数 例如 a 33和a 1结果是一样的 a 32的结果还是a原来的数字 对于long型整数移位时a b 则是先将移位位数b对64取模 移位不会改变变量本身的值 如a 1 在一行语句中单独存在 毫无意义 x 1的结果和x 2的结果是一样的 x 2和x 4的结果也是一样的 总之 一个数左移n位 就是等于这个数乘以2的n次方 一个数右移n位 就是等于这个数除以2的n次方 请思考 如何用程序实现求2的x次方 答案 y 1 x 1 3 1运算符 高低 运算符的优先级 1 3 1运算符 编程技巧运算符的优先级顺序不用刻意去记 使用括号控制优先级不但能降低编程的难度 而且能增加程序的可读性 1 3 2表达式 表达式语句 符合一定语法规则的操作数和运算符的序列例 b b 5 a 10 b 10表达式的运算顺序先按照运算符的优先级优先级相同的 按照约定的结合方向表达值的值和类型 1 3 3控制语句 条件控制语句循环控制语句特殊的循环流程控制 1 3 3控制语句 条件控制语句Ifelse语句的语法 If 布尔表达式 语句或语句块 If 布尔表达式 语句或语句块 elseif 布尔表达式 语句或语句块 else 语句或语句块 1 3 3控制语句 switch语句的语法switch 表达式1 case常量1 语句break case常量2 语句break default 语句break 1 3 3控制语句 switch选择语句 switch x x只能为int byte char shortcase1 System out println Monday break case2 System out println Tuesday break case3 System out println Wednesday break default System out println Idon tknow 思考 无break的情况 1 3 3控制语句 for循环语句for 初始化表达式 布尔值测试表达式 更改表达式 语句或语句块 例 for inti 0 i 10 i System out println i i 1 3 3控制语句 while循环while 布尔值 语句或语句块 注意 while表达式的括号后不能加 否则会造成不易察觉的无限循环 1 3 3控制语句 dowhile循环do 语句或语句块 while 布尔测试 注意 while表达式的括号后要加 1 3 3控制语句 思考 while循环和dowhile循环的不同之处while循环先判断循环条件 再执行循环体dowhile循环先执行循环体 再判断循环条件 1 3 3控制语句 break与continue语句break 终止循环体中的执行语句和switch语句 跳转到当前循环的下一条语句continue 只能用于while dowhile for语句中 终止当前这次循环 执行下一次循环 1 3 3控制语句 特殊的循环流程控制break语句do 语句 If 条件为真 break 语句 while 布尔表达式 1 3 3控制语句 特殊的循环流程控制continue语句do 语句 If 条件为真 continue 语句 while 布尔表达式 1 4数组 1 4 1声明数组1 4 2创建数组1 4 3数组初始化1 4 4数组中注意的问题1 4 5多维数组 1 4 1声明数组 声明数组 数组类型数组名Intaa Int aa 1 4 2创建数组 创建数组 数组名 new类型名 数组大小 aa newint 10 数组元素 aa 0 aa 1 aa 2 aa 9 1 4 3数组初始化 intia 1 2 3 4 int ia newint 3 4 5 inta 5 声明数组时 不能指定其长度 编译时将出错 1 4 4数组中注意的问题 空指针异常 数组未初始化就使用数组中的元素 数组越界异常如何得到数组长度所有的数组的索引均从0开始 1 4 4数组中注意的问题 不能改变数组大小可以使用相同的引用变量去引用另一个全新的数组 1 4 5多维数组 多维数组 类似棋盘 Java中的多维数组 也就是数组的数组 1 4 5多维数组 定义多维数组int xx xx newint 3 xx 0 newint 3 xx 1 newint 2 1 4 5多维数组 多维数组中元素的引用方式 如 x 1 2 规则矩阵数组可以在一条语句中产生 如 intxx newint 2 3 多维数组的静态初始化 如 int xx 3 2 7 1 5 6 1 5方法的封装 功能的封装 1 5 1方法的封装格式1 5 2方法调用的过程分析1 5 3方法的调用1 5 4方法的参数传递 1 5 1方法的封装格式 返回值类型函数名 参数类型形式参数1 参数类型形式参数2 程序代码return返回值 形式参数 在方法被调用时用于接收外部传入的数据的变量 参数类型 就是该形式参数的数据类型 返回值 方法在执行完毕后返还给调用它的程序的数据 返回值类型 函数要返回的结果的数据类型 实参 调用函数时实际传给函数形式参数的数据 如何理解函数返回值类型为void的情况 1 5 2方法调用的过程分析 1 5 3方法的参数传递 方法的形式参数相当于方法中定义的局部变量方法的形式参数在方法调用结束时被释放 不会影响到主程序中同名的局部变量 1 5 4方法的参数传递 classPassRef intx publicstaticvoidmain String args PassRefobj newPassRef obj x 5 change obj System out println obj x publicstaticvoidchange PassRefobj obj x 3 小结 1 1Java语言入门1 2标识符 关键字和数据类型1 3运算符 表达式和语句1 4数组1 5方法的封装 2面向对象 面向对象vs 面向过程 面向对象 OOP Object OrientedProgramming用类class封装数据以及与数据相关的操作用类的继承性来实现类的重用性多态性面向 对象 由对象提供服务面向过程 POP Procedure OrientedProgramming以功能为组织单元通过数据结构来描述具体的问题数据在功能 函数 之间以参数的形式被传送 现实世界中的对象 现实世界是由对象构成的现实世界中任何实体都可以看作是对象现实世界中的对象有两个共同特征 状态行为 封装 Encapsulation 封装性体现了面向对象程序设计的一个特性 将方法和数据组织在一起 隐藏其具体实现而对外体现出公共的接口模块化隐藏信息 继承 Inheritance 广义地说 继承是指能够直接获得已有的性质和特性 而不必重复定义它们 在面向对象的软件技术中 继承是子类自动地共享父类中定义的数据和方法的机制 单重继承与多重继承 单重继承 一个子类只有一个唯一确定的父类单重继承所构成的类的关系结构是一棵树多重继承 一个子类可以有多个不同的父类多重继承所构成的类的关系结构是一个格Java语言仅支持单重继承 接口 Interface 接口和类一样也是一种类型 也同样包含一些方法的定义 但与类不同的是 接口中所定义的所有方法都是抽象方法 即没有实现的方法 接口中所定义的方法由实现 implement 该接口的类来实现 一个类可以同时实现多个接口接口机制使Java的面向对象编程变得更加灵活 解决了单重继承带来的问题接口定义了对象的行为模型 相当于一个协议 实现接口的各个类负责实现接口所定义的行为 虽然实现细节各不相同 但对用户来说是一样的行为 面向对象的示例 本例中包含很多对象 点 窗口 颜色 点击事件 Spot类 publicclassSpot instancevariablesprivateintsize publicintx y constructorpublicSpot x 1 y 1 size 1 methodsforaccesstothesizeinstancevariablepublicvoidsetSize intnewSize if newSize 0 size newSize publicintgetSize returnsize Spot对象实例 privateSpotspot null spot newSpot spot setSite 1 示例中的继承和接口 publicclassClickMeextendsJComponentimplementsMouseListener publicclassClickMeextendsJComponentimplementsMouseListener MethodsrequiredbytheMouseListenerinterface publicvoidmousePressed MouseEventevent if spot null spot newSpot spot setSize RADIUS spot x event getX spot y event getY repaint publicvoidmouseClicked MouseEventevent publicvoidmouseReleased MouseEventevent publicvoidmouseEntered MouseEventevent publicvoidmouseExited MouseEventevent 多态 TestPolymoph Test java多态是指在执行期间 而非编译期 判断所引用对象的实际类型 根据其实际的类型调用其相应的方法 上面例子中 根据Lady对象的成员变量Pet所引用的不同的实际类型而调用相应的enjoy方法 classBirdextendsAnimal privateStringfeatherColor Bird Stringn Stringf super n this featherColor f publicvoidenjoy System out println 鸟叫声 publicclassTest publicstaticvoidmain String args Birdb newBird birdname green Ladyl3 newLady l3 b l3 myPetEnjoy 1 要有继承2 要有重写3 父类引用指向子类对象 3重点类库 为什么java很流行 丰富的类库是很重要的因素 java常用的包介绍 java langjava的核心类基本类 如 String Integer System Runtime等 java io输入输出的类网络连接相关的类java niojdk1 4后出现的新的io包 更高的效率 java util一些工具类 如数据结构相关的类 java lang reflect反射相关的类 java security安全相关的类 更多请参考jdk文档 字符和字符串 JavaAPI提供了四个处理字符数据的类 Character 这个类的实例可以容纳单一的字符数值 该类还定义了一些简洁的方法来操作或者检查单一字符数据 String 这个类用于处理由多个字符组成的不可变数据 StringBuffer 这个类用于存储和操作由多个字符组成的可变数据 线程安全 StringBuilder非线程安全的StringBuffer 效率更高 异常类 在Java中 将异常情况分为Exception 异常 和Error 错误 两大类 Error类对象由Java虚拟机生成并抛出 Exception类对象由应用程序处理或抛出 异常类的继承结构 checked异常与unchecked异常 RuntimeException类及其子类被称为 运行时异常 一般发生在JRE内部也称 非必检异常 如NullPointerException其他异常被成为 非运行时异常 一般发生在JRE外部也称 必检异常 如IOException 异常处理的一般步骤 异常抛出异常捕获异常处理 try 抛出异常的代码 catch 某Exception类型e 处理该异常类型的代码 catch 某Exception类型e 处理该异常类型的代码 finally Io包 Reader与Writer类 Reader类的相关方法 voidclose voidmark intreadAheadLimit booleanmarkSupported intread intread char cbuf intread char cbuf intoff intlen booleanready voidreset longskip longn Writer类的相关方法 voidclose voidflush voidwrite char cbuf voidwrite char cbuf intoff intlen voidwrite intc voidwrite Stringstr voidwrite Stringstr intoff intlen 流的使用 1 流的使用 2 流的使用 3 Serializable接口 并非所有对象都是可串行化的 如果要对某对象进行串行化 该对象的类必须实现Serializable接口Serializable接口是一个空接口 也就是说 它不包含任何方法的声明 该接口的作用只是表明这个类的对象可以被串行化 数据结构类 集合框架中的接口 Collection 集合层次中的根接口 JDK没有提供这个接口直接的实现类 Set 不能包含重复的元素 SortedSet是一个按照升序排列元素的Set List 是一个有序的集合 可以包含重复的元素 提供了按索引访问的方式 Map 包含了key value对 Map不能包含重复的key SortedMap是一个按照升序排列key的Map 集合框架中的实现类 SortedSet Set List Map HashSet LinkedHashSet TreeSet ArrayList LinkedList SortedMap HashMap TreeMap ArrayList ArrayList 我们可以将其看作是能够自动增长容量的数组 ArrayList 向ArrayList对象中添加任何对象使用size 方法打印所有对象直接输出一个ArrayList对象自定义类应该重写toString 方法以便输出时被自动调用使用toArray 方法转换为对象数组使用Arrays asList Object o 返回一个列表返回的列表的大小固定 不能添加元素 可以使用set 方法修改节点的元素 否则会抛出不支持的操作异常 UnsupportedOperationException ArrayList 迭代器 Iterator 给我们提供了一种通用的方式来访问集合中的元素 remove 方法是一个可选的操作 实现Iterator接口可以选择实现该方法 或做空实现并抛出不支持的操作异常 UnsupportedOperationException 类库采用这种方式避免产生太多的接口 否则会增加学习的难度 迭代器的工作原理 返回的元素 删除的元素 next remove next Collections类 排序 Collections sort 1 自然排序 naturalordering 2 实现比较器 Comparator 接口 取最大和最小的元素 Collections max Collections min 在已排序的List中搜索指定的元素 Collectons binarySearch LinkedList LinkedList是采用双向循环链表实现的 利用LinkedList实现栈 stack 队列 queue 双向队列 double endedqueue 数据结构 一般将数据结构分为两大类 线性数据结构和非线性数据结构 线性数据结构有线性表 栈 队列 串 数组和文件 非线性数据结构有树和图 栈 栈 Stack 也是一种特殊的线性表 是一种后进先出 LIFO 的结构 栈是限定仅在表尾进行插入和删除运算的线性表 表尾称为栈顶 top 表头称为栈底 bottom 栈的物理存储可以用顺序存储结构 也可以用链式存储结构 a1 a2 an 栈底 栈顶 出栈 进栈 队列 队列 Queue 是限定所有的插入只能在表的一端进行 而所有的删除都在表的另一端进行的线性表 表中允许插入的一端称为队尾 Rear 允许删除的一端称为队头 Front 队列的操作是按先进先出 FIFO 的原则进行的 队列的物理存储可以用顺序存储结构 也可以用链式存储结构 a1a2a3 an 队头 队尾 出队 入队 ArrayList和LinkedList的比较 ArrayList底层采用数组完成 而LinkedList则是以一般的双向链表 double linkedlist 完成 其内每个对象除了数据本身外 还有两个引用 分别指向前一个元素和后一个元素 如果我们经常在List的开始处增加元素 或者在List中进行插入和删除操作 我们应该使用LinkedList 否则的话 使用ArrayList将更加快速 HashSet 实现Set接口的hashtable 哈希表 依靠HashMap来实现的 我们应该为要存放到散列表的各个对象定义hashCode 和equals TreeSet TreeSet是依靠TreeMap来实现的 TreeSet是一个有序集合 TreeSet中元素将按照升序排列 缺省是按照自然顺序进行排列 意味着TreeSet中元素要实现Comparable接口 我们可以在构造TreeSet对象时 传递实现了Comparator接口的比较器对象 HashSet和TreeSet的比较 HashSet是基于Hash算法实现的 其性能通常都优于TreeSet 我们通常都应该使用HashSet 在我们需要排序的功能时 我们才使用TreeSet HashMap HashMap对key进行散列 keySet values entrySet TreeMap TreeMap按照key进行排序 HashMap和TreeMap的比较 和Set类似 HashMap的速度通常都比TreeMap快 只有在需要排序的功能的时候 才使用TreeMap 4java内存管理 如何回收内存 System gc finallize 垃圾回收机制 字符串的内存管理 Stringa aaa Stringb aaa 内存中 aaa 有多少份呢 看看下面的代码 内存使用建议 课后练习 往一个文件中写入100万个随机整数 用逗号分隔 并存储到硬盘中 将这100万个整数进行排序后再写入到另外一个文件中 请大家注意程序的效率 效率
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


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

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


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