




已阅读5页,还剩109页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java 科园-颜诗超,自我介绍,架构师、产品经理 东软、Tieto、平安科技 现在创业中(小豹科技),课程整体内容,1. 基础java(面向对象、语法、java基础类库、内存管理) 2课时 2. 高级java(多线程、socket、NIO、编程规范) 2课时 3. java WEB开发 (servlet、spring、spring mvc、mybatis、事务、quartz、前后端验证、poi、maven、jenkins等) 6课时 4. java调优与问题诊断(调试、问题定位、性能调优) 2课时 5. centos和tomcat服务器与高可用等 (java web应用的部署环境centos、tomcat等服务器及高可用环境haproxy、keepalived的使用) 2课时 6. 基于java的架构设计(针对示例项目的架构设计 -基于功能性需求、非功能需求做出适合此项目的架构设计) 2课时,语言基础 面向对象 基础类库 java的内存管理,1 语言基础,1 语言基础,本章是讲述java语言的基础语法。 课程内容: 1.1 Java语言入门 1.2 标识符、关键字和数据类型 1.3 运算符,表达式和语句 1.4 数组 1.5 方法的封装,1.1.1 Java特点,简单 面向对象 与平台无关 健壮性(Java的强类型机制、异常处理、内存的自动收集等),1.1.2 Java程序开发基本过程,Java编程基础 Java的基本语法格式: 所有的java程序都应该写在类中 class 类的修饰符:public和默认修饰符,public class MyFirstJavaApp public static void main(String args) System.out.println(“This is My First Java Application!”); ,1.1.3 Java程序开发基本过程,编译Java程序 Javac MyFirstJavaApp.java 运行Java程序 Java MyFirstJavaApp,1.1.4 Java程序开发基本过程,Java注释 单行注释 / 多行注释 /* */ 文档注释 /* */,1.1.5 开发工具,Eclipse Intellij IDEA,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、Hello World,1.2.2 关键字,注:java 无sizeof ,goto, const 关键字,但不能用goto const作为变量名,1.2.3 数据类型,1.2.4 常量,常量:就是持续不变的值 常量类型: 整型常量: 十进制(12) ,十六进制 (0x12),八进制(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是退格键,相当于Back Space; 是单引号,而“是双引号; 是一个斜杠“”。 字符串常量 : “Hello World“,”123”, “Welcome nXXX“ null常量 : null常量只有一个值,用null表示,表示对象的引用为空,1.2.5 变量,变量概念 变量就是系统为程序分配的一块内存单元,用来存储各种类型的数据。先声明,再使用 变量的元素 变量名,变量值,变量的作用范围 变量定义 int x=0,y; y=x+3; x和y就是变量,1.2.5 变量,变量字节大小及有效取值范围 byte占用一个字节,数字大小为-2727-1 short占用两个字节,数字大小为-215215-1 int占用四个字节,数字大小为-231231-1 long占用八个字节,数字大小为-263263-1 float占用四个字节,数字大小为1.4E-453.4E+38 , -1.4E-45-3.4E+38 。用二进制的指数形式表示一个浮点数的格式,如:101*22 , 101*2-3 double占用八个字节,数字大小为4.9E-3241.7E+308, -4.9E-324-1.7E+308 。 char占两个字节,数字大小为0216-1,是unicode编码。字符的本来面目,我们为什么可以直接将一个数字赋给字符变量。 Boolean占一个字节,有两种取值,true和false。,1.2.5 变量,变量作用域 变量要先定义,后使用,但不是在变量定义后的语句中一直都能使用前面定义的变量。比如:可以用大括号将多个语句包起来形成一个复合语句,则复合语句中定义的变量只能在定义它的复合语句中使用。 局部变量 在方法或方法中的代码块中定义的变量称为局部变量 成员变量 在方法外,在类内部定义的变量,1.2.5 变量,局部变量的定义 在方法或方法中的代码块中定义的变量称为局部变量,局部变量在方法或代码块被执行时创建,在方法或代码块结束时被销毁。 局部变量的初始化 局部变量在进行取值操作前必须被初始化,否则会出现编译错误,1.2.6 类型转换,自动类型转换(也叫隐式类型转换) byte b = 3; int x = b; /b被自动转换为int型 强制类型转换(也叫显式类型转换) byte a; int b; 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。但被模数是负数就另当别论了。 对于除号“/”,它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃小数部分。 int x=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型整数移位ab,系统先将b对32取模,得到的结果才是真正移位的位数。例如:a33和a1结果是一样的,a32的结果还是a原来的数字。 对于long型整数移位时ab ,则是先将移位位数b对64取模。 移位不会改变变量本身的值。如a1;在一行语句中单独存在,毫无意义 。 x1的结果和x/2的结果是一样的,x2和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; a10&b10 表达式的运算顺序 先按照运算符的优先级 优先级相同的,按照约定的结合方向 表达值的值和类型,1.3.3控制语句,条件控制语句 循环控制语句 特殊的循环流程控制,1.3.3控制语句,条件控制语句 If else 语句的语法: If(布尔表达式) 语句或语句块 If(布尔表达式) 语句或语句块 else if(布尔表达式) 语句或语句块 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、short case 1:System.out.println(“Monday”); break; case 2:System.out.println(“Tuesday”); break; case 3:System.out.println(“Wednesday”);break; default:System.out.println(“I dont know”); 思考:无break的情况,1.3.3控制语句,for循环语句 for(初始化表达式;布尔值测试表达式;更改表达式) 语句或语句块; 例:for(int i=0;i=10;i+) System.out.println(“i=”+i); ,1.3.3控制语句,while循环 while(布尔值) 语句或语句块; 注意:while表达式的括号后不能加“;”,否则会 造成不易察觉的无限循环,1.3.3控制语句,do while循环 do 语句或语句块; while(布尔测试) 注意:while表达式的括号后要加“;”,1.3.3控制语句,思考:while循环和do while循环的不同之处 while循环先判断循环条件,再执行循环体 do while循环先执行循环体,再判断循环条件,1.3.3控制语句,break与continue语句 break:终止循环体中的执行语句和switch语句,跳转到当前循环的下一条语句 continue:只能用于while、do while、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声明数组,声明数组:数组类型 数组名 Int aa Int aa,1.4.2创建数组,创建数组: 数组名=new 类型名数组大小 aa = new int10; 数组元素: aa0、aa1、aa2aa9,1.4.3数组初始化,int ia =1,2,3,4; int ia=new int3,4,5; int a5;/声明数组时,不能指定其长度,编译时将出错,1.4.4数组中注意的问题,空指针异常(数组未初始化就使用数组中的元素) 数组越界异常 如何得到数组长度 所有的数组的索引均从0开始,1.4.4数组中注意的问题,不能改变数组大小 可以使用相同的引用变量去引用另一个全新的数组,1.4.5多维数组,多维数组,类似棋盘。 Java 中的多维数组,也就是数组的数组,,1.4.5多维数组,定义多维数组 int xx; xx=new int3; xx0=new int3; xx1=new int2;,1.4.5多维数组,多维数组中元素的引用方式,如:x12。 规则矩阵数组可以在一条语句中产生,如:int xx=new int23; 多维数组的静态初始化 ,如: 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方法的参数传递,class PassRef int x; public static void main(String args) PassRef obj = new PassRef(); obj.x = 5; change(obj); System.out.println(obj.x); public static void change(PassRef obj) obj.x = 3;,小结,1.1 Java语言入门 1.2 标识符、关键字和数据类型 1.3 运算符,表达式和语句 1.4 数组 1.5 方法的封装,2面向对象,面向对象 vs. 面向过程,面向对象(OOP)Object-Oriented Programming 用类class封装数据以及与数据相关的操作 用类的继承性来实现类的重用性 多态性 面向“对象”,由对象提供服务 面向过程(POP)Procedure-Oriented Programming 以功能为组织单元 通过数据结构来描述具体的问题 数据在功能(函数)之间以参数的形式被传送,现实世界中的对象,现实世界是由对象构成的 现实世界中任何实体都可以看作是对象 现实世界中的对象有两个共同特征: 状态 行为,封装(Encapsulation),封装性体现了面向对象程序设计的一个特性,将方法和数据组织在一起,隐藏其具体实现而对外体现出公共的接口 模块化 隐藏信息,继承(Inheritance),广义地说,继承是指能够直接获得已有的性质和特性,而不必重复定义它们。在面向对象的软件技术中,继承是子类自动地共享父类中定义的数据和方法的机制。,单重继承与多重继承,单重继承:一个子类只有一个唯一确定的父类 单重继承所构成的类的关系结构是一棵树 多重继承:一个子类可以有多个不同的父类 多重继承所构成的类的关系结构是一个格 Java语言仅支持单重继承,接口(Interface),接口和类一样也是一种类型,也同样包含一些方法的定义。但与类不同的是:接口中所定义的所有方法都是抽象方法(即没有实现的方法)。 接口中所定义的方法由实现(implement)该接口的类来实现,一个类可以同时实现多个接口 接口机制使Java的面向对象编程变得更加灵活。解决了单重继承带来的问题 接口定义了对象的行为模型,相当于一个协议。实现接口的各个类负责实现接口所定义的行为。虽然实现细节各不相同,但对用户来说是一样的行为。,面向对象的示例,本例中包含很多对象:点、窗口、颜色、点击事件,Spot类,public class Spot /instance variables private int size; public int x, y; /constructor public Spot() x = -1; y = -1; size = 1; /methods for access to the size instance variable public void setSize(int newSize) if (newSize = 0) size = newSize; public int getSize() return size; ,Spot对象实例,private Spot spot = null; . spot = new Spot(); spot.setSite(1);,示例中的继承和接口,public class ClickMe extends JComponent implements MouseListener . ,public class ClickMe extends JComponent implements MouseListener . /Methods required by the MouseListener interface. public void mousePressed(MouseEvent event) if (spot = null) spot = new Spot(); spot.setSize(RADIUS); spot.x = event.getX(); spot.y = event.getY(); repaint(); public void mouseClicked(MouseEvent event) public void mouseReleased(MouseEvent event) public void mouseEntered(MouseEvent event) public void mouseExited(MouseEvent event) ,多态,TestPolymoph/Test.java 多态是指在执行期间(而非编译期)判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。 上面例子中,根据Lady对象的成员变量Pet所引用的不同的实际类型而调用相应的enjoy方法。,class Bird extends Animal private String featherColor; Bird(String n,String f) super(n); this.featherColor = f; public void enjoy() System.out.println(“鸟叫声.“); public class Test public static void main(String args) Bird b = new Bird(“birdname”,”green”); Lady l3 = new Lady(“l3“,b); l3.myPetEnjoy(); ,1.要有继承 2.要有重写 3.父类引用指向子类对象,3 重点类库,为什么java很流行? 丰富的类库是很重要的因素。,java常用的包介绍,java.lang java的核心类基本类,如:String,Integer,System,Runtime等。 java.io 输入输出的类 网络连接相关的类 java.nio jdk1.4后出现的新的io包,更高的效率。 java.util 一些工具类,如数据结构相关的类。 java.lang.reflect 反射相关的类。 java.security 安全相关的类。 更多请参考jdk 文档。,字符和字符串,Java API提供了四个处理字符数据的类: 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类的相关方法: void close() void mark(int readAheadLimit) boolean markSupported() int read() int read(char cbuf) int read(char cbuf, int off, int len) boolean ready() void reset() long skip(long n) Writer类的相关方法: void close() void flush() void write(char cbuf) void write(char cbuf, int off, int len) void write(int c) void write(String str) void write(String str, int off, int len),流的使用(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)自然排序(natural ordering ); (2)实现比较器(Comparator)接口。 取最大和最小的元素:Collections.max()、Collections.min()。 在已排序的List中搜索指定的元素:Collectons.binarySearch()。,LinkedList,LinkedList是采用双向循环链表实现的。 利用LinkedList实现栈(stack)、队列(queue)、双向队列(double-ended queue )。,数据结构,一般将数据结构分为两大类:线性数据结构和非线性数据结构。线性数据结构有线性表、栈、队列、串、数组和文件;非线性数据结构有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东省佛山市顺德区碧桂园学校2024-2025学年八上数学期末达标检测模拟试题含解析
- 河北省广宗县2024年九上数学期末调研试题含解析
- 山东农业大学《大学英语(Ⅲ)-英美文化》2023-2024学年第一学期期末试卷
- 营销培训方案研究与设计
- 云南省红河州弥勒市2024-2025学年物理九上期末达标检测试题含解析
- 黑龙江省哈尔滨阿城区六校联考2025届数学九年级第一学期期末学业水平测试试题含解析
- 江苏省江阴市青阳初级中学2024年九年级物理第一学期期末联考试题含解析
- 河北省部分学校2024年九年级物理第一学期期末调研试题含解析
- 张家口职业技术学院《民俗文化鉴赏》2023-2024学年第一学期期末试卷
- 制作与发布服务合同书
- 《工件的定位与装夹》课件
- 保险客户服务-课件
- 一例肺栓塞的护理个案
- 美世国际职位评估体系IPE3.0使用手册
- CCDCMOS原理介绍讲义
- 社区戒毒满三年的证明范本
- 医保异地备案个人承诺书
- 全国医师定期考核人文医学考试题库附答案
- 《基础工程》(第四版)王晓谋主编 - 删减版
- 送达地址确认书(样本)
- 设备(工装、模具)外出申请单
评论
0/150
提交评论