资源预览内容
第1页 / 共69页
第2页 / 共69页
第3页 / 共69页
第4页 / 共69页
第5页 / 共69页
第6页 / 共69页
第7页 / 共69页
第8页 / 共69页
第9页 / 共69页
第10页 / 共69页
亲,该文档总共69页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Java语言(一) Java语言基础,2,课程大纲,课程前提:学员需具备基本的Java语法知识。,Java语言的 基本概念,4,Java是什么?,Java编程语言,Java开发平台,Java语法基本概念核心组件,JVMJDK Java SE (标准版)Java EE (企业版)Java ME(微型版),5,Java的前世今生,1992年12月,1995年5月,Oak语言研发成功,Sun Microsystems发布 Java语言,Java始于Sun公司的一个内部项目Oak。 Oak是为避免C+和C语言的缺陷而研制。 开始目标是面向智能电器,后来改为应用于互联网。,因Oak商标已被注册,改名为Java。 Java一般认为是团队成员喜欢的一种咖啡名称。,6,Java的前世今生,1996年,1999年,JDK 1.0发布,发布J2SE、J2EE、J2ME,2004年,J2SE 1.5发布并更名为Java SE 5.0,2011年,Oracle发布Java SE 7.02010年Oracle收购了Sun公司,7,Java的特性,面向对象,分布式,全面支持Internet应用的开发。Java的RMI、序列化机制是开发分布式应用的重要手段。,跨平台,严格规定了各个基本数据类型的长度。Java编译后的字节码格式是与体系结构无关,可以在实现这个Java平台的任何系统中运行。,具备类、接口和继承等原语。全面支持动态绑定,而C+语言只对虚函数使用动态绑定。,解释型,Java程序在Java平台上被编译为字节码格式,然后可以在实现这个Java平台的任何系统中运行。在运行时,Java解释器对这些字节码进行解释,需要的类在联接阶段被载入到运行环境中。,8,Java的特性,多线程,动态加载,需要的类能够动态地被载入到运行环境,也可以通过网络来载入类。Java类有一个运行时刻的表示,能进行运行时刻的类型检查。软件升级很方便。,垃圾回收,垃圾回收机制自动清除不再使用的对象,释放内存空间,避免内存泄露,减轻编程的负担。,Java语言支持多个线程的同时执行,并提供多线程之间的同步机制,多任务程序的开发非常方便。,9,Java的设计目标,简单,健壮,强类型机制、异常处理、垃圾的自动收集。对指针的丢弃、安全检查机制使得Java更具健壮性。,安全,具有许多安全特性,字节代码检查,提供安全管理机制(SecurityManager类),高性能,随着JIT(Just-In-Time)编译器技术的发展,Java的运行速度越来越接近于C+,比其他解释型的高级脚本语言快得多。,语法与C语言和C+语言很接近,无操作符重载、多继承、自动的强制类型转换,没有指针。,可移植,跨平台特性,使用移植非常方便。一次编译,到处运行。适合于异构的网络环境和软件的分发。,10,集成开发环境(IDE),Eclipse,MyEclipse,强大的编辑、调试功能 集成常用组件,支持企业级开发 各有所长,定位不同 Eclipse、MyEclipse使用较为普遍 记住常用快捷键,提高效率,IntelliJ IDEA,NetBeans,免费开源,商业收费,11,类和对象,具有状态、行为、标识 每个对象是类的一个实例 类的具体化,对象,描述 了一组具有相同特性和行为的对象 相当于一种数据类型 抽象的、概念上的定义,类,12,类和对象,public class Shape public void draw() System.out.println(this.getClass().getName() + “ draw.“); public class Circle extends Shape public class Triangle extends Shape ,13,通过引用操作对象,1) public class Test public static void main(String args) Shape s;s = new Circle();s.draw();s = new Triangle();s.draw(); ,输出: Circle draw. Triangle draw.,14,栈,Shape s,堆,Circle,Triangle,对象引用分配在栈Stack上。 简单类型也分配在栈上。,对象实例内存分配在堆Heap上。,之后,Circle对象没有被任何引用指向,将被回收。,内存模型-1,15,2) public class Test public static void main(String args) Shape s1;s1 = new Circle();s1.draw();Shape s2;s2 = new Triangle();s1 = s2;s1.draw(); ,输出: Circle draw. Triangle draw.,16,栈,Shape s1,Shape s2,堆,Circle,Triangle,对引用赋值时,或者传递方法参数时,引用被复制,指向了同一个对象。,之后,Circle对象没有被任何引用指向,将被回收。,内存模型-2,17,3) public class Test public static void change(Shape s2) s2 = new Triangle();public static void main(String args) Shape s1;s1 = new Circle();s1.draw();change(s1);s1.draw(); ,输出: Circle draw. Circle draw.,18,堆,Shape s1,Shape s2,堆,Circle,Triangle,内存模型-3,19,继承与组合,表示同类的东西,具有共同的属性和操作。 父类表示类别,子类表示该类别下的具体东西。 类似于“是”(is-a)关系。 例如,形状:圆形、三角形 需要向上转型时使用继承。,继承,一个类的对象作为另一个类的属性。 类似于“拥有”(has-a)关系。 例如,汽车拥有轮子。 优先考虑用组合,灵活性较好。,组合,20,抽象类与接口,应用场景:只定义了对外的操作接口(你甭管我怎么实现的)。 类不允许多重继承,但可以实现多个接口。接口也可继承接口。,接口,应用场景:我可以定义大部分的功能和实现,只是有小部分信息需要子类告诉我,或者子类才知道具体操作。 只允许单一继承。,抽象类,都具有抽象性,不能被实例化。因为真的不是一个具体的东西。 在框架设计或基于框架的开发中最常使用。,21,资源释放,对象生命期,对象的生命期(活着):对象是否被引用 垃圾回收器只回收完全不再被引用(直接或间接的)的对象。 对于不再需要的对象,不要再引用它们。 finalize()方法并不能确保及时释放资源,甚至永远不会被调用。,22,try /申请资源/处理过程/在处理过程中也可以随时释放不再使用的资源 finally /释放所有资源 ,正确释放资源,finally 语句能确保在有异常的情况下也能释放资源。 注意,在finally 语句里也可能生产新的异常,这时可能需要嵌套catch语句。,23,内存泄漏,静态变量引用的对象。 对象在程序中已不在引用,但被运行环境引用。 例如,会话、数据库连接等。 调用本地方法(Native)、操作系统API所获得的内存、文件句柄等资源不会被自动释放。 例如,读写文件、网络端口等。,容易产生内存泄漏的情形,24,Java语言的 高级特性,25,元素有顺序,可重复,随机访问,容器类,键值对,键不能重复,Map接口,Collection接口,List,Set,Queue,元素不能重复,有顺序,先进先出队列,遍历,Iterator接口,26,Collection接口,27,Collection示例,28,Iterator接口,Iterator对象本身并不具备容纳对象的能力,主要用于遍历(即迭代访问)Collection集合中的元素,因此又称为迭代器。 实现了Iterable的类可以通过foreach进行遍历。,29,Iterator示例,30,Iterator示例,31,foreach示例,32,List 接口,Collection接口的子接口。 有序集合,每个元素都有顺序索引。,33,List 列表,插入移除元素较快 随机访问性能较低 实现了队列和栈,LinkedList,随机访问性能较好 插入移除元素较慢 优先考虑使用,ArrayList,线程安全,性能优化,CopyOnWriteArrayList,线程安全,性能低下,不建议使用,Vector,34,Set 接口,元素值不能相同(hashCode()和equals()) 快速查找(contains()),35,Set 集合,按元素值排序,TreeSet,无排序 优先考虑使用,HashSet,线程安全,性能优化,CopyOnWriteArraySet,按加入顺序排序,LinkedHashSet,36,Map 接口,保存映射关系的数据(键-值对),又称映射或关联数组 键不能相同(hashCode()和equals()),37,Map 映射,按键值排序,TreeMap,无排序 优先考虑使用,HashMap,线程安全,性能优化,ConcurrentHashMap,按加入顺序排序,LinkedHashMap,线程安全,性能低下,不建议使用,Hashtable,38,容器概貌,Collections和Arrays工具类,提供了一些非常有用的功能。例如排序,反转,线程安全化,数组转换等。,39,异常处理,异常随时可能发生 异常的发生总是“正常”的 常见异常:空引用(空指针)、文件读写出错、网络断开 增强容错性和健壮性,保障事务的正常执行,简洁的异常处理机制 C语言的做法:检查函数返回值。副作用:代码繁琐难读。 降低错误处理代码复杂度,自定义异常 特定异常的特殊处理能力,40,41,发现异常可随时抛出,即时中断正常的执行路径。 针对异常类型进行捕获。父类异常可捕获子类异常。 重新抛出或没有匹配的异常,将向作用域外部的上一级try块继续抛出。,42,void do() throws YException try / do somethingthrow new SomeException(msg); catch (XException e1) / handle XException catch (YException e2) / handle YExceptionthrow e2 / continue to do void do() throws XException, YException, / do something / throw new XException(msg); / continue to do ,43,异常处理,异常文本getMessage() 异常代码堆栈getStackTrace(),异常内容,打印标准输出 文件记录 数据库记录 网络传输 回滚事务 不要吞掉异常,异常处理方法,44,异常堆栈,45,反射,getClass() OneClass.class Class.forName() newInstance() 构造器、属性、方法、内部类、注解,Class类,运行时类型信息(Runtime Type Information) 编译时无法预知对象类型,RTTI,46,反射,在运行时动态获得对象的类定义信息,并修改其属性或调用其方法。,什么是反射,在应用框架开发中常用到反射。 远程调用也会用到。,应用场景,Field、Method、Constructor类 getField()、getMethod()、getConstructor()方法 Method.invoke()方法,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号