javascript中如何判断一个函数是否是异步函数
詹姆斯·高斯林(James gosling)等人在太阳微系统公司(Sun Microsystems)工作,在1990年代早期开发了Java语言的原型,最初命名为Oak,针对家用电器等小型系统的编程语言,并将其应用于电视、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能家电的市场需求并没有预期的那么高,孙公司放弃了这个计划。随着1990年代互联网的发展,Sun公司看到了Oak在互联网上的应用前景,于是对Oak进行了改造,并于1995年5月以Java的名义正式发布。随着互联网的快速发展,Java逐渐成为一种重要的网络编程语言。
Java编程语言的风格和C++非常接近。Java继承了C++语言中面向对象技术的核心,抛弃了C++语言中容易导致错误的指针,代之以引用。同时去掉了原来的C++和原来的运算符重载,还去掉了多重继承特性,换成了一个接口,增加了垃圾收集器的功能。在Java SE 1.5中,引入了泛型编程、类型安全枚举、变长参数和自动解包。Sun Microsystems对Java语言的解释是:“Java编程语言是一种简单的、面向对象的、分布式的、解释性的、健壮的、安全的和系统无关的、可移植的、高性能的、多线程的和动态的语言。”
Java不同于一般的编译语言或直译语言。它首先将源代码编译成字节码,然后依靠不同平台上的虚拟机来解释和执行字节码,从而实现了“一次编写,随处运行”的跨平台特性。在早期的JVM中,这在一定程度上降低了Java程序的运行效率。但是J2SE1.4.2发布后,Java的运行速度有了很大的提升。
与传统类型不同的是,Sun公司在引入Java时就把它作为一种开放的技术。全球数以万计的Java开发公司被要求设计必须相互兼容的Java软件。“Java语言靠的是团体的力量,而不是公司的力量”是孙的口号之一,并得到了广大软件开发人员的认可。这与微软倡导的精英导向、封闭模式完全不同。此外,微软后来推出了一款与之竞争的。NET平台和一个模仿Java的C#语言。后来孙公司被甲骨文公司收购,Java成为甲骨文公司的产品。
目前手机操作系统Android的大部分代码都是用Java编程语言编写的。
早期Java
詹姆斯·高斯林,Java的发明者
杜克,Java语言的吉祥物
起初,该语言只是太阳微系统公司在1990和65438+2月开始研究的内部项目。太阳计算机公司的工程师帕特里克·诺顿(Patrick Norton)被太阳计算机公司开发的C++和C语言编译器弄得不知所措,因为其中的API极难使用。帕特里克决定转投NeXT,同时获得了研究该公司一个名为“隐形项目”的项目的机会。
隐身项目后来被更名为绿色项目,詹姆斯·高斯林和迈克·谢里丹加入了帕特里克的工作小组。他们和其他几名工程师一起,正在加州门洛帕克市沙丘路的一个小工作室里研究和开发新技术,目标是下一代智能家电(如微波炉)的编程。孙预计,未来技术将在家电领域发挥巨大作用。该团队最初考虑使用C++语言,但包括Sun首席科学家Bill Joy在内的许多成员发现,C++和可用的API在某些方面存在很大问题。
工作组使用嵌入式系统,其可用资源极其有限。很多会员发现C++太复杂,很多开发者经常误用。他们发现C++缺少垃圾收集系统,而且它还具有可移植的安全性、分布式编程和多线程功能。最后,他们想要一个可以轻松移植到各种设备上的平台。
根据可用资金,Joey决定开发一种结合C和Mesa的新语言。在一份报告中,乔伊称之为“未来”。他建议Sun的工程师应该开发一个基于C++的面向对象的环境。起初,Gosling试图修改和扩展C++的功能。他把这种新语言称为C++ ++ -,但后来他放弃了。他要创造一种全新的语言,他将其命名为“Oak”(橡树),以他办公室外的橡树命名。
像许多开发新技术的秘密项目一样,工作组夜以继日地工作,直到1993的夏天,他们才能够演示新平台的一部分,包括绿色操作系统、Oak编程语言、类库及其硬件。最初的尝试是面对一个名为Star7的类似PDA的设备,它有一个明亮的图形界面和一个名为Duke的智能代理来帮助用户。1992 65438+2月3日,此设备展示。
同年6月165438+10月,绿色项目转型为孙公司的全资子公司“第一人有限公司”,团队搬迁至帕洛阿尔托。FirstPerson的团队对构建一个高度互动的设备很感兴趣。当时代华纳公司(time warner Inc .)发布电视机顶盒的提案请求时,FirstPerson改变了他们的目标,并针对征求意见提出了机顶盒平台的提案。但是有线电视行业觉得FirstPerson的平台给了用户太多的控制权,所以FirstPerson的竞标输给了SGI。另一个和3DO公司的机顶盒交易不成功,因为他们的平台在电视行业产生不了任何效益,公司又被合并回孙公司。
Java与互联网
1994年6月,约翰·盖奇、詹姆斯·高斯林、比尔·乔伊、帕特里克·诺顿、韦恩·罗辛和埃里克·斯库米组成的团队经过三天的头脑风暴讨论,决定再次改变目标,这一次他们决定将这项技术应用到万维网上。他们认为,随着马赛克浏览器的到来,互联网正在向他们在有线电视网络中看到的高度互动的前景演变。以此为原型,Patrick Norton写了一个小的网页浏览器WebRunner,后来改名为HotJava[12]。
1994 10月,HotJava和Java平台为公司高层做了一次演示。1994,Java
1.0a版本已经可以下载,但是Java和HotJava浏览器的首次公开发布是在1995年3月23日的SunWorld大会上。盛阳公司的科学总监约翰·盖奇宣布了Java技术。这一宣布是与网景公司执行副总裁马克·安德森令人惊讶的宣布一起作出的,他宣布网景公司将在其浏览器中包括对Java的支持。1996 1 10月,盛阳公司成立Java事业群,专门开发Java技术。
Java和“Java”
商标搜索的结果是,Oak已经被一家显卡厂商注册了。于是同年,Oak改名为Java。当二进制文件(.类文件)用Java源代码编译的,用十六进制编辑器打开,前32位会显示为CA FE BA BE,也就是短语“CAFE BABE”。
Java的近况
一套Java编辑器软件
J2SE环境与疾病预防控制中心的关系
JVM的角色
JSP页面的概念
经过几年的流行,Java在浏览器中的地位已经逐渐被侵蚀。它在简单互动动画中的用途已经完全被Adobe的Flash挤掉了。2005年,Java倾向于只用于更复杂的应用,如雅虎游戏。与此同时,Java遭到了微软的反对,他们决定不将Java平台附加到新版本的Internet Explorer和Windows上。
恰恰相反。在万维网和手持设备的服务器端,Java变得更加流行。很多网站在后端使用JSP等Java技术。
在桌面系统上,独立的Java程序还是比较少见的,因为Java平台的运行成本高,很多人的电脑上没有安装Java。因为以前网络带宽小,下载Java曾经是一件很费时间的事情。但随着10年计算机计算能力和网络带宽的巨大进步,虚拟机和编译器的质量得到了提高,许多应用得到了广泛应用,包括:
开源软件:
NetBeans和Eclipse等软件开发工具
安卓操作系统
杰迪特
Azureus BitTorrent客户端。
JNode操作系统
Apache Software Foundation的Ant、Derby、Hadoop、Jakarta、POI和Tomcat。
JBoss和GlassFish应用服务器
商业软件:
EIOffice(永中办事处)
《我的世界》
纯Java 3D游戏合金战士铬
IBM Websphere、ColdFusion和WebLogic
智能理念
还有很多用Java写的软件,可以在。你可以在下面的网页上看到很多用Java写的程序:/products/有大量用Java Swing开发的桌面Java程序/products/JFC/TSC/Sights/目前Java提供了以下三个版本:
Java平台企业版(Java ee: Java平台企业版)
Java平台,标准版(Java SE: Java平台标准版)
Java平台微型版(Java me: Java平台微型版)
Java平台,卡片版
Java开源项目
2006年,SUN在JavaOne中宣布了Java开源项目,并推出了OpenJDK项目。[13]Java虚拟机、Java编译器和Java类库在GNU通用公共许可证下公开。
版本历史
主条目:Java版本历史
1995年5月23日,Java语言诞生了。
1996 1月,第一个JDK-JDK1.0诞生了。
1996年4月,10各大操作系统厂商宣称将在产品中嵌入JAVA技术。
1996年9月,用JAVA技术制作了约83000个网页。
1997 2月18,JDK1.1发布。
1997年4月2日,JavaOne大会召开,参会人数超过10000人,创下了当时世界同类会议的规模纪录。
1997年9月,JavaDeveloperConnection社区的成员已经超过10万人。
1998年2月,JDK1.1下载超过200万次。
1998 65438+2月8日,JAVA2企业平台J2EE发布。
1999年6月,SUN公司发布了Java的三个版本:标准版(J2SE)、企业版(J2EE)和迷你版(J2ME)。
2000年5月8日,JDK1.3发布。
2000年5月29日,JDK1.4发布。
2001年6月5日,诺基亚宣布,到2003年将销售1亿部支持Java的手机。
2006年9月24日5438+0,J2EE1.3发布。
2002年2月26日,J2SE1.4发布。从此,Java的计算能力有了很大的提高。
2004年9月30日,18:00PM和J2SE1.5发布,成为Java语言发展史上的又一个里程碑。为了显示这个版本的重要性,J2SE1.5被改名为Java SE 5.0。
2005年6月,JavaOne大会召开,SUN公司将Java SE 6公之于众。此时,各种版本的Java都已经改名,取消了数字“2”:J2EE改名为Java EE,J2SE改名为Java SE,J2ME改名为Java ME。
5438年6月+2006年2月,SUN公司发布了JRE6.0。
5438年6月+2009年2月,SUN公司发布Java EE 6。
2010 11,Apache威胁要退出JCP,因为Oracle对Java社区不友好[14]。
2011 7月28日,甲骨文发布Java SE 7。
2065 438+04 03 18甲骨文公司发布Java SE 8。
语言特征
开发Java是为了实现以下五个目的:
应该使用面向对象的编程方法
应该允许相同的程序在不同的计算机平台上执行。
它应该包括对计算机网络的内置支持。
应该设计为安全地执行远程代码。
它应该易于使用,并借鉴了以前的面向对象语言(如C++)的优点。
Java技术主要分为几个部分:Java语言、Java运行环境、类库。一般来说,你说Java的时候,并没有区分你指的是哪一部分。
Java在1.5版本中变化较大,Sun公司将1.5版本更名为Java 5.0。
面向对象的
Java的特点之一是面向对象,这是一种编程方法。“面向对象编程语言”的核心之一就是开发者在设计软件时可以使用自定义类型和关联操作。代码和数据的实际集合称为“对象”。一个对象可以想象成一个绑定了很多“行为(代码)”和“状态(数据)”的对象。对数据结构的修改需要和代码沟通后再操作,反之亦然。面向对象设计使得大型软件项目的规划和设计更容易管理,可以增强项目的健康性,减少失败项目的数量。
跨平台
Java语言的第二个特点是跨平台,也就是说用Java语言编写的程序,编译后不需要做任何改动,就可以在任何硬件设备条件下运行。这个特性通常被称为“编译一次,到处运行”。
要执行Java应用程序,必须安装Java运行时环境(JRE)。JRE中有一个Java虚拟机(JVM)和一些标准类库。Java应用程序只能通过JVM在计算机系统上执行,这与。Net框架。因此,如果计算机上没有安装JVM,这些程序将不会执行。
实现跨平台的方式是,大多数编译器在编写Java语言程序时会生成一个用字节码编写的“半成品”,这个“半成品”会借助Java虚拟机(解释层)运行,虚拟机会将其转换成当前硬件平台的原始代码。之后Java虚拟机打开标准库,访问数据(图片、线程、网络)。主要需要注意的是,虽然已经有了代码翻译的解释层,但是有时候Java字节码代码会被JIT编译器重新编译。
有些编译器,如GCJ,可以自动生成原始代码,无需解释层。但是这些编译器生成的代码只能应用于特定的平台。而且GCJ目前只支持一些Java API。
甲骨文对Java的许可是“完全兼容”,这也导致了微软和升阳之间关于微软的程序不支持RMI和JNI接口并添加特性供自己使用的法律纠纷。圣阳最终赢得了诉讼,获得了约2000万美元的赔偿。法院强制微软执行升阳对Java的许可要求。作为回应,微软在Windows系统中不再捆绑Java,最新版本的Windows、Windows Vista和Internet Explorer 7.0不再提供对Java应用程序和控件的支持。而盛阳公司和其他使用Java运行时系统的公司,为用户提供免费的第三方插件和Windows操作系统下的程序支持。
Java语言最初使用解释层是为了可移植性。所以这些程序的运行效率远低于C语言和C++,用户对此也颇有微词。最近很多调查显示,Java程序的运行速度比几年前快了很多,有些功能相同的程序效率甚至超过了用C++和C语言写的程序【出处请求】。
Java语言在刚应用的时候是没有解释层的,所有需要编译的代码都是直接转换成机器的原码。这样做的结果是获得最佳性能,但程序臃肿,不正常。从JIT技术开始,Java程序就被转化成了机器码。很多老牌的第三方虚拟机都采用了一种叫做“动态编译”的技术,即虚拟机实时监控和分析程序的运行行为,有选择地编译和优化程序需要的部分。这些技术都提高了代码的运行速度,但不会使程序的大小异常。
事实上,程序的可移植性是软件编写中很难达到的目标。虽然Java已经成功实现了“编译一次,到处运行”,但由于平台的差异,在程序转换成代码时,难免会出现细微的、不易察觉的错误和意外。有些程序员对此非常头疼。他们嘲笑Java程序不是“编译一次,到处运行”,而是“编译一次,到处调试”。在Java中
比如AWT,早期的Java
AWT中提供的按钮和文本区域以计算机系统的默认样式显示。这使得Java程序在一些不提供模式的计算机系统中产生错误(在微软
Windows有一个窗口管理器,但在某些Linux发行版中没有)。后来SUN公司引入Java,解决了Java AWT的一些问题。
摇摆.
平台无关性使得Java在服务器端软件领域非常成功。许多服务器端软件都是使用Java或相关技术构建的。
自动垃圾收集(垃圾收集)
C++语言被用户诟病的原因之一是大部分C++编译器不支持垃圾收集机制。通常在使用C++编程时,程序员会在程序中初始化一个对象时在宿主内存栈上分配一个内存和地址,然后在不需要该对象时释放分配的内存地址。如果对象被分配在堆栈上,而程序员忘记删除它,这将导致内存泄漏(内存
泄漏).长此以往,程序运行时,可能会产生大量未清除的垃圾,浪费不必要的内存空间。而如果同一个内存地址被删除两次,程序就会变得不稳定,甚至崩溃。所以有经验的C++程序员会在删除后将指针重置为空,然后在删除前判断指针是否为空。
C++也可以使用“智能指针”或C++托管扩展编译器来实现自动内存释放。智能指针可以在标准类库中找到,而C++。
你怎么能问这样一个关于萨比的问题!)
Microsoft的Visual支持托管扩展
C++
7.0及以上版本支持。智能指针的优点是不需要引入缓慢的垃圾收集机制,线程安全可以忽略。但缺点是如果智能指针使用不当,性能可能不如垃圾收集机制,内存的不断分配和释放可能会造成内存碎片,需要手动压缩堆。除此之外,由于智能指针是一个基于模板的函数,没有经验的程序员在需要使用多态特性进行自动清理时可能会束手无策。
Java语言则不同,上述情况由自动垃圾回收功能自动处理。对象被创建并放在内存堆栈中。当一个对象没有引用时,Java的自动垃圾回收机制就发挥作用了,自动删除这个对象占用的空间,释放内存,避免内存泄漏。
注意程序员不需要修改finalize方法,自动垃圾回收也可以。但是,内存泄漏是无法避免的。当程序员疏忽地忘记删除一个对象不应该有的引用时,内存泄漏仍然是不可避免的。
不同厂商不同版本的JVM中的内存垃圾回收机制并不完全相同。通常,内存垃圾收集机制的新版本会更快。IBM、BEA、SUN等开发JVM的公司都曾宣称自己做出了世界上最快的JVM[源码请求],JVM性能的世界纪录也在不断被打破和提高。
IBM有一篇关于Java内存回收机制比没有垃圾回收机制的C++内存处理快几倍的技术文章[15],著名的Java技术书籍《用Java思考》也有一章讲述Java内存和性能达到甚至超过C++ [16]。
基础语法
写Java程序前注意以下几点:
区分大小写:Java是区分大小写的,这意味着标识符hello和Hello是不同的。
类名:对于所有的类,类名的第一个字母应该大写。如果类名由几个单词组成,每个单词的第一个字母应该大写,例如MyFirstJavaClass。
方法名:所有方法名都应该以小写字母开头。如果方法名包含几个单词,后面每个单词的第一个字母都要大写,例如myFirstJavaMethod。
源文件名:源文件名必须与类名相同。保存文件时,应该使用类名作为文件名(记住Java是区分大小写的),文件名的后缀是。java。(如果文件名和类名不同,会导致编译错误)。
Main方法入口:所有Java程序都由公共静态void main (string [] args)方法执行。
Java关键字
Java关键字列在关键字下面。这些关键字不能用于常量、变量和任何标识符的名称。
关键字
形容
摘要
抽象方法,抽象类的修饰符
维护
断言条件是否满足。
继续
循环体剩余部分不被执行。
系统默认值
switch语句中的默认分支
做一会儿
循环语句中,循环体将至少执行一次
两倍
64位双精度浮点数
其他
不满足if条件时执行的分支。
列举型别
枚举类型
延伸
指示一个类是另一个类的子类。
最后的
表示定义常数。
最后
不管有没有异常都执行代码。
漂浮物
32位单精度浮点数
为
For循环语句
转到
用于进程跳转(不可用,表示不能随意跳转)
如果
条件语句
工具
指示一个类实现一个接口。
进口
导入类
实例of
测试一个对象是否是一个类的实例。
(同Internationalorganizations)国际组织
32位整数
连接
接口是一种抽象类型,只有方法和常数的定义。
长的
64位整数
当地的
表示方法是用非java代码实现的。
新的
分配新的类实例
包裹
一系列相关的类形成一个包。
私人的
表示只能从类内部访问的私有字段或方法。
保护
字段指示保护类型
公众的
指示* * *具有属性或方法。
返回
方法返回值
短的
16位数
静电
表示在类级别定义并由所有实例共享的。
strictfp
浮点数的比较使用严格的规则。
极好的
表示基类
转换
选择指令
同步的
表示一次只能由一个线程访问的代码块。
这
调用当前实例或调用另一个构造函数
扔
抛出异常
投
定义方法可能引发的异常。
短暂的
修饰不想序列化的字段。
尝试
指示代码块需要异常处理。
空的
tag方法不返回任何值。
不稳定的
标签字段可以由多个线程同时访问,而无需同步。
在…期间
While循环
给…作注解
注释功能:确定程序是什么以及它是如何构建的。注释帮助程序员相互交流,理解程序。注释不是编程语言,所以编译器在编译程序时会忽略它们。
界面和类别
Java附带了一个创建接口的类别,可以如下使用:
可删除的公共接口{
void delete();
}
这段代码意味着任何实现)可删除接口的类都必须实现delete()方法。每个类别都可以自定义该方法的实现。这个概念可以有很多用途。以下是一个类别的示例: