一、基础
面向对象
面向对象概念
面向对象(Object Oriented,OO)是软件开发方法
- 对象:万物皆对象,对象可以是具体的事物,也可以是抽象的规则、计划或事件。
- 对象的状态和行为:状态代表数据,行为代表方法。
- 类(数据类型):具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。类的具体化就是对象,对象是类的实例。类具有属性(对象状态的抽象)和操作(对象行为的抽象)
- 类的结构:世界上存在若干类,这些类之间存在关系,通常存在两种主要的结构关系。⒈一般-具体结构(分类结构,"is a"关系)⒉整体-部分结构(组织结构,"has a"关系)
- 消息和方法:对象之间进行通信的结构叫做消息。对象接收到消息,根据消息说明去调用方法(消息应说明执行对象、方法、参数)。方法有方法名、返回值、参数、方法体。
面向对象特征
- 封装:封装对象的属性和行为,并设置访问权限(支持方法重载)
- 继承:继承父类的属性和行为,提供复用性。(单继承,接口多继承;支持方法重写)
- 多态:基于封装、继承(重写)、父引用指向子对象;允许不同的对象对同一消息做出不同反应;编译期绑定(成员变量、静态变量、静态方法)、运行期绑定(成员方法);方法多态(重写,重载)、引用多态(向上造型);
- 抽象:表示对问题领域进行分析、设计中得出的抽象的概念,基于abstract关键字,必须被子类继承重写,无法私有化(private)、静态化(static)、最终化(final)。
JAVA
JAVA体系
- JAVASE(桌面程序)
- JAVAEE(网站服务)
- JAVAME(手机嵌入式)
- JAVACard(Java小程序Applets)
JAVA特点
- 简单性:单继承、自动拆装箱、简化内存管理(引用替代指针,提供自动GC垃圾回收器)...
- 移植性:Java先编译成字节码(中间码),由JVM来进行解释(二进制码)运行。
- 健壮性:强类型机制、异常处理、垃圾的自动收集等机制。
- 多线程:支持多线程
JAVA发展史
- 1991年4月:James Gosling博士领导Gree Project,推出JAVA前身(Oak橡树)
- 1995年5月23日:Oak语言改名为JAVA,并在SunWorld大会上正式发布JAVA 1.0版本,并提出"Write Once, Run AnyWhere"口号。
- 1996年1月23日:JDK 1.0发布,提供纯解释执行的Java虚拟机实现(Sun Classic VM)。代表技术:Java虚拟机、Applet、AWT等...
- 1996年4月:10个最主要的操作系统供应商申明将在其产品中嵌入Java技术。
- 1996年5月底:Sun公司于美国旧金山举行首届JavaOne大会。
- 1996年9月:已有大约8.3万个网页应用了Java技术来制作。
- 1997年2月19日:JDK 1.1发布。代表技术:JAR文件格式、JDBC、JavaBeans、RMI。Java语法:内部类(Inner Class)和反射(Reflection)
- 1998年12月4日:JDK 1.2-Playground(竞技场)发布。Sun在这个版本中将Java体系拆分为3个方向:J2SE(面向桌面开发)、J2EE(面向企业级开发)、J2ME(面向手机移动终端开发);代表技术:EJB、Java Plug-in、Java IDL、Swing等;Java虚拟机:第一次内置JIT(Just In Time)编译器(JDK1.2曾并存Classic VM、HoSpot VM、Exact VM,Exact VM只在Solaris平台出现过;后两者是内置JIT编译器;之前版本Classic VM只能以外挂形式使用JIT编译器);Java语法:添加strictfp关键字;Java API:Collections集合类。
- 1999年3月:JDK 1.2.1发布。
- 1999年4月8日:JDK 1.1 共发布 1.1.0 ~ 1.1.8 九个版本。从1.1.4之后,每个版本都有工程代号:Sparkler、Pumpkin、Abigail、Brutus、Chelsea
- 1999年4月27日:HotSpot虚拟机发布。最初由"Longview Technologies"小公司发布。1997年被Sun公司收购。HotSpot虚拟机发布时是作为JDK1.2的附加程序提供。后来成为JDK 1.3及之后所有版本的Sun JDK的默认虚拟机。
- 1999年7月:JDK 1.2.2发布。
- 2000年5月8日:JDK 1.3-Kestrel(美洲红隼)发布。Java API:数学运算、新的Timer API等;JNDI作为一项平台级服务提供(以前仅是一项扩展);使用CORBA IIOP实现RMI的通信协议;改进JAVA 2D(提供大量新的Java 2D Api,新增JavaSound类库)。
- 2001你那5月17日:JDK 1.3.1-Ladybrid(瓢虫)修正版本发布。自JDK 1.3开始,Sun维持一个习惯:每隔两年发布一个JDK主版本,以动物命名,期间的各个修正版本则以昆虫作为工程名称。
- 2002年2月13日:JDK 1.4-Merlin(灰背隼)发布。技术特性:正则表达式、异常链、NIO、日志类、XML解析器和XSTL转换器等。
- 2002年9月16日:JDk 1.4.1-Grasshopper(蚱蜢)修正版本发布。
- 2002年期间:微软公司发布.NET Framework,无论是技术实现上还是目标用户都与Java有很多相近之处,给Java带来了很多讨论、比较和竞争对Java的发展进程影响很大。
- 2003年6月26日:JDK 1.4.2-Mantis(螳螂)修正版本发布。
- 2004年9月30日:JDK 1.5-Tiger(老虎)发布。语法特性:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环(foreach)等;Java 虚拟机:改进Java的内存模型(Java Memory Model,JMM);Java API:提供java.util.concurrent并发包等。
- 2006年11月13日:JavaOne大会上,Sun公司宣布最终会将Java开源。
- 2006年12月11日:JDK 1.6-Mustang(野马)发布。命名方式:终结J2EE、J2SE、J2ME命名方式,启用Java SE6、Java EE6、Java ME6命名方式;Java API:提供动态语言支持(通过内置Mozilla JavaScript Rhino引擎实现)、提供编译API、微型HTTP服务器API等;Java虚拟机:做了大量改进,包括锁与同步、垃圾收集、类加载等方面的算法。
- 2009年2月19日:JDK 1.7-Dolphin(海豚)发布。主要改进:新的G1收集器(2012年4月的Update4中才正式"转正")、加强非Java语言的调用支持(JSR-292,未完全实现定型)、升级类加载架构等。推迟计划:lambda项目(Lambda表达式、函数式编程)、Jigsaw项目(虚拟机模块化支持)、Coin项目(语言细节进化)。
- 2014年3月18日:JDK 1.8-Spider(蜘蛛)发布。语言特性:Lambda表达式、方法引用、引入defalut关键字、重复注解、扩展注解的支持、Optional、Stream、Date/Time API、JavaScript引擎Nashorn、Base64。
JVM
JVM发展史
- Sun Classic/Exact VM: Classic VM:(第一款商用Java虚拟机;纯解释器,外挂编译器(外挂后解析器便不再工作)),Exact VM(两级即时编译器;编译器与解析器混合工作模式;使用准确式内存管理,可判断内存数据的类型)
- Sun HotSpot VM:由"Longview Technologies"小公司设计,最后被Sun公司收购,具备Exact VM的优点,及热点代码探测技术(通过执行计数器找出最具有编译价值代码,通知JIT编译器以方法为单位进行编译。取代了Exact VM)
- Sun Mobile-Embedded VM/Meta-Circular VM:面向移动和嵌入式市场。KVM(简单、轻量、高度可移植,运行速度较慢,曾广泛应用非智能手机上);CDC/CLDC HotSpot Implementation(Java ME的重要支柱);Squawk VM(Java代码比重很高);JavaInJava(Sun 公司实验室性质虚拟机,试图实现"元循环",内部没有JIT编译器,只以解释模式执行);Maxine VM(与JavaInJava相似,有先进的JIT编译器和垃圾收集器(但没有解释器),执行效率略高)。
- BEA JRockit/IBM J9 VM:除Sun公司以外,其他研发虚拟机的公司中,规模最大、最著名的就是BEA和IBM公司。
- Azul VM/BEA Liquid VM:高性能Java虚拟机
- Apache harmony/Google Android Dalvik VM:"虚拟机",而非"Java 虚拟机"。
- Microsoft JVM及其他:与Sun公司争夺Java的控制权,令Java从跨平台技术变为绑定在Windows上的技术是微软公司的主要目的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。