Java(精选12篇)
Java 篇1
1. Java语言的出现
自从1946年世界上第一台电子计算机问世以来, 计算模式的发展经历了三个阶段:集中计算模式、分散计算模式和网络计算模式。Internet的出现, 为在网络计算模式下的科学计算和信息处理提供了良好平台。然而, 要充分利用网络计算模式的功能与效益, 平台的运行环境是个制约因素, 而Java语言和Java技术则是解决这一问题的最佳途径。
2. Java语言的主要特点
Java语言是一种适用于网络编程的语言, 它的基本结构与C++极为相似, 但却简单得多。它集成了其它一些语言的特点和优势, 又避开了它们的不足之处。它的主要特点如下:
2.1 简单性
Java与C++相比, 不再支持运算符重载、多级继承及广泛的自动强制等易混淆和较少使用的特性, 而增加了内存空间自动垃圾收集的功能, 复杂特性的省略和实用功能的增加使得开发变得简单而可靠。简单化的另一个方面是Java的系统非常小, 其基本解释和类支持部分只占40KB, 附加的基本标准库和线程支持也只需增加175KB。
2.2 平台独立性
这是Java最吸引人的地方。由于它采用先编译成中间码 (字节码) , 然后装载与校验, 再解释成不同的机器码来执行, 即“Java虚拟机”的思想, “屏蔽”了具体的“平台环境”特性要求, 使得只要能支持Java虚拟机, 就可运行各种Java程序。
2.3 面向对象的技术
面向对象 (O-O) 的技术是近年来软件开发中用得最为普遍的程序设计方法, , 它通过把客观事物进行分类组合、参数封装、用成员变量来描述对象的性质、状态, 而用方法 (成员函数) 来实现其行为和功能。O-O技术具有继承性、封装性、多态性等众多特点, Java在保留这些优点的基础上, 又具有动态联编的特性, 更能发挥出面向对象的优势。
2.4 多线程
多线程机制使应用程序能并行执行, Java有一套成熟的同步原语, 保证了对共享数据的正确操作.通过使用多线程, 程序设计者可以分别用不同的线程完成特定的行为, 而不需要采用全局的事件循环机制, 这样就很容易实现网络上实时的交互行为。
2.5 动态性
Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承, 使之比严格的类继承具有更灵活的方式和扩展性。
2.6 安全性
Java有建立在公共密钥技术基础上的确认技术.指示器语义的改变将使应用程序不能再去访问以前的数据结构或是私有数据, 大多数病毒也就无法破坏数据.因而, 用Java可以构造出无病毒、安全的系统。
Java语言除上述主要特点外, 还有高性能、分布性、强大性、解释性、可移植性等, 此处不再赘述。
3. Java语言的发展
Java自正式问世以来已经历了四年的历程, 时间虽短, 发展极快。一年一度在美国旧金山召开的世界Java One语言开发者大会 (Java One Developer Conference) 盛况空前正说明了这一点。四年中每年的Java One大会, 既是了解Java最新技术动态、应用成果和下一步发展趋势的最好场所, 又是推动下一年Java快速发展的重要动力。
3.1 加速后PC时代的进程
计算机的发展创造了Internet, 但是计算机现在却不是访问Internet的唯一方式。正在出现的信息化、智能化的消费类电子产品打破了PC作为信息终端的垄断地位, 成为人类进入Internet的新门户。信息终端的多元化预示着所谓后PC (post-PC) 时代的到来。消费类的信息终端量大面广, 是典型的瘦客户机, 其本身的资源和能力不能与PC相比, 但必须更加智能化, 并对服务器端的管理提出了更高的要求。而Java平台恰恰满足了这种要求。本次大会推出的Kjava虚拟机能运行在16以上的微处理器上, 占用内存少, 人们可以随心所欲, 在资源有限的设备上方便地开发出各种各样的应用, 直接运行在不同的消费类或其它电子设备上;而Jini的出现为Java网络连接提供了公共标准, 使得任何Java设备都可以连入网络中被自动识别, 并可充分利用网络上已有的各种资源。大力推进Jini的发展是Sun公司加速后PC时代进程的一项重要策略。
4. Java技术
Java发展至今日, 已不仅仅是一种编程语言, 实际上已形成了一门技术.其内容包括:
4.1 Java软件包
Java语言及其编程技术、Java OS、Java开发环境与工具、Java语言的各种软件包、数据库接口JDBC等。
4.2 Java虚拟机及其规范
4.3 Java嵌入技术 (Java芯片)
已推出的有Java戒指、Java卡等。1999年8月2日, Sun公司宣布名为MAJC的专门为Java语言设计的的芯片优化研制成功, 欲与Intel试比高低。该芯片在设计时采用了模块式高性能计算引擎, 实质为一种芯片级并行处理机, 能以更有效的方式分解计算任务, 特别适合处理多媒体数据。Sun公司希望通过MAJC芯片的发布催生出一个基于Java语言的微处理器家族, 与Intel公司竞争。设想中的Java处理器将应用在从低价消费电子产品到高端因特网服务器领域。
4.4 Java计算
基于Java技术的企业Internet/Intranet信息系统以及其他应用系统。
4.5 Jini技术
1999年初正式发布后, 立刻得到业界的广泛支持。Jini的出现为Java网络连接提供了公共标准, 使得任何Java设备都可以连入网络中被自动识别, 并可充分利用网络上已有的各种资源。它把网络上的各类设备 (包括消费类电子设备如移动电话、PDA、DTV、HPC、NC、游戏机、电冰箱、智能卡等等) 和各种软件组合成一个单一、动态的分布式系统, 使网络更易于操纵、易于管理, 具有更高的可配置性。Jini将使网络具有自发性, 它的出现大大扩展了“计算”和“计算机”的含义, 极大地简化了网络操作, 对家庭用户来说, 使用网上设备即插即用, 就像使用电话一样方便。Java和Jini不仅可以不依赖于Windows为代表的操作系统, 而且引导着信息产业的潮流, 使Sun公司能在未来的、非PC类电子产品的数字化市场中强占制高点。
4.6 Jiro平台
异质网络环境中安装的存储系统的多样性和分布性, 给存储管理带来了巨大的挑战。用户和开发人员都希望能有一种技术, 能更好地促进企业存储管理方案的开发。而Jiro平台正是解决此问题的革命性方案。Jiro平台实现了Java和Jini技术, 它是一个便于用户管理异质网络上由各种服务器、存储和设备组成的混合环境的开放式存储管理平台。它对操作系统是中立的。Jiro为跨异质存储局域网 (SAN) 的管理服务和设备提供了一个开放平台, 允许服务器、存储和联网设备在异质网络环境中无缝地协同工作。Jiro平台为开发者带来的好处有:
允许开发者利用各种实现管理存储网络的目标功能创建应用;
提供了一个可以在各种应用、服务和设备之间交互操作的组件模型;
允许设备易被增加、删除;
允许应用或服务被自动更新。
1999年7月, Sun发布了正式的Jiro规范草案, 供公众讨论、修改。目前, Jiro平台的团体成员已超过25家, 支持Jiro平台的厂商超过300家。有眼光的厂商纷纷加入到这些组行列, 从而加快了Jiro的发展。
参考文献
[1]Java语言:信息技术的一次震撼.国家科委信息司.[期刊]科技成果纵横, 1997-05-20.
Java 篇2
提升网站性能的方式有很多,例如有效的使用缓存,生成静态页面等等。今天要说的就是生成静态页面的方式。这个也是我近期一直在搞的一个问题,近期在做使用html + servlet做个人网站,为什么是这2个东西呢?
提升网站性能的方式有很多,例如有效的使用缓存,生成静态页面等等。今天要说的就是生成静态页面的方式。这个也是我近期一直在搞的一个问题,近期在做使用html + servlet做个人网站,为什么是这2个东西呢?
1、直接用servlet是为了保证网站能以最快的速度执行命令..个人总感觉像Struts hibernate spring之类的虽然方便但是效能带来的损耗不太能接收
2、使用html同样是为了保证最快的反应速度,毕竟html 比jsp少了一层服务器执行.速度上要快的多
一、在这里要先说一下什么是页面静态化:
简单的说,我们如果访问一个链接 http://abc.com/test.do,服务器对应的模块会处理这个请求,转到对应的jsp界面,最后生成我们想要看到的数据。这其中的缺点是显而易见的:因为每次请求服务器都会进行处理,如果有太多的高并发请求,那么就会加重应用服务器的压力,弄不好就把服务器 搞down 掉了。那么如何去避免呢?如果我们把对 test.do 请求后的结果保存成一个 html 文件,然后每次用户都去访问 http://abc.com/test.html,这样应用服务器的压力不就减少了?
那么静态页面从哪里来呢?总不能让我们每个页面都手动处理吧?这里就牵涉到我们要讲解的内容了,静态页面生成方案...我们需要的是自动的生成静态页面,当用户访问 http://abc.com/test.do,会自动生成 test.html,然后显示给用户。
二、下面我们在简单介绍一下要想掌握页面静态化方案应该掌握的知识点
1、基础— URL Rewrite 什么是 URL Rewrite 呢 ? URL 重写。用一个简单的例子来说明问题:输入网址http:///test.do,但是实际上访问的却是 http:///test.action,那我们就可以说 URL 被重写了。这项技术应用广泛,有许多开源的工具可以实现这个功能。
2、基础— Servlet web.xml 如果你还不知道 web.xml 中一个请求和一个 servlet 是如何匹配到一起的,那么请搜索一下 servlet 的文档。这可不是乱说呀,有很多人就认为 /xyz/*.do 这样的匹配方式能有效。
如果你还不知道怎么编写一个 servlet,那么请搜索一下如何编写 servlet。这可不是说笑呀,在各种集成工具漫天飞舞的今天,很多人都不会去从零编写一个 servlet了。
三、基本的方案介绍
其中,对于 URL Rewriter的部分,可以使用收费或者开源的工具来实现,如果 url不是特别的复杂,可以考虑在 servlet 中实现,那么就是下面这个样子:
高校Java课程教学浅析 篇3
关键词:Java课程;实践教学;高校;学习兴趣
中图分类号:TP312.2-4 文献标识码:A 文章编号:1007-9599 (2012) 10-0000-02
目前,软件开发企业需要大量的基础的应用人才,很多高校和学生看到了这一机遇,高校开始开设与Java相关的教学课程,很对学生也开始报考学习这些课程,然而,由于目前我国高校Java课程在实际教学中存在着一定的问题,这就在一定程度上使得Java课程教学的效果不理想,从而在一定程度上使得学生不能满足软件开发企业的要求,使得学生在毕业后很难顺利地就业,有的学生则到了工作岗位也很难胜任自己的工作,因此,作为高校和教师,我们有必要对Java课程的教学进行研究,不断地提高Java课程的教学效果,只有这样,我们才能为软件开发企业培养出合格的人才,学生毕业后才能顺利地踏上工作岗位,顺利地进入社会,为社会的和谐发展贡献自己的一份力量。
一、Java课程在实际教学中所存在的问题
(一)学生害怕学习Java
通过调查研究,我们发现学生都说Java课程很难,这在一定程度上使得他们害怕学习Java。在学习Java之前,高校一般都为学生开始C语言课程,因此,对于Java语法级别的学习,学生则相对来说感到比较容易。然而,与C语言不同,Java是面向对象的语言,而不是面向过程的语言,这就要求学生要用面向对象的概念进行思考,要用面向对象的概念进行设计,对于大多数的学生来说,这是一种新的体验,这是一种新的挑战。通过调查研究,我们还发现,很多学生不能够很好地理解“面向对象”,他们对于“对象”可以做什么而感到困惑,对于“对象”怎么做感到困惑,而且除了要求设计者要具有很强的逻辑思维能力,要求设计者的思路要清晰以外,程序设计还要求设计者要不断地自我学习,要能够适应现代编程技术的变化,这些都对学生的学习造成了一定的压力,从而使得学生在一定程度上害怕学习Java。
(二)学生对Java技术理解不够深
目前,Eclipse、NetBeans、JBator等是较为流行的Java集发环境,它们各自有自己的优点,同时,他们也各自有自己的缺点。作为教师,我们在选择编程环境的过程中,要根据不同的讲授对象来选择与他们相应的编程环境,而不能统一用一种编程环境。比如,对于非计算机专业的学生来说,我们就不应该选择基于图形用于界面的框架,如果選择了这样的一种框架,那么,会在一定程度上使得学生忽视了对Java语言本身的理解,使得他们忽视了对Java语言本身的学习,相反,则会使他们将大部分的精力花在对框架结构额理解上,使他们将大部分的精力花在对框架结构的使用上。当然,这会使得学生相对来说擅长整合,擅长快速开发,但是,这会使得学生对系统的理解比较薄弱,在一定程度上使得他们缺乏自主分析问题的能力,使得他们缺乏解决问题的能力。
(三)实践教学不够,学生动手能力不强
通过调查研究,我们发现,目前很多高校的教师在讲授Java课程时,过于重视语法,他们相对地忽视了实践教学,这就在一定程度上使得学生的动手能力不强。教授语言的课程的目的是让学生学会用计算机解决问题的思考方法,是培养学生的实际编程能力,而不是仅仅让学生掌握好相关的基础知识。然而,有些教师在授课的过程中,仅仅注重语言的讲解,他们忽视了培养学生用计算机解决问题的思考方法,忽视了培养学生的实际编程能力。也就是说,教师在授课的过程中,忽视了实践教学,没有给学生足够的实际锻炼的机会,这就使得他们缺乏实际动手的能力,缺乏解决实际问题的能力,达不到学习的实际目的。
二、政策建议
(一)注重训练编程思想
要想完全掌握一种编程语言,我们应该首先掌握相关的编程思想,如果我们掌握了相关的编程思想,那么,只要我们简单的了解了该语言的语法特点,我们便可以触类旁通,完全掌握该语言。编程思想是在反复的教学、观察、分析、比较和总结中积累的。逻辑思维能力对与编程思路很重要,也就是说,如果要想有一个好的编程思路,那么,我们就应该要具有较强的逻辑思维能力。因此,在日常的教学中,教师不应该仅仅教授学生相关的基础知识,同时,教师还应该要注重培养学生的逻辑思维能力,培养学生面向对象的分析能力,培养学生面向对象的设计能力,只有这样,才能最大限度地让学生掌握好Java课程,才能为软件企业培养出合格的人才,从而让学生毕业后顺利地走入社会,踏上工作岗位。
(二)采用案例教学
案例教学是一种对真实项目的模拟,是一种对真实项目的仿真。对于程序设计课程来说,如果我们只是一味地讲解一些抽象的话,一味地讲解一些难懂的概念,一味地讲解一些难懂的语言,而不在授课的过程中采用相关的案例,那么,教学过程就会显得枯燥无味,同时,还会在一定程度上使得学生对所讲授的知识感到困惑,不能很好地理解和掌握所讲授的知识。因此,在Java课程教学中,作为教师,我们应该改变传统的教育方式,尽量地多采用相关的案例,只有这样,我们才能让学生更好地理解和掌握我们所讲授的知识,同时,运用案例,我们还可以向学生提出相关的问题,并让学生针对所提出的问题,发表自己的看法,这样,不仅可以让我们了解学生对于所讲授知识的掌握程度,同时,还可以在一定程度上提高学生学习的兴趣,让学生获取全面的知识。
(三)采用多媒体教学
多媒体教学是现代化的一种教学手段,其会使得所讲授的知识更加的形象,更加生动。对于大多数学生来说,Java课程过于抽象,内容比较枯燥,如果在授课的过程中,我们还是采用传统的教学方法,那么,学生的学习兴趣就相对较低,有的学生甚至会产生厌学的情绪,从而使得他们的学习效果较差。所以,作为教师,在授课的过程中,我们应该利用现代多媒体技术,制作相关的课件来辅助教学,这样,就会在一定程度上提高学生学习的兴趣,同时,还会使得学生对于所讲授的知识有一个比较深的印象,利于学生掌握,利于学生理解。此外,通过运用现代多媒体技术,我们还可以进行相关的演示,这样,对于一些难于理解的知识,学生可以通过演示来更好地理解他们,从而掌握他们,这在一定程度上提高了教学效果。
(四)注重实践模拟
培养学生分析问题的能力,培养学生解决问题的能力是程序设计语言的教学目的,只有学生具备了分析问题的能力,具备了解决问题的能力,学生才能在一定程度上具备项目开发的能力,只有学生具备了项目开发的能力,学生才能满足软件企业的需求。实践是实现这一目的的最有效的方法,实践是对所学内容的综合运用,是对所学内容的巩固提高,通过实践,不仅可以使学生很好地巩固前面所到的知识,而且,其还能让学生自己动手去完成相关的模块,这在一定程度上使得学生对于开发项目的基本流程有了一个教授的了解,从而为日后从事Java领域的开发工作打好了一定的基础。在理论教授结束后,我们可以紧接着为学生安排上机实习,这样不仅可以使学生对于所学的知识得到了巩固,得到了提高,同时,其还在一定程度上使得学生的实际操作能力也得到了相应地提高。作为教师,我们还应该根据学生的实际情况,给他们布置一些相应地能够提高他们动手能力的课后练习及其课后实训课题,给他们布置一些相应地能够提高他们创新能力的课后练习及其课后实训课题,让学生自己动手去完成一些相应的项目,这样,一方面可以使得学生获得一定的成就感,使得学生获得一定的自信心,另一方面,其还在一定程度上发挥了学生的主动性,在一定程度上发挥了学生的创造性,从而提高了学生独立思考的问题,提高了学生分析问题的能力,提高了学生解决问題的能力。
(五)给学生充分的自由,建立开放式课堂
在Java课堂教学的过程中,作为教师,我们应该充分调动学生的主动性,我们应该意识到学生是学习的主体,充分考虑学生的学习基础,充分考虑学生的学习需求,给学生充分的自由空间,我们应该利用一切可以利用的条件,为学生创造良好的学习环境,为学生创造良好的学习条件,例如,我们可以利用BBS平台,利用及时交流工具,利用开放的实验室等与学生进行交流,同时也让学生与学生之间进行交流,这样不仅可以提高学生学习的主动性,而且还可以让学生通过交流发现自己的不足,通过交流发现他人的长处,让教师及时地掌握学生对所讲授知识的掌握程度等等,这些都在一定程度上提高了教学效果。
参考文献:
[1]刘旭红,佟俐鹃.《面向对象程序设计》双语教学的探索与实践[J].教育理论与实践,2007年S1期
[2]王先耀.基于Windows 32位平台基础上面向对象的程序设计及开发工具[A].加入WTO和中国科技与可持续发展——挑战与机遇、责任和对策(下册)[C],2002年
[3]向模军,刘松青.Java教学的探讨和实践[J].计算机与信息技术,2008年03期
[4]王健,高忠泽,苏秀苹.基于Game理论的交流接触器电磁系统多目标优化设计的软件实现[A].中国电工技术学会低压电器专业委员会第十一届学术年会论文集[C],2002年
[5]姜海红.浅谈JAVA教学心得[J].黑龙江科技信息,2009年08期
[作者简介]
浅谈Java技术 篇4
1 Java的发展
Sun公司在意识到“one size does not fit all”(一个模式不能兼容所有环境)之后于1998正式发布Java2平台。该平台式基于最初的java而开发的平台,包括三个版本:J2ME、J2SE、J2EE。
在Java2平台发布之后,Java的发展期可以说进入了“现代”,在那之前程序员日常开发使用的技术与现在几乎完全不同,比如Applet,现在已经很少有人使用了。Java2的三种版本中,J2EE得到了长足发展和广泛使用。J2ME在手机市场上也取得成功,只有其中J2SE略显落寞,平常应用较少,只衍生出一个SWT。从今天看来,当时的Java 2还很不成熟,但是有一点是毋庸置疑,经过市场和时间的检验,Java 2规划出来的三大方向把Java技术指向了光明。
1998年,JCP组织成立,并开始把握Java的发展方向。JCP组织允许所有对Java感兴趣的商业公司、个人、非盈利组织、学校等参与Java的发展,这给Java带来了巨大的活力。随之兴起了一场Java开源运动,其最大贡献是实现和鼓励了知识共享。在众多开源程序员们的努力和分享下,很多原先只被商业公司掌握的技术、思想和产品可以被所有需要的开发人员免费或者以较低的价格获得使用权,通过开放源代码获得反馈和改进意见从而进一步发展Java。开源运动所带来的开放、反馈、交流的风气对Java的发展起到了积极的作用。
九十年代是IT产业的一个黄金时代。信息时代的兴起使得对IT人员的需求与日剧曾。软件开发类似于艺术创作,所有创作人员都想在作品上打上自己的印记并流传于世界。但在高收入的舒适生活和早九晚五的工作模式中开发人员的激情和梦想得不到满足,再加上在西方文化中推崇分享和交流,开源运动的出现和兴起也就水到渠成了。开源运动已经不仅仅是程序员们的游乐园地,而是发展成为一项开源软件产业。
Java语言在互联网中展现了良好的交互性能,但它还无法消除企业级用户对它的怀疑。1998年,BEA公司宣布收购Web Logic公司,紧接着推出由Sun公司第一个授权使用J2EE许可证的Web Logic Server应用服务器,Web Loigc Server以其对标准的支持、强悍的运算能力和安全的架构设计等特性很快消除了企业用户的怀疑。推出后不到一年,Web Logic Server就成为业内第一Java应用服务器。
JBoss和Eclipse是很有影响力的Java开源软件项目。几乎所有的Java开发人员都听过或接触过它们。JBoss是优秀的企业级开源J2EE应用服务器,Eclipse是功能完全可以替代商业产品的Java IDE。人们几乎可凭借它俩就能完成企业应用的开发构建到部署实施的全过程。高质量、高可靠性的Java开源软件可以让软件开发者和客户享受到低成本带来的优势。
2004年9月30日,研发历时近三年代号为“Tiger”的J2SE 5.0正式版本发布,这是Java平台历来发布版本中改动面波及最大的一次。“Ease of development”是该版本的核心主题,这个版本对语言特性进行了改进,很大程度上简化了开发人员日常的编程任务,实现了一些琐碎编程工作的自动化。而其中的注解功能,以及随之而来的声明式编程,对J2EE 5.0产生了巨大影响。
2 java的分类
Java2平台包括:J2SE、J2EE和J2ME三个版本。
对于三种版本的认识,可以这样笼统的理解:J2SE是基础;J2ME是在J2SE的基础上压缩,并增加一些CLDC等方面的特性;J2EE是在J2SE的基础上扩充,并增加一些EJB等企业应用方面的特性。
SE即Standard Edition(标准版)J2SE包含那些构成Java语言核心的类。比如:数据库连接、接口定义、输入/输出、网络编程,主要用于桌面应用软件的编程。从JDK 5.0开始,不再叫J2SE,改名为Java SE,因为那个2已经失去了其应该有的意义。
EE即Enterprise Edition(企业版)J2EE包含J2SE中的类,并且还包含用于开发企业级应用的类,是Java2企业开发的技术规范。J2EE不仅仅比标准版多了一些类,而且还包括许多组件,如Jsp,Servlet,Java Bean,EJB,JDBC,Java Mail等,J2EE主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
ME即Micro Edition(微缩版)J2ME包含J2SE中一部分类,用于消费类电子产品的软件开发。比如:呼机、智能卡、手机、PDA、机顶盒,J2ME主要应用于嵌入式系统开发,如手机和PDA的编程。
3 Java的主要特点
1)Java的跨平台性:Java不仅仅是一种语言,更重要的是一种区别于传统系统,遵循“网络就是计算机”信条的平台技术。Java平台将面向对象系统扩展成包括程序和数据的网络计算机(NC),而这个平台的核心就是Java虚拟机,许多使Java成为万能开发平台的属性都源于Java虚拟机的概念和实现。
2)面向对象技术:Java全面支持面向对象技术,这体现在Class(类)是Java程序构成的基本单元,一个Java程序通常由许多Class组成,而且这些Class会有一定的继承关系,Java支持Class的单继承,从而使类之间的继承关系更明确。继承的结果产生类的多态性,类的多态本质上就是可以用父类的引用访问继承类的实现(子类对象),类的这种多态性最终形成了组件对象模型的基础,即通过接口(父类)访问实现(子类)。
3)Java中的I/O操作:Java中以字节流(Input Stream和Output Stream)、节符流(Reader和Writer)来分别读写二进制数据和字符数据,使用非常简单有效。Java类库中的File类不仅提供文件操作而且还包含文件夹操作。
4)Java中的图形及事件处理:可以用awt包或swing包的Java类来进行大部分的Java图形界面设计。
5)Java可抑制性:Java作为一种编程语言:源代码可移植性;Java作为一个虚拟机:硬件平台可移植性;Java作为一种虚拟的操作系统(OS)和图形用户界面(GUI):操作系统移植性。
4 Java的应用
如今,基于Java技术开发的交互应用软件使Web栩栩如生。借助Java API及其编程语言上的Java虚拟机,可以产生一种分布信息的崭新模式,称之为Java企业计算。基于软件分配基本上是免费的,占有成本大幅度降低,信息和应用软件到处可存取等原因使得企业取得了竞争优势。Java已经改变了企业和个人同Internet打交道的方式。现在,它正在对消费类产品产生明显的影响,而且从总体上更加深刻地影响企业计算。
Java是一种独立平台,它无处不在,而且能到处运行。它已拥有几百万个用户,其发展速度要快于早先的任何一种计算机产品。借助Java我们可以自由地使用已有的硬件和软件。随着时间的推移,Java正在迅速被用做传播信息的标准,这是因为它可以给企业和最终用户带来很多好处。
摘要:回顾历史,计算机语言有着一个漫长的发展过程。在整个发展过程中,出现了非常经典的c语言,史上最为强大的c++语言等等,它们在各自不同的应用领域中都占有相当重要的地位,而该文要论述的则是最近几年比较热门的java语言。
关键词:Java语言,发展,历史,未来
参考文献
[1]陈佚,姚晓昆.Java程序设计[M].北京:清华大学出版社,2006.
[2]梅兴文.编程入门经典[M].4版.北京:人民邮电出版社,2007.
[3]骆挺.Java作为计算机入门教学语言的思考[J].电脑编程技巧与维护,2009(24).
[4]王洵.基于Java的数据结构算法演示系统开发[J].成都航空职业技术学院学报:综合版,2009(4).
Java 篇5
importjava.io.*;
import java.sql.*;
public class ToOracle {
public static void main(String[] args) {
int n = 10;//每个线程执行的个数
//System.out.println(“start action!!!!!!”);
ToOracle ac = new ToOracle();
ThreadRun[] testrun = new ThreadRun[21];
for (int i = 1; i <= 21; i++) {
testrun[i] = ac.new ThreadRun();
testrun[i].TRun(n);
System.out.println(“线程” + i + “已经启动”);
}
//testrun[1] = ac.new ThreadRun();
//testrun[1].TRun(10);
for (int i = 1; i <= 21; i++) {
testrun[i].TExit();
}
}
class ThreadRun {
String blobname = “D:eclipsetesttest1.txt”; //blob文件名
String clobname = “D:eclipsetesttest2.txt”; //clob文件名
String in = “insert into ”;
String in1 = “(order_id,ric_code,siz,price,trade_datetime,status,testblob,testclob) values(9,´asdfjkl´,21,123.34567,sysdate,´nill逆耳´,?,?)”;
String tablename = “orders1”;
String sqlstr = “”; // sql 语句
ThreadUseExtends thread = new ThreadUseExtends(blobname, clobname,
sqlstr);
public void TRun(int n) {
sqlstr = in + tablename + in1;
thread = new ThreadUseExtends(blobname, clobname, sqlstr);
//thread.start();
thread.run(n);
/*
* int n=10; for (int i = 1; i <= 21; i++) { while(0
* in + tablename + in1; thread[i] = new ThreadUseExtends(blobname,
* clobname, sqlstr[i]); thread[i].start(); n--; }
* System.out.println(“线程” + i + “已经启动”); }
*/
//System.out.println(“线程1已经启动”);
}
public void TExit() {
thread.interrupt();
}
class ThreadUseExtends extends Thread {
String filename1;//blob filename
String filename2;//clob filename
String str;
//构造函数要有(blob文件名,clob文件名,sql语句)
public ThreadUseExtends(String name1, String name2, String sqlstr) {
filename1 = name1;
filename2 = name2;
str = sqlstr;
}
ReadFiles r1 = new ReadFiles();
public void run(int n) {
while (n > 0) {
try {
String url = “jdbc:oracle:thin:@193.9.200.111:1521:ora9i”;
String login = “system”; // use your login here
String password = “ti”; // use your password here
Class.forName(“oracle.jdbc.driver.OracleDriver”);
Connection con = DriverManager.getConnection(url,
login, password);
String testLong = r1.ReadFile(filename1);
String testLong1 = r1.ReadFile(filename2);
byte[] ba = testLong.getBytes();
System.out.println(“str=” + str);
//String strSql = str; //“insert into
// orders(order_id,ric_code,siz,price,trade_datetime,status,testblob,testclob)
// values(8,´asdfjkl´,21,123.34567,sysdate,´nill逆耳´,?,?)”;
PreparedStatement stm = con.prepareStatement(str);
stm.setBytes(1, ba);
StringReader test = new StringReader(testLong1);
stm.setCharacterStream(2, test, testLong.length());
stm.execute();
stm.close();
con.close();
} catch (Exception e) {
e.printStackTrace();
}
n--;
}//while
}//run
}//ThreadUseExtends class
// ReadFiles class for read text!!
class ReadFiles {
public ReadFiles() {
}
//ReadFile method,read file
public String ReadFile(String FileName) {
String Name = FileName;
String File = “”;
try {
FileReader ReadF = new FileReader(Name);//读文件
BufferedReader HuanChong = new BufferedReader(ReadF);//文件读缓冲.
try {
File = HuanChong.readLine();
} catch (IOException e1) {
// TODO 自动生成 catch 块
e1.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
//System.out.println(“文件:”+File);
return File;
}
}//ReadFiles class
}//ThreadRun class
}//ToOracle class
多个手机Java软件统一管 篇6
图1
1合并前需要注意的问题
Multime Constructor软件是一款绿色软件。不过为了保证能够顺利运行,Multime Constructor软件所在文件夹需要直接放在电脑磁盘根目录下,并且需要将准备合成的多个Java软件都放在Multime Constructor软件文件夹内(见图2)。
图2
2设置转换参数进行Java文件合并
完成准备工作后点击软件文件夹内“MULTIME.EXE”程序运行软件,在出现的窗口中点击确定后进入软件主界面。
先对合并的Java软件进行参数设置(见图3):设定集合后程序的名称如“MULTime”和保存的位置,然后选择手机Java平台如MIDP 1.0、MIDP 2.0或Motorola机型,这里一定要根据手机要求选择,否则合并的Java程序无法在手机上运行。此外,你还可以替换掉原来程序的图标,只要使用手机屏幕大小的PNG格式图片即可。
图3
点击“添加”按钮,加入需要合并的多个Java软件,注意需要保证添加的Java软件具有相同的适应性即平台一致。确认无误后点击“开始合成”,出现一个类似DOS的转换窗口,移动转换窗口右边滑块至最底端,如果显示“done”则表示已经顺利完成了合并,反之显示“failed”则表明加入的Java文件不匹配。转换完成的Java文件出现在设定目录中“output”文件夹内,只要将其装入手机安装后即可运行。
3在手机上运行合并后的Java程序
与一般Java软件安装方法一样,对合并后的Java文件进行安装。运行新的Java程序后,主界面出现合并前加入的各个Java软件,与原来各自安装的Java软件差不多。点击“选项”还可以对软件设置参数,如增加最小化功能、热键设定等。选定需要运行的Java程序,执行“选项→Run”即可运行该软件,进入软件后操作方法与原来单个程序一样,只不过多了“minimize”功能,执行后即可切换到主界面,便于运行其他Java程序。当需要退出主程序时,点击“Kill”即可关闭整个程序(见图4)。
Java异常处理分析 篇7
随着互联网的不断发展, B/S结构的软件项目已越来越多, 而在B/S结构的软件项目开发中, Java语言通过虚拟机实现了跨平台的特点, 所以Java语言仍然是当前B/S结构的软件项目开发的主流之一。在软件开发中, 因为数据输入、内存处理及硬件因素等原因可能导致程序出现异常而中断, 这时必须要通过程序代码对异常进行处理, 保障程序执行的延续性, 而Java的虚拟机则有自己的异常处理机制, 通过Java的关键字try、catch、finally、throw及throws可以对异常进行灵活处理。本文通过实例对Java的异常处理机制进行了归纳分析。
2 Java异常处理机制
Java作为面向对象的程序设计语言, 所有的方法、属性都属于类, 异常也不例外, 所有的异常都继承于Exception类, 根据异常的类型可将异常分为执行异常和检查异常, 执行异常又称为运行异常, 在发生异常时程序员可以不做处理, 由虚拟机自动进行处理, 检查异常则必须通过代码处理, 否则程序会出现编译错误。最简单的异常处理方法是使用try、catch语句进行捕获处理, 将可能发生异常的语句用try语句括起来, 再通过catch语句对发生的异常进行处理, 当系统运行发生异常时, 该异常对象从第一个catch语句一开始, 依次与每一个catch后面的异常类进行比较, 如果相符, 则执行该该catch语句后面括号内的语句, 转而跳出try、catch语句。例:
import java.util.Input Mismatch Exception;
import java.util.Scanner;
public class Demo1 {
public static void main (String[] args) { int a, b;
Scanner sc=new Scanner (System.in) ;
try {
a=sc.next Int () ;
b=sc.next Int () ;
System.out.println ("a/b="+a/b) ;}
catch (Input Mismatch Exception e) {
System.out.println ("数据输入格式发生异常") ;}
catch (Exception e) {
System.out.println ("数据运算发生异常") ;}
}
}
当程序运行时若输入4.5回车, 则出现数据输入格式异常, 异常被第一个catch语句捕获, 输出“数据输入格式发生异常”。当程序运行时输入3回车0回车, 则出现分母为零的运行异常, 异常被第二个catch语句捕获, 输出“数据运算发生异常”。
3 异常处理关键字
除了基本的try、catch语句进行异常处理外, 还可以通过关键字throw和throws主动抛出异常或声明该方法将产生异常。
3.1 throw关键字
throw关键字通常用在方法体中, throw本身作为一条语句, 作用是主动抛出一个异常对象, 该异常可以通过自己写的catch语句进行捕获处理, 也可以在上一级代码调用时由调用者进行处理, 例:
public static int fac (int n)
{ int f=1;
if (n<0) {
throw new Exception (“负数不能求阶乘!”) ;}
for (int i=1;i<=n;i++)
f*=n;
return f;}
3.2 throws关键字
Throws关键字一般放到方法头的后面, 用来声明该方法会产生异常, 该方法通过throws抛出若干异常, 而方法本身不处理异常, 将异常上抛给调用者, 由调用者处理异常或继续向外抛出异常。例:
Public static float f1 (float a, float b) throws Exception
{ return a/b;}
4 总结
异常处理机制是体现软件工程思想的特点之一, 通过异常处理机制可使程序增强易读性、可维护性。因此作为Java程序开发人员, 应熟练掌握异常处理方法。
摘要:Java语言通过虚拟机实现了跨平台的特点, 从而间接促进了Java语言在当前软件项目开发中的应用。而虚拟机本身有自己的异常处理机制, 通过灵活运用异常处理, 可以提高程序的易读性及可维护性, 本文对Java的异常处理机制进行了归纳分析。
关键词:异常,Java,处理,分析
参考文献
[1]钟诚, 汪学明, 陈旭.Java语言及其应用.重庆:重庆大学出版社, 2006, 6.
[2]孙卫琴.Java面向对象编程.北京:电子工业出版社, 2006.
Java反射机制探究 篇8
反射 (reflection) 的概念是由Smith在1982年首次提出的, 主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用, 并在Lisp和面向对象方面取得了成绩。最近, 反射机制也被应用到了视窗系统、操作系统和文件系统中。
1 Java反射机制原理
反射是Java被认为是动态语言的一个非常重要的特性, 它允许动态发现和绑定类、方法、字段, 以及所有其他的由语言所产生的元素。也就是说, 这类应用通过采用某种机制来实现对自己行为的描述和监测, 并能根据自身行为的状态和结果, 调整或修改应用所描述行为的状态和相关的语义。
当前主流的计算反射原型系统大多是建立在元对象协议的体系结构上, Java语言的反射机制也是建立在这种体系结构之上。在Java反射系统中, 有一部分程序用来描述和计算问题域, 称之为应用程序 (application program) , 而有一部分程序专门用来表达和控制应用程序的计算行为, 称之为元程序 (meta program) , 即程序的程序。元程序在整个系统所处的层次称为元级 (meta-level) , 相应地, 直接执行应用功能的程序处于应用级或更通常地称为基础级 (base-level) 。简而言之, 基础级是人们所熟悉的普通应用程序对象所处的级别, 是用来描述计算系统所要解决的问题域的, 而元级则是描述和控制基础级计算行为的级别。其结构如图1所示。
这种层次结构, 使系统很好地模块化了, 使得元级和基础级分离。元级层对象和基础级层对象因果关联, 元级层对象的任何改变都被反射到基础级层对象。当一个对象被反射, 它的所有方法都被反射到相应的元级层对象。Java从JDK1.1版本开始增加了Java.lang.reflect程序包, 为用户提供访问元级的接口, 在JDK1.5中, 还引入了JMX (Java Management extend) 包来支持新型的对底层资源管理的反射。“Class”类是Java中一个十分特殊的类。它和其它类一样继承自“Object”类, 其对象用以表达Java程序运行时的类和接口, 它是Java反射机制的起源。针对任何想探查的类, 只有先为它产生一个“Class”对象, 接下来才能由这个“Class”对象调用其它的反射API。因此, 利用反射APIs动态地访问某个类要经过以下3个步骤: (1) 创建一个“Class”对象; (2) 利用创建的“Class”对象获得类的内部信息; (3) 利用java.1ang.reflect包中提供的反射APIs, 动态处理上一步获得的类的内部信息。
如何使用java.lang.reflect程序包中的反射APIs, 显示它们的威力, 我们下面通过实验来证明。
2 应用分析
动态替换一个处于运行状态的类是一个非常有挑战性的难题。这是Java的一个正在进行的研究领域, 要进行类替换要涉及到修改编译器或虚拟机或者二者都有之。尽管解决这个问题很困难, 在合适的环境下利用反射机制动态替换一个类还是可行的。下面的实例将实现动态替换一个正在运行的类。由于不能强引用类对象, 否则将无法实现类替换, 我们使用Proxy和Weak Reference来清除这个障碍。我们首先定义一个接口Operator, Operator接口使用Proxy类和类Operator EX类实现, 以达到隐藏正在运行类的信息。关键代码如下:
运行结果如图2所示。
反射使程序代码允许执行时能够接入装载到JVM中的类的内部信息, 而不是源代码中选定的类协作的代码。这使反射成为构建灵活的应用的主要工具。但需注意的是如果使用不当, 使用反射的成本会很高。安全和性能是两个重要的因素, 在处理反射时安全性是一个较复杂的问题, 但反射经常由框架型代码使用, 这样就无需考虑常规的接入限制。但是使用反射降低系统性能是不可避免的, 反射基本上是一种解释操作, 您可以告诉JVM希望做什么并且它满足您的要求。这类操作总是慢于直接执行的相同的操作。下面这个小程序就验证了使用反射调用比常规调用性能要差的多。部分代码如下:
运行结果如图3所示。
从运行结果可以看出, 反射调用比常规调用要花费几倍的时间。所以说, 反射最好在使用反射益处远远大于它造成性能低下的情况下再考虑使用它。
3 结束语
反射是Java语言的一种强大工具。它能够创建灵活的代码, 这些代码可以在运行时装配, 无需在组件之间进行源代表链接。虽然目前Java语言的标准版中已定义了反射接口和反射库, 但是只是实现简单的静态反射。Java语言的执行过程不同于其他的面向对象语言, 它的解释器有两部分:编译器和解释器。因而实现Java反射的方法引起了很多研究者的关注, 对于Java的反射研究一直在继续着, Spring, Hibernate等都是研究出来的基于反射的优秀框架, 在使用Java语言开发出灵活、低耦合、高重用的系统的过程中反射机制起到越来越关键的作用。
摘要:反射是提高Java程序的灵活性和可扩展性至关重要的技术, 它使得Java软件系统具有自适应能力, 实现程序的动态演进。阐述了Java反射机制的原理和工作过程, 并通过应用实例证明Java反射机制的强大威力和使用它应注意之处。
关键词:Java,反射,类替换,性能
参考文献
[1]Ira R.Forman, Nate Forman.Reflection In Action[M].America:Manning Publications Co., 2005.
[2]Christof Lutteroth, Gerald Weber, Reflection as a Principle for Better Usability[J].IEEE, 2007 (40) .
[3]王爱莉, 于林宇, 吕江花.面向反射程序设计方法[J].吉林大学学报 (信息科学版) , 2005 (5) .
[4]冯荣峰, 王建民, 孙家广.计算反射技术综述[J].计算机工程与应用, 2003 (27) .
[5]唐亚哲, 李增智, 张鹏.开放实现与计算反射技术综述[J].计算机科学, 2002 (2) .
Java聊天室制作 篇9
1引言
Java聊天室项目几乎可以覆盖Java的所用知识点, 例如Java数组、多线程、网络编程。而且, 对功能需求非常清楚, 可以直接进行开发。通过这个系统地练习, 可以系统地掌握Java技术。
2工作原理
要制作聊天室, 必须掌握它的工作原理。聊天室属于网络编程, 目前较为流行的网络编程模型是客户机/服务器 (C/S) 结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行, 监听网络端口, 一旦有客户请求, 就会启动一个服务线程来响应该客户, 同时自己继续监听服务端口, 使后来的客户也能及时得到服务。
聊天室编程采用TCP协议。TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输, 得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个Socket之间必须建立连接, 以便在TCP协议的基础上进行通信, 当一个Socket (通常都是Server Socket) 等待建立连接时, 另一个Socket可以要求进行连接, 一旦这两个Socket连接起来, 它们就可以进行双向数据传输, 双方都可以进行发送或接收操作。
3聊天室的制作
网络上的两个程序通过一个双向的通信连接实现数据的交换, 这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面, 一个Socket由一个IP地址和一个端口号唯一确定。
但是, Socket所支持的协议种类也不光TCP/IP一种, 因此两者之间是没有必然联系的。在Java环境下, Socket编程主要是指基于TCP/IP协议的网络编程。
3.1设计服务器和客户端的界面
为了简单起, 将服务器和客户端设计成相同的界面, 只是在界面的标题上进行区别。工作重点是实现二者的双向通信, 界面读者可以根据自己的需要进行修改。
客户端代码:
3.2实现服务器和客户端一对一的通信
界面编写完成后能够正常显示如图1, 图2所示, 但不能进行通信, 必须要加入网络编程的代码。这里先给出通信的界面, 以便帮助读者理解。
客户端代码:
3.3利用多线程实现服务器和客户端多对多的通信
上面的程序在界面程序的基础上, 加入了Socket编程部分, 实现了客户端和服务器端的单一通信, 但服务器不能接收多个客户端的信息, 也不能给多个客户端发送信息。因为服务器程序不支持多线程, 所以必须修改服务器和客户端程序使其都成为多线程类, 这样就可以实现客户端和服务器的多对多的通信。这里还是先给出两个客户端和服务器同时通信的界面, 方便读者理解, 如图5、图6、图7所示。
客户端代码:
4结语
Java反射机制的研究 篇10
Java反射机制指的是在Java程序运行状态中,对于任何一个类,都可以获得这个类的所有属性和方法;对于给定的一个对象,都能够调用它的任意一个属性和方法。这种动态获取类的内容以及动态调用对象的方法称为反射机制[1]。
Java的反射机制允许编程人员在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制。
二、Java反射机制的功能
2.1获得某个对象的属性。通过get Class()方法获得某个对象的类,然后实例化一个Field对象,接收类声明的属性,最后通过get()方法获得该属性的实例,注意,这里的属性必须为公有的,否则将会报illegal Access Exception的异常。
2.2获得某个类的静态属性。首先根据类名获得该类,同获得某个对象的属性一样,通过实例化一个Field对象,接收该类声明的属性,不同的是,由于属性是静态的,所以直接从类中获取[2]。
2.3执行某对象的方法。同样要先获得对象的类,然后配置类的数组,并把它作搜索方法的条件。通过get Method()方法,得到要执行的方法。
执行该invoke方法,该方法中执行的是owner对象中带有参数args的方法。返回值是一个对象。
2.4执行某个类的静态方法。基本的原理和“执行某个类的方法”相同,不同点在于method.invoke(null,args),这里的第一个参数是null,因为调用的是静态方法,所以不需要借助owner就能运行。
2.5新建类的实例。我们利用执行带参数的构造函数的方法来新建一个实例。如果不需要参数,可以直接使用newone Class.new Instance()来实现[3]。
同样要先得到要构造的实例的类,然后构造参数的类数组,构造器是通过get Constructor(args Class)得到的,最后使用new Instance(args)方法新建一个实例。
三、Java反射机制的特点
尽管反射机制带来了极大的灵活性及方便性,但反射也有缺点。反射机制的功能非常强大,但不能滥用。在能不使用反射完成时,尽量不要使用,原因有以下几点:
3.1性能问题。Java反射机制中包含了一些动态类型,所以Java虚拟机不能够对这些动态代码进行优化。因此,反射操作的效率要比正常操作效率低很多。我们应该避免在对性能要求很高的程序或经常被执行的代码中使用反射。而且,如何使用反射决定了性能的高低。如果它作为程序中较少运行的部分,性能将不会成为一个问题。
3.2安全限制。使用反射通常需要程序的运行没有安全方面的限制。如果一个程序对安全性提出要求,则最好不要使用反射。
3.3程序健壮性。反射允许代码执行一些通常不被允许的操作,所以使用反射有可能会导致意想不到的后果。反射代码破坏了Java程序结构的抽象性,所以当程序运行的平台发生变化的时候,由于抽象的逻辑结构不能被识别,代码产生的效果与之前会产生差异。
四、总结
Java的反射机制提供了一种动态链接程序组件的方法。它允许Java程序构建和控制所有类的对象,不再需要提前书写目标类。这些特性使得反射特别适合用普通方式创建的库。反射机制十分有用,它使得数据结构和类能够按名称动态检索,并允许在运行程序的同时操作这些信息。Java的这一特性是非常强大,并且是其它一些例如C语言,C++等所没有的。
在编程过程中,Java反射机制的应用十分广泛,使用反射机制能够提高系统的灵活性和可扩展性,而且能够通过加载外部插件,使得系统与插件解耦,同时使得功能的多样性得到提高。但反射机制不可避免地存在一些不足之处,因此,在实际开发过程中要根据项目需要,灵活地选择编码方法。
参考文献
[1]尹松强,傅鹂.Java反射机制探究[J].软件导刊,2008,11:85-87.
[2]王善发,吴道荣.Java语言的反射机制[J].保山学院学报,2011,05:32-36.
[3]丘志杰,罗蕾.嵌入式Java反射机制的设计与实现[J].计算机应用,2010,02:398-401+422.
Java多线程访问控制管理分析 篇11
关键词:Java;多线程;同步控制
中图分类号:TP312
1 Java多线程的基本控制
在Java中,一个线程从创建到死亡称为线程的一个生命周期,它的生命周期有多个不同状态,一般为:Enabled、Running、Sleeping、Joining、Waiting、Locking。对于线程的这些状态,Java在Thread类中定义了一些方法可以在程序中手动控制。要结束一个线程的运行,可以使用stop()方法。但是stop()方法并不是非常安全的,它会强制中止一个线程的运行,但是会释放这个线程锁住的所有对象,这些对象被解锁后就可能被其他的线程直接访问,导致错误的结果。因此,要中止一个线程,最好是设置一个标志位,在run()方法中根据这个标记来判断是否继续保持状态。要中止线程的时候,可以使用setRunFlag()方法。
在暂停和恢复线程执行时也会出现同样的问题。可以使用Thread类中supspend()和resume()方法來暂停和恢复,但不建议使用,它们容易造成线程的死锁。解决的方法也是使用一定的标志变量。使用setsuspendFlag(true)可以暂停线程的执行,暂停时间的指定是通过sleep()方法来实现,暂停结束就回到等待队列,不是恢复执行状态。所以sleep()方法不能精确控制线程计划工作的时间尺度。
下面用模拟一个龟兔接力跑的实例来演示Java多线程的sleep()方法的控制。模拟的接力跑中有一只乌龟和一只兔子。当兔子跑完400米将接力棒交给乌龟,乌龟跑完400米后结束。部分代码如下:
2 Java多线程的同步控制
多线程程序中,多个线程可以共享相同资源,这可能导致冲突。Java使用同步机制来解决这个问题。这个同步机制使用synchronized关键字,它主要用于多线程共享数据的同步,使用加锁的机制,控制变量或代码块在某个时间段只能被一个线程访问。
Java中synchronized既可作为方法的修饰符,锁住方法,也可在方法内部锁住部分语句。Synchronized方法和synchronized代码块在使用时是有区别的。将访问共享数据的方法加上synchronized,例如把synchronized当作方法修饰符:
Public synchronized void m1(){……}
这就是同步方法。当某个线程调用这个同步方法时,会开始执行直到完毕为止,其它想要调用这个方法的线程会进入阻塞状态,一直到这个方法获得释放为止。使用synchronized来修饰一个比较大的方法时,也会锁住其它一些不需要锁住的数据,导致程序效率下降。Synchronized块则是把方法内的某段代码使用synchronized来修饰,可以减少同步范围。例如:Public void m1(){ …… Synchronized(so){ …… }}
使用synchronized修饰时,就代表着同步机制启动,某个时刻只能某个线程访问数据和资源,阻止其它线程访问,这种状态即使出现阻塞和死锁现象也不会解除。
3 Java多线程的死锁问题
为了控制资源的访问冲突,需要使用synchronized对访问资源进行加锁,但加锁会带来一个潜在的危险:死锁。如果两个或两个以上的线程在等待两个或两个以上的锁被释放,但实际上这些锁根本就不会被解锁,那么这些线程就会进入无限等待的状态,称之为死锁。线程等待解锁的这种状态有时也被称作堵塞。死锁例子部分代码如下:
4 Java多线程的优先级
在多线程编程中要预防死锁的发生,不然死锁后会导致浪费大量时间和资源。防止死锁的方法很多,最重要的就是防止循环等待的发生。可以使用设置线程的优先级来解决这一问题。同一时刻会有很多在排队等待资源的线程,它们各自的重要性是不同的。可以赋予每个线程不同的优先级,让任务更急的线程获得更高的优先级,更快的进入执行状态。
Java中提供了10个等级的线程优先级,最低为1,最高为10,默认优先级为5。对于一个新创建的线程,如果没有指定优先级,它的优先级将和它的父线程优先级一致。使用setPriority()方法可以为线程指定优先级。
例如:int newPrio=Thread.currentThread( ).getPriority( )+1;
Thread.currentThread( ).setPriority(newPrio);
5 结束语
Java多线程编程可以合理的调用多项任务,功能非常强大。但是多线程共享数据或资源时会导致执行的错误,因此多线程访问控制管理机制在解决数据不一致性、资源冲突等问题时是非常有用的。高质量的使用Java多线程访问控制管理机制可以提高程序运行效率,缩短任务执行的时间。
参考文献:
[1]明日科技.Java从入门到精通(3版)[M].北京:清华大学出版社,2013.
[2]路勇.Java多线程同步问题分析[J].软件,2012(04):31-33.
作者简介:梁德华(1977-),男,江西瑞昌人,华中科技大学软件工程硕士,讲师,研究方向:软件工程、软件技术教学。
Java教学方法初探 篇12
关键词:Java课程,教学,学习兴趣
Java语言始创于1995年, 由美国的Sun公司创建。Java语言集中体现和充分利用了若干当代软件技术新成果, 从而成为一种跨平台、分布式、面向对象、多线程适用于网络应用的现代高级编程语言。现在, 在网络应用和手机应用方面, Java语言有了更广泛的应用, 因此, 在各高校都已开设了Java语言程序设计这门课程。但在实际的教学过程中, 因为学生的程序设计基础较差, 另外学习时间有限的原因, 造成了学生在学习Java程序设计时有一定的难度, 为此, 本文结合在实际的教学过程中的一些经验, 浅谈几点Java语言的教学方法。
1 学习兴趣的培养
对任何知识的学习过程中, 兴趣是最好的老师, 有没有兴趣, 将直接决定学生学习的动力, 最终决定学习效果。因此在教学中, 首先应该引起学生的学习兴趣, 以及在每节课或内容的讲解中, 都应先引起学生求知欲, 这样学生才能得到最好的学习效果。
目前, 在我们程序设计的教课书上, 第一章难免都是Java语言的发展以及特点, 但是对于我们第一次接触Java语言的学生而言, 他们根本就没有使用Java语言进行过编程, 他们怎么能理解所谓的那些特点以及和其它语言的区别呢?如果我们仍然按照书中的组织顺序来讲的话, 那么学生在第一节课都会对整个课程失去兴趣。因此对于Java语言的简介和特点。以及Java语言的基本语法等内容, 应该放在今后的实例化教学中, 再逐步去讲解, 而不应该单独的放在几节课内去讲解, 这些枯燥乏味的语法学习, 会让学生失去兴趣, 也体会不到Java语言和面向过程语言的区别, 更体会不到Java语言的优点。
所以在第一节课堂中, 我们应该通过一些有趣的实例, 让学生首先产生兴趣, 然后再让学生逐步明白面向对象程序设计的优点;
例如, 我们可以设计一个汽车运动的游戏, 我们将汽车用一类来实现。类中实现了汽车的启动、加速、减速、停止、运动等方法。让学生先通过演示看到了汽车的运动, 可以绕过障碍物等等情况, 引起学生的学习兴趣。然后再通过学生自已动手设计汽车行驶的道路, 例如设置障碍物, 然后看汽车能否自动绕过障碍物。引起学生的思考。汽车要绕过障碍物, 则必须有相应人的指令才能, 因此要想让汽车绕过障碍物, 则应给他指令。通过这种方式, 既引起了学生的学习兴趣, 也让学生明白了, 所谓编程就是给计算机下达相应的指令, 让计算机按照我们的指令进行工作, 就可以实现我们所需的功能。
实例化先果后因式教学
在现有的教材和教课书上, 其组织一般是先因后果, 先讲解原因, 再给出结果。这种教学的方式, 在实际教学中, 会让学生感觉什么都不知道, 什么都没有学会。
例如, 在讲解构造方法和方法时, 我们如果先讲解原因, 构造方法是和类名同名的一种特殊方法, 可以实现对类中一些成员变量的初始化等;这样学生在听了以后, 会有点云里雾里的感觉, 似懂非懂的。如果我们先通过一些实例, 先得出结果, 这样学生首先感到很困惑, 引发他们的求知欲, 然后, 我们再通过讲解, 构造方法和方法的不同点, 这样学生自然的就理解并掌握了这些知识点。
还有, 在讲解概念性的内容时, 学生很难理解, 例如private和public两个修饰符, 在类的内部使用这两个修饰符的区别, 如果我们直接讲出来, 他们是访问权限的问题时, 学生仍不会明白, 但是如果通过实例, 他们无看到无法直接访问用private修饰的方法时, 就明白了这两者之间的区别了。
因此在实际的教学中, 可以打乱教材的编写顺序, 采用实例化先因后果的教学方式, 可以得到良好的教学效果。
2 重编程思想而轻语法
现在很的计算机程序设计教材中, 都过多的注重于对程序设计语言语法的学习。其实对于一门程序设计语言来讲, 我们学习是它的编程思想, 语言是我们实现的工具。同样的程序, 我们可以用不同的语言去实现。相同的算法, 可以用不同的语言去实现, 但在实现的过程中, 可能会有执行效率和占用系统资源多少的不同。
对于学习Java, 我们不应把大量的课堂讲授放在它的语法上, 对于它的语法, 因为学生在其它语言的学习过程中, 已经有了一定的基础和认识。所以对于语法部分, 可以一带而过, 或者在程序的编写过程中, 让学生自己去查书, 或者简单的进行讲解。
实际教学中, 对于Java, 我们应把重点放在Java的特点上和优点上。Java是一种面向对象的程序设计。那么我们就应该利用大量的时间和实例, 去讲解什么是面向对象程序设计, 面向对象程序设计的方法是什么, 如何去实现等问题上。通过这些问题的讲解, 学生很快就可以从面向过程的程序设计中转变过来。从而也明白了面向对象程序设计的优点和特点。也掌握了面向对象程序设计思想的具体实现方法。
3 项目化教学
许多高校在java课程的教学上多采用单纯的任务驱动式教学模式, 这虽然在一定程度上调动了学生的学习积极性, 但从教学效果上来看, 采用这种教学模式仍存在有很多问题, 例如:⑴虽然教学中都有设计任务, 但任务简单, 一个任务只是针对一个知识点所设计的, 没有连贯性和整体性, 导致学生能利用基础语法知识写出功能简单的代码, 但在面向对象的程序设计部分所反映出来的是理论能明白, 实际编程却不知从哪里下手, 明显的表现出理论和实践脱节。⑵教学过程中没有项目规划等方面的设计概念, 在项目设计中更是无从下手, 个别学生可以编写少量代码, 但无法从整体上把握。⑶在教学过程中教师与学生之间的互动几乎没有, 学生在学习中真正参与其中的较少, 学习兴趣不浓, 从而投入的学习时间不多, 最后导致编程能力不强。
从这些情况可以看出, 简单的教学任务虽然能使学生很好的掌握每一个教学模块的知识, 但因为目前的教学中所给定的任务之间的联系较少, 以至于学生在对课程体系的整体掌握上和项目开发的整体性上仍无法将各个点融会贯通, 造成各个知识点之间的衔接上缺乏连贯性, 这与现实中问题的实际要求相差甚远, 学生当遇到问题时, 总是茫然不知所措。而社会培养急需的是具有一定创新精神和实践能力的“应用型”人才。只能应用一些基本的语法知识, 而不具有项目开发能力的学生是没有竞争能力的。
因此在JVAV教学中, 采用项目化教学比较适合于Java。
项目化的任务驱动教学模式, 是项目驱动和任务驱动相结合的教学模式, 是先设定一个合适的项目, 然后根据课程的内容将项目分为多个小的任务模块, 以每个任务模块为案例完成对应的教学内容。
此教学模式的优点:
(1) 项目虽然比一般性的任务有一定有难度, 但学生能在运用已有知识、技能的同时, 用学习到新的知识技能来解决过去从未遇到过的实际问题, 以此来培养学生自学的习惯。
(2) 将自选项目分解成一个个与案例相近的任务模块, 在教师的引导下, 学生完成相关任务模块, 并最终将一个个任务模块“组装”成一个完整的项目。这样, 能让学生在完成任务的同时对项目设计、规划等都有一个基本的思路。
(3) 这种方式使学习过程成为每个学生都参与的创造性实践活动, 在实践过程中理解和把握知识技能。要比单纯的任务驱动教学更能调动学生的学习积极性。
(4) 教学中所采用的项目是学生所熟悉的领域, 教学任务是按项目开发的步骤所给定, 并且教师给与指导。在学习的过程中能逐步熟悉项目开发的过程, 能很好地做到理论和实际相结合。
4 课后的辅导
教学的最终效果, 要靠实践来证明, 因此课后的作业, 无异是对学生对课堂讲授概念掌握程度的验证, 同时也是加强学生对概念理解的有力保障。因此设置相应的课后辅导时间是必须的, 但对于大学而言, 学生重多, 教师任务烦重。如何更有效的对学生进行辅导是一个大问题, 实行一对一辅导, 显然是不现实的。所以在实际的教学中, 我们可以发挥好学生的代表性。将学生进行分组, 对学习本课程较好的学生作为组长, 负责本组学生的作业收交和作业的辅导, 对于学生提出的问题, 如果组长不能进行解答, 则将所有的问题进行汇总, 然后由教师对所有组长提出来的问题进行辅导, 这样不仅减轻了教师的负担, 也给了各组组长一个学习的机会, 让他们更深的理解和掌握本课程。
5 结语
从实际教学中可以看出, 学生在学习一门课程时, 除了掌握本课程的知识外, 更注重的是学生对所学知识的应用。所以在教学中, 我们要深化教学目标, 培养学生的创新精神和实践能力, 促进不学生全面发展。
参考文献
[1]邹国霞, 唐建清.Java语言教学方法初探.
[2]包晖.基于任务驱动的Java教学模式研究.现代计算机:上下旬[M], 2013年第14期.
[3]时海亮, 兰岚, 汪远征.面向教学过程的Java教学研究与探索.中国电力教育, 中, 2013年第6期.
【Java】推荐阅读: