说来MC与东方元素交汇的相关内容作品也倒看到不少,或许就是因为其相似之处所致吧(笑
起点:游戏与“留白”
首先,毫无疑问的一点就是两个圈子发源的共有的两大特征:
都是起源于“游戏”这个载体。
游戏内容都有很大程度上的“留白”。
游戏载体自然不用多说,《Minecraft》本身就是Mojang Studio于2009年发布的一款沙盒游戏,而《东方》的起点也是源于ZUN在1996年发布的“打砖块”游戏《灵异传》,尽管被社群称为“黑历史”,但毫无疑问是梦的开始。
尽管两者游戏内容截然不同,但有个潜在的共同点给今后两者的社区发展打下了基础和前提,那便是:留白。这里所说的“留白”,放到两者上的表现形式并不同:
在《Minecraft》上所谓留白表现在游戏玩法本身的“自由性”,基于3D沙盒的多元玩法让《Minecraft》这款游戏经久不衰,开放式的玩法让游戏本身的游戏性有了大量留白,即使到MC发展十余年的今日这种玩法依旧不算过时;
而对于《东方Project》系列的游戏作品,所谓“留白”是体现在了对于游戏内角色的相关塑造,剧情等内容,这种“模糊化处理”给广大二创留下了极大的空间。在当时日本以丰富剧情CG为主要内容的视觉小说游戏(Galgame)盛行的年代,这种对于角色本身的“留白”无疑是东方二创盛行起来的重要因素之一。
无论形式如何,《MC》和《东方》无疑是刮起了一波热潮,两个无论从游戏性,发源以及历程看似毫不相关,但实际都引领了互联网一大热潮:社区创作。
无数人因一个契机汇聚在一起,以共同的名义进行奉献创作,这样的事情不管放在何时何地都将是人类历史上的一大壮举。
形成:社区与创作
MC是内容创作者主导的游戏。——Yanbing Zhao
东方Project系列经过二十余年的社群文化发展,如今,当我们在日常对话中使用“东方”这个名词时,含义已不仅限于指代由官方参与制作的游戏、出版物等内容。——东方Project - THBWiki
如上两段文字足以论证《MC》和《东方》不约而同的另一大特色:社区创作。可以说《MC》以及东方如今非凡的“扩展内容”绝非是由官方爆肝出来的,而是相关社区力尽心血创作出来的。官方推出的游戏是一张温床,而不懈在这张温床上为苗子浇水施肥的是社区,最终才能够茁壮成长为一颗参天大树。
不过虽说都为社区创作,但是MC和东方的社区创作的大致方向也是大相廷径的。
得益于《MC》本身游戏自由性的留白,《MC》这款游戏的社区创作绝大多数都围绕着游戏本身展开。无论是广大地图创作者制作的各类地图,还是各种材质皮肤,以及各式各样的附加Addons,mod,或是第三方服务器,再由服务器衍生出来的服务端,插件生态,甚至由这些基础内容进行再次整合创作的mod整合包,服务端等内容。或是一些视频创作,实况UP主,经验教程分享,甚至于独立动画等多媒体形式的创作。尽管形式各种各样,但毫无疑问的是这些内容都离不开游戏本身,或者说是离不开《Minecraft》这个“具象化载体”的本身。
而《东方》的相关创作则是得益于官方作品的“留白”。无论是对于角色本身设计的留白,还是游戏BGM没有填词的留白,甚至是游戏本身的游戏性上的留白,可谓是“见缝插针”,以各种方式进行创作。其主要形式以同人小说,漫画,音乐,视频,甚至游戏等多种多样的形式以“同人创作”的方式展现。这些内容可以基于官方的游戏或音乐,也可以完全独立原创,因此东方的创作并没有一个特定的立足点。为《东方》的某一个角色进行绘画,写小说,作曲也好,为《东方》这个载体进行独立创作动画,制作游戏也罢,均可算是《东方》的一部分。这些内容并没有一个具象化的立足点,多是零散的,以“东方”这一模糊的概念进行归统囊括。
简而言之,当我们说到《MC》的时候,可以断言《MC》是一款游戏,而放到《东方》上,这样的断言并不能成立。
举个例子:
如果你想要创作或体验其他人创作的地图,mod,服务器等,那你的前提条件就是要先拥有《Minecraft》这款游戏。而一些视频博主如果想做《Minecraft》相关的视频,博主本身也需要有《Minecraft》这款游戏,然后才会有相关视频的创作。为数不多的例外则是同人歌曲和动画,这些或许不用直接在《Minecraft》游戏本身上制作体验,但是制作的形式,内容,以及导向毫无疑问也是朝向《Minecraft》这款游戏的。
而东方则不同。对于东方相关内容的创作或体验,往往是更加直接的。比如我想画一个同人本,我需要用到的东西是纸和笔或者数位板,我不需要去刻意的买《东方》的原作游戏。我想听一个《东方》同人曲,只需要在播放软件里打开音频文件,确保没有静音喇叭没有坏掉就可以听到,同样不需要刻意去买官方的原作CD。甚至我想要玩一个同人制作的《东方》游戏也是一个道理。
简而言之,就单纯以创作形式的广度来看,《东方》的同人创作毫无疑问比起《MC》的相关创作更胜一筹。但20余年来《东方》的发展结果却和10余年的《MC》相比落差甚远:MC走向了“开放”,东方走向了“封闭”。
发展:开放与封闭
以上文所述,拥有广度更大的《东方》同人创作应该比《MC》的相关创作更加有发展空间,为何《MC》的圈子却越滚越大,而《东方》的圈子却逐渐没落呢?在五郎看来,归根于《MC》与《东方》的创作三大因素差距:门槛,受众及传播。
门槛
不可否认的一点是,《我的世界》基本创作门槛以及入门门槛确实很低。比如《MC》的地图创作,你可以拿基岩搭建一个正方体火柴盒,那便可以称作是一个“作品”。而这种创作门槛随着时间的迁移不断在降低,不少走过来的前辈总结的各类教程,编程设计的各种启动器,整合包,以及各类第三方辅助创作的工具,开服工具以及面板等等,无时无刻都在方便着《MC》的内容开发者们。而这些创作又得益于官方游戏本身的自由性使得创作内容与游戏本身相辅相成,“无限的可能性”被广大创作者在MC这个平台上以简单的 *** 作体现的淋漓尽致。
相比之下,《东方》的同人创作可以说是“难上加难”。不管是以何种形式进行同人创作,小说,漫画也好,视频,游戏也罢,都需要相当的创作功底,否则先不要说做的好不好,能不能做出来都是一个很大的问题。甚至于《东方》的一大内容:游戏本身的游玩入门门槛也是极大的。由《东方》系列发扬光大的d幕游戏本身就是一个玩法相对单一,并且极具挑战的一种游戏类型,以及后续推出的《绯想天》则等PVP类游戏也是如此。用看《JOJO》的话来说就是:喜欢的人贼上头,不喜欢的难入坑。
受众
《Minecraft》开发于2009年,当时国内互联网的发展已经逐步进入正轨,网民数量也随之激增。在“上网浪潮”的大背景下,借由各大诸如4399,游侠网等游戏平台的“转载发布”,再凭借着MC独特新奇的自由玩法,《Minecraft》在2010年就已风靡国内(主要受众为学生),同年建立起来的mcbbs也延续至今,成为如今国内最大《MC》社区论坛。《MC》通过简单易懂,扩展性高的玩法在全球收获了一大批忠实用户,在长期的发展下《MC》的内容也变得愈发高能,受众不仅于原先的“低龄用户”主要群体,一些成年人士也会游玩,甚至于当作一种职业去经营。
而东方的受众范围却没有《MC》那般广泛。首先东方发源于ACGN的亚文化领域,这对于受众本身就是一大限制。在早年ACGN在国内还被当作非主流文化的时候,《东方》作为ACGN圈内的现象级载体即使能够广泛传播,也很难破出这个圈子让不了解ACGN的人去接触。借用在《东方Project在模因层面的传播、融合与发展(上)》看到的“模因论”理论的说法,即若在了解到有关东方的信息(模因)有契合自己兴趣的点,进而激起去了解加入东方的欲望。但反过来说,若没有接触过东方相关的信息,或接触到的相关信息并不感兴趣,那么就很难入坑。尽管这点在MC也适用,但东方和MC有很大不同的一点就是“东方众”会刻意去控制对外人入圈的信息甄别,导致部分新人会感受到“排他”的情绪,同时因为东方本身多元的创作内容,不像MC那样有个明确的指标:“这就是游戏”,使得即使想要入圈的新人也会觉得无所适从。
传播
《Minecraft》这款游戏在我看来并没有投入过多的宣发成本,主要传播途径基本是以人传人的形式展开的。你会发现一个很有意思的现象:几乎所有在《MC》圈的创作者和玩家,都会本能的去笼络他人加入到《MC》这款游戏的圈子中。创作者通过发布作品来吸引其他玩家游玩,从而获得流量;玩家也会自发的去寻找有趣的作品和其他的朋友一起玩。在这种自发人传人的机制下《Minecraft》在短短数年就引发了一波波热潮。在《MC》刚起步的时候,也是国内互联网发展的一大热潮(2009-2012年)借由这波热潮《Minecraft》这款游戏成功在国内以“特殊渠道”的形式广泛流传开来,更为这款游戏的传播奠定了优秀的基础。
如果单论“人传人”这点的话,《东方》其实也是类似的。但在早期《东方》在国内的发展(2003-2012)并非一帆风顺。上网在那个时候是一件很奢侈的事情,并没有后面那么庞大的互联网用户基础,再加上《东方》在当时也是小众内容,在国内的互联网整治风波后因为诸多原因相关的网站也相继倒闭。在此之后,《东方》与《MC》很大一点不同的,也是在我看来《MC》圈和东方最为不同的点:《东方》的圈内人士对于主动传播这件事情有所克制,或者也可以说是消极对待。对于了解东方的人,会很自然的和其他了解《东方》的人谈开,但是对于完全不了解《东方》的人,自己不熟的人,并不会刻意去拉拢其“入教”,这和《MC》圈子的氛围是截然不同的(相当与一个好时代失之交臂)。其实对于这种现象在《东方Project在模因层面的传播、融合与发展(上)》中也有解释:
不过并不是我们对于东方模因的传播会得到理想的效应,一些时候我们会因为对于模因效应估计的不足而导致一些不愿意看到的事。比如无脑跟风刷“来生愿入幻想乡”等梗的现象,虽然这可能是一种表示东方圈认同感、归属感的行为,但在其他人看来,自己希望获取的模因被其他看来“低价值”的模因给干扰了,会从本能上产生抵触这种“低价值”模因的模因,而接触这类“低价值”模因越多,越能加强“抵触”模因的复制,形成了东方黑等人群。
——作者:Pak长 (点击跳转)
基于上述三点,《MC》圈在短短数年发展愈发庞大,而《东方》的相关内容尽管没有完全灭迹,但也固步自封,相比昔日的辉煌略显萧条。
但二者毫无疑问都是现象级的创作热潮,但也正因如此,也催生出部分无德不法之士借此来惹是生非。
乱象:是是与非非
林子大了什么鸟都有。这是我在《MC》圈亲历种种“乱象”后,自己说的,和听别人说的最多的一句俗语。这种乱象或许是必然的,《Minecraft》以及《东方》的活跃及大火的影响力不亚于《海贼王》里罗杰临死前说的那句“ONE PIECE”,在JUMP式热血少年漫画展开之余也不乏一些别有用心之徒在以不同的形式打着“ONE PIECE”的如意算盘。这些图谋不轨之徒,无疑给整个圈子带来了一次次沉重的打击。
还是先来谈谈《MC》吧。关于《Minecraft》这款游戏的“乱象”早已屡见不鲜:某些公司利用提供盗版MC赚取流量甚至盈利;某些人盗用其他开发者开发的资源加密包装进行转卖;某些人开MC私服利用盗版氪金的经典网游模式圈了一笔笔钱,甚至坑骗小学生“赞助数万元”还上了新闻。
在这里我想主要讲下最近在《如何从免费MOD中榨出真金白银?说说国内Minecraft圈子里的灰色产业链》这篇文章里看到的,看看我并不怎么熟悉的“MC Mod灰色产业链”:
MOD收费一直以来都是一个很敏感的话题,Steam上老滚5创意工坊宣告收费,玩家差点全面造反,此事至今余音绕梁。像Nexusmod这种专门集合大型游戏MOD的平台,也只是鼓励玩家为MOD作者捐款,如果作者想出售MOD就要另寻其他途径。
但是“某L”的行为是不一样的。首先从权益上来讲,他本身不是原开发者,充其量只是个爱好者。MOD从严格意义上来说,是属于对既有作品的二次创作,其版权归属无论如何也不会属于“某L”。即使他在MOD中进行了一些元素的添加,那么也仅仅是在“二次创作”基础上的“再次创作”,从任何一方面来说,拿免费的基础做收费的营生,也是匪夷所思。
但令人瞠目结舌的事情还在后面。“某L”不仅将免费的Pixelmon拿来贩售,竟然还将其根据数据库版本更新出不同的MOD版本,并且不同的版本要分割收费,甚至其本人还开了个淘宝店来光明正大的销售这个模组。
更匪夷所思的事情是,这个没有任何授权的改造MOD版本居然还卖得热火朝天。目前,这个MOD的销量已经突破了三位数,光是“某L”本人的客服群里都有一百多人。
根据五郎检索到的东方相关内容,发现类似的事情在东方也时有发生:
2007年2月7日,动漫渔场的网友们发现《凤凰花开》被盗版书商拿去印刷,还成为当时疯传一时的新闻,后来在2007年12月12日,在《风神祈禳 ~ Priests of Faith》即将发售之时,动漫渔场内部却围绕其作品定价问题展展开论战,最终,《风神祈禳 ~ Priests of Faith》的制作组U235 核燃动力与动漫渔场闹掰,脱离了动漫渔场,独立成组。
——东方求闻观测国内东方Project系列社区的发展历程(点击跳转)
东方创作里也有一些打破东方的同人创作规则的恶意创作(如300英雄里的东方角色,虽然以免费的名义,但实际上东方的角色是吸引东方玩家并氪金的原因之一,间接上成为了盈利产品)(或者像秋雨未央这种自东方萃梦想的改编曲目,但作者不承认和东方的关系,并因此进行盈利,属于盗用或剽窃行为),这类创作的目的是为了得到更多的物质利益,但对于其他遵守规则的创作者来说,则失去了创作的公平性,打击了创作热情。
——作者:Pak长(点击跳转)
为了“整治乱象”,作为官方的Mojang Studio和上海爱丽丝幻乐团分别推出了自己的“创作合约”:Minecraft Eula 与 东方Project使用规定案,作为“同人创作的红线”,以确保官方本身的利益不会被侵犯的同时起到一定的约束作用,以保证正常共享的创作者的权利。
但真正别有用心的人是不会在意这种徒有其表的“公约”的,也正因如此,《Minecraft》与《东方》走向了不同的道路:一个由官方“出卖”,一个由社区“自封”。
分歧:资本与社区
在“用爱发电”、“无私创作”的大环境下谈钱无疑是一个敏感话题,很不幸的是,《MC》与《东方》偌大的社区正是在“用爱发电”的环境下长大的。尽管早在《MC》发展初期在国外以单份售卖的形式卖的红红火火,尽管东方在日本的同人展上也可以售卖相关的同人志,成为一度佳谈,但那些终究是属于国外相关社区内的“美好”,并不属于那时的中国:当传播免费资源成为“盗版”,当用爱发电被人恶意营销,当幻想乡被恶人践踏后,宴席散了,梦醒了,属于现实的那片乌托邦也不复存在了。
或许自Minecraft卖给微软,mojang成为微软旗下工作室后,就注定MC这款游戏彻底接纳了资本渗进来的橄榄枝,而这也是《MC》官方选择的道路:投入资本的怀抱。对于Minecraft的创始人之一Notch来说,他可能并不那么在意把自己的游戏卖给谁,只是要能获得一大笔钱够他逍遥快活好一阵子的话,大概也无所谓了。说实话,如果把我放在Notch的立场上,我多半会做出和他一样的决定。所幸的是,微软并没有对《Minecraft》游戏本身做出过多的干预,挂了个名,推出了更多平台的《MC》,并保证《Minecraft》的稳步维护更新,再到最近的账户迁移。从玩家的角度来看明显是利大于弊的。
但对于蔑视版权、践踏微软利益的局面,微软做出了举动:将Minecraft中国区代理卖给中国的公司:网易。微软借着国内大头网易将国内《MC》原有的盗版生态一顿严惩,不得不说是一步好棋,既能借着网易的手摆平盗版乱象,又能通过代理费用收取本应从中国赚取的利润。
而对于《东方》而言,不管有没有资本向上海爱丽丝幻乐团伸向橄榄枝妄图包揽整个IP,至少迄今为止并没有看到过类似“东方被收购”的新闻与话题,不过就我看来以《东方》系列的特殊性,或许根本就没有被收购的可能性吧。倒不是说《东方》这个IP不值得被收购,只是东方本身的构成过于复杂,并不像《MC》那样有一个单纯的载体走向,所以即便是收购了,除了能以“东方官方”的名义做些什么,而《东方》除了东方众本身对官方,ZUN神主抱有应有的尊重外,实际官方出品的内容并不是东方社区的中心内容,所以好像也干不了其他特别的事情了。(如果企图像网易那样吞掉社区反而有可能被反噬)
正因如此,没有资本的庇护的东方众更加团结一心,选择凭借社区自净的力量来维护《东方》的社区发展。如上文多次提到“东方众”对于新人的态度很大程度上也是基于此展开的。倘若有人拿《东方》的题材违反合约甚至非法恰烂钱,大抵是要被东方众喷烂的。
也正因这样的分歧,导致《MC》圈和《东方》圈如今的给五郎的印象也大不相同。
如今《MC》圈整体给五郎的感觉就是:大,散,乱。尽管《MC》圈本身已经发展成了一个偌大的圈子,但是圈子内部事实上是由多个小圈子组成,并且这些小圈子之间并不和谐,甚至小圈子的内部如今也时有破事发生。拿《MC》的PVP圈举例,早在Java版18时期经由Hypixel等小游戏服务器的蓬勃发展,竞技类玩法也在国内茁壮起来。而这种“PVP圈”在被网易收购后却愈发糜烂黑暗,竞争攀比心不谈,一个比一个自我满足感强,动不动来个“中国第一触屏第一”,甚至网暴,成为了《MC》圈中最为灰暗的一个圈子。服务器圈子也时有动用网络攻击等手段进行要挟侵扰的行为。
而《东方》圈整体给五郎的感觉则是:小,精,聚。虽说不算为圈内人,但是以圈外人的角度来看,东方众虽小,却无孔不入。若是在随便一个群,社交网站发布东方有关的梗,话题,或视频的话,大抵是会出现一堆“越共探头”的。另外《东方》的同人创作也十分精致,无论是《东方》的同人动画也好(那玩意我觉得简直就是同人奇迹)还是《东方》的同人游戏,或是画师们以各种画风绘制的《东方》同人图,漫画,都令我不仅拍手叫好。《东方》的音乐也十分引人入胜,同人曲和官方曲都各有特色。另外东方众给人一种十分“团结”的印象,这种团结一般的默契不仅仅是在“越共探头”上能够体现,在对新人的“筛选”行为上,对于不同形式的《东方》同人创作不约而同的赞美,以及对于借《东方》生乱象的重拳出击,无不能体现他们的聚合力。
结语
资本的不断涌入,对于创作者们来说自然是一个利好的事情,创作会在原有爱好的基础上,为自己带来更大的价值,对于相关作品的相关作品的爱好者来说,更多的同人作品是一件值得自豪的事情。
但这种趋势真的好吗?比起文化的深度、内涵,热门作品们更加的快餐化,卖点上激发生理冲动的软色情元素愈加常态化,人设的重要性盖过了作品营造的故事本身,重视用户粘滞性而不再重视用户忠臣性,以消费玩家为目的的营销手段,使得整个圈子变得愈加浮躁。
——东方Project在模因层面的传播、融合与发展(下)
说实话,两个圈子相似却又相离的形成与发展,从长远来看我并不知道谁是谁非,但就目前而言,我讨厌被资本捣毁的“用爱发电”,讨厌被资本扭曲的创作目标。我对于《东方》的兴趣并不亚于当初我对《MC》的兴趣,但我的水平还远远没有达到火候,想要创作《东方》相关的同人曲,那种在睡觉的时候也能听的安静恬静的东方钢琴曲,也算是我的一大目标了吧。
硬要说的话,我可能已经开始疏离《Minecraft》这款游戏了。或许是因为投入太多,回报太少;或许是因为处处碰壁,处处不讨好;被人厌恶久了,自然想缩到一个角落,一个人清静清静了罢。
但不管怎么说,我喜爱东方这个ACG文化,喜爱《Minecraft》曾给我带来的点点滴滴,或欢笑,或泪水。尽管天下没有不散的宴席,但求这些回忆会被完好的保留在不知何方的,幻想乡。JAVA和C++都是面向对象语言。也就是说,它们都能够实现面向对象思想(封装,继乘,多态)。而由于c++为了照顾大量的C语言使用者,而兼容了C,使得自身仅仅成为了带类的C语言,多多少少影响了其面向对象的彻底性!JAVA则是完全的面向对象语言,它句法更清晰,规模更小,更易学。它是在对多种程序设计语言进行了深入细致研究的基础上,摒弃了其他语言的不足之处,从根本上解决了c++的固有缺陷。
Java和c++的相似之处多于不同之处,但两种语言有几处主要的不同使得Java更容易学习,并且编程环境更为简单。
我在这里不能完全列出不同之处,仅列出比较显著的区别:
1.指针
JAVA语言让编程者无法找到指针来直接访问内存无指针,并且增添了自动的内存管理功能,从而有效地防止了c/c++语言中指针 *** 作失误,如野指针所造成的系统崩溃。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
2.多重继承
c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便。
3.数据类型及类
Java是完全面向对象的语言,所有函数和变量都必须是类的一部分。除了基本数据类型之外,其余的都作为类对象,包括数组。对象将数据和方法结合起来,把它们封装在类中,这样每个对象都可实现自己的特点和行为。而c++允许将函数和变量定义为全局的。此外,Java中取消了c/c++中的结构和联合,消除了不必要的麻烦。
4.自动内存管理
Java程序中所有的对象都是用new *** 作符建立在内存堆栈上,这个 *** 作符类似于c++的new *** 作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:
Read r=new Read();
rwork();
语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收 *** 作,不需要程序员进行删除。而c十十中必须由程序员释放内存资源,增加了程序设计者的负担。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。JAVA里无用内存回收程序是以线程方式在后台运行的,利用空闲时间工作。
5. *** 作符重载
Java不支持 *** 作符重载。 *** 作符重载被认为是c十十的突出特征,在Java中虽然类大体上可以实现这样的功能,但 *** 作符重载的方便性仍然丢失了不少。Java语言不支持 *** 作符重载是为了保持Java语言尽可能简单。
6.预处理功能
Java不支持预处理功能。c/c十十在编译过程中都有一个预编泽阶段,即众所周知的预处理器。预处理器为开发人员提供了方便,但增加了编译的复杂性。JAVA虚拟机没有预处理器,但它提供的引入语句(import)与c十十预处理器的功能类似。
7 Java不支持缺省函数参数,而c十十支持
在c中,代码组织在函数中,函数可以访问程序的全局变量。c十十增加了类,提供了类算法,该算法是与类相连的函数,c十十类方法与Java类方法十分相似,然而,由于c十十仍然支持c,所以不能阻止c十十开发人员使用函数,结果函数和方法混合使用使得程序比较混乱。
Java没有函数,作为一个比c十十更纯的面向对象的语言,Java强迫开发人员把所有例行程序包括在类中,事实上,用方法实现例行程序可激励开发人员更好地组织编码。
8 字符串
c和c十十不支持字符串变量,在c和c十十程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(string和stringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
(2)J3阳字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
(3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
(4)可对字符串用“十”进行连接 *** 作。
9“goto语句
“可怕”的goto语句是c和c++的“遗物”,它是该语言技术上的合法部分,引用goto语句引起了程序结构的混乱,不易理解,goto语句子要用于无条件转移子程序和多结构分支技术。鉴于以广理由,Java不提供goto语句,它虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。
l0.类型转换
在c和c十十中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c十十中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c十十中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
11异常
JAVA中的异常机制用于捕获例外事件,增强系统容错能力
try{//可能产生例外的代码
}catch(exceptionType name){
//处理
}
其中exceptionType表示异常类型。而C++则没有如此方便的机制。
附:
Java群体每天都在扩大,它既包括一些世界最大的ISV,也包括公司CIO、信息技术人员、系统分析人员、C/S开发人员、编程人员、多媒体设计者、市场行销人员、教育工作者、经理、影视生产者甚至业余爱好者等广泛的用户。从传统上看,这样一些人在一起有效地工作是不多见的。当我们谈到开放系统时,我们往往是就已发表的API及规格,或者源码的可得性,或者硬件、联网及 *** 作系统而言的,没有一个人是从人的开放意义上来谈的。Java完成了开放系统的闭合链。它开发了人力资源,而反过来又开辟了共同工作的道路。
一谈到Java,人们马上会想起一种类似于C++的、适用于分布环境的面向对象编程语言,想到这种语言的简单、稳定、安全、与体系结构无关、可移植、可解释、高性能、多线程和动态性等特征。这些都是Java作为一种程序设计语言的主要特征。
Java是由Sun公司的一个技术小组研制出来的。在实现Java语言的过程中,Sun小组的技术人员很快就意识到:C++无法成为一种完全面向对象的、网络化的开发语言。C++是通过给原先的C语言增加面向对象功能而开发出来的,因此,它存在着先天不足。这主要体现在C++种类繁多,功能大量冗余,同时又没有任何一种C++编译器能够支持它的全部功能。鉴于这种情况,Sun公司的技术人员决定不扩充C++,而开发一种全新的计算机语言(Java的前身Oak)。但是,C++已经成了大多数编程人员所熟练掌握的语言,Java的设计显然不能无视这个现实。如果Java和C++之间的差别过大,那么程序员们在学会这种语言的过程中无疑要花费大量的时间和精力。因此,Java保留了尽可能多的C++风格。
Java自诞生起,为网络用户创造了无数客户端的小应用程序,由于这类应用程序效果良好、数量巨大,以至于许多用户想到Java编程语言时,会在脑海中出现一个不完全正确的印象-Java是用来编写小的客户端程序的。其实,随着技术的进步,Java语言正在逐步改变自己执行效率较低、无法担任企业关键计算任务的形象,不断向计算技术的核心地带前进。今天的Java技术正沿着网络渗入各个应用领域。
企业计算:企业计算是Java最重要的技术主题。Sun公司已经公布了企业JavaBean(EJB,Enterprise JavaBean)的规格,随后众多公司开始开发企业应用领域的Java技术。IBM公司也已经为Windows NT开发了IBM HPCJ(High Performance Compiler for Java)120版,同时研制了IBM JDK(JavaDevelopment Kit)for Windows NT,Novell公司也在宣布了一个新的服务器端的企业Java平台,而Sun公司也在积极地升级自己的JDK系统,这个形势表明,Java正在稳步走向企业高端计算。对于Java来说,与其它编程语言争夺企业计算主力编程工具的优势在于:其一,Java在进行面向对象的编程工作时,比其它的编程语言如C++更加简单,因此保证了编程的高效率,减少了编程投入;其二,Java虚拟机技术所提供的"一次编程,到处使用"的跨平台能力非常适合网络环境,这给Java在网络服务器端的发展提供了便利条件;其三,Java拥有强大的提供商和支持者队伍,该队伍包括IBM、Oracle、Novell、Sybase和Netscape等公司。
提速运行:许多企业的应用开发人员非常喜爱Java的语言特性,但是在开发重要系统时,语言特性和执行效率之间的抉择往往令人伤透脑筋。在关键计算中,用户可能并不在乎数据如何压缩或者运行的延迟关系如何设置,但是对程序的运行速度却非常重视,这使厂商将Java的编译策略开发放在了首位。现在的Java语言,其执行方式已经不仅仅是解释执行方式了,即时编译器(JITC、just-in-time compiler)技术和原型编译技术已经被许多厂家采用,包括Sun、IBM、Oracle以及Netscape等公司在内的技术提供商正在利用这些技术逐步提高Java的执行速度,其中IBM公司早已将Java虚拟机(JVM,JavaVirtual Machine)、 *** 作系统和硬件的特性有机的结合在一起,非常有效地提高了Java的执行效率。
嵌入计算:嵌入式Java是一个潜力巨大的应用技术,该技术充分发挥了Java小巧灵活的特点。以HP公司为例,该公司以自己的方式制造编译工具和Java虚拟机,其目的是将Java嵌入各种设备,如打印机、医学监视器和自动提款机等。嵌入设备依靠一个实时 *** 作系统来处理某一个实时生效的事件,Java被嵌入这些设备后,通过实时扩展(real-time extension)开始发挥作用,使设备具备了一定的智能性,增强了嵌入设备的可管理性和可用性,大大提高了设备的工作效率。各厂商对这一潜力巨大的市场都非常重视,目前该市场缺乏的是一个标准,如果存在标准的话,相信很快就会有大量使用嵌入Java技术的设备上市。
微软刚刚发行的Windows XP放弃了对Java的支持,但Java能够独立运行于很多 *** 作平台上,其中也包括Linux,并且在某些特性上要比在Windows上发挥得更好,我们完全有理由抛弃Windows而选择使用Linux来做Java开发。现在,你可以左手拿着Linux,右手拿着Java,然后对面带微笑手里拿着Windows XP的Bill Gates说:"让你的XP去见鬼吧!"
对于软件开发者来讲,任何一种编程语言都不可能是完美的。如果希望更好地理解Java语言,最好的方法是把这种语言与其同类型的语言相比较。既然Java类似于C++,把它同C++进行一番比较也是顺理成章的事情,哪一个好,哪一个不好,每个开发人员都有各自的看法。我个人认为Java开发要比C++好一些。当然每个人的看法和喜好是不同的。后面的文章将向大家介绍Java和C++的不同和对其的改进。孰强孰弱,大家自然就会明白了。
我们知道,Java一开始采用C++的语法格式,基本上是为了让程序设计者可以很快地熟悉 Java的语法格式,缩短学习Java的时间,毕竟C和C++仍旧是最多人会的一种程序语言。但是如果我们仔细检查Java程序语言的许多细节设计,我们可以发现Java去掉了不少C++的特点,并且加入一些新的特性。这些与C++的差异包括:
1不再有#define、#include等预处理程序(Preprocessor)的功能
C++语言很重要的一个特点就是它的预处理程序。有些其他程序语言虽然也加入了#include的功能,但是还是欠缺处理宏(Macro)的能力。#define的功能在Java中我们可以用定义常数(constant)的方式来取代,而#include在Java中是不需要的,因为在Java中程序在执行时,会把类型数据记录在对象实体之中,我们不需要靠一些标头文件(header file)来知道我们使用的对象或数值是属于什么数据类型。
如果你使用C++语言时,只使用预处理程序的#include和#define功能的话,那么你大概不会觉得Java这样的设计对你产生什么样的困扰,但是如果你是使用C++语言预处理程序中宏功能的高手,你可能会觉得很不方便,进而怀疑Java如此设计的意义何在。
使用预处理程序虽然可以很方便地达到许多功能,但是站在软件工程的角度上看,对整个软件的维护其实是很不利的。由于C++语言中预处理程序的功能太过强大,厉害的程序设计高手常会自行开发一套只有自己看的懂的宏语言,一旦整个软件要交给其他人去维护,后继者很难在短时间内了解前一个人所写下的宏功能,增加软件开发时团队工作及日后维护的困难度。
另外一点则是C++语言的编译器所看到的程序代码,其实和程序设计者看到的程序代码是不同的。程序设计者看到的是尚未经过预处理程序处理过的程序代码,而编译器看到的则是预处理程序处理过的程序代码,一旦交给预处理程序处理的宏内容有误,编译器产生的错误信息将不会是程序设计师所预料的。而这一点自然也增加了程序在排错时的困难度。
预处理程序的存在也造成了阅读程序的不便。如果你想使用别人已经完成的C++语言程序,那么通常你不但要阅读他所写下的文件,还必须一并查阅上文件,才能了解其程序的全貌。如果换成是Java程序,只要查看java的程序文件就够了。
2不再有structure、union及typedef
事实上,早在C++中就可以去掉C语言中的structure和union等对复杂数据的自定结构类型,因为类(Class)的定义方式可以完全做到这项功能。而typedef也是不必要的,一切都用类就可以了。虽然C++这样的设计是为了和C语言兼容,但是使用多余的语言特点不但不必要,而且容易造成对程序认识的混淆。
3不再有函数
在Java程序语言中,去掉了程序向导语言中最重要的单元--函数(Function)。如果我们以对象向导的观念来看待函数,就可以了解函数在对象向导的概念中,是不必要的。在对象向导的程序观念里,对象的数据才是真正的主体,而处理对象数据的方法则必须依附在对象内才有意义。因此,去掉函数并不表示不再有子程序等模组化程 序的概念,相反地,是利用对象中的方法来取代函数,再一次强化对向导的发展策略。
4不再有多重继承(Multiplelnheritance)
在C++中,多重继承是一项很强的功能,但也是一般人难以掌控的部分。去掉多重继承虽然降低了Java语言的功能,但是也大幅简化撰写程序时的困难度。虽然移除了多重继承的功能,但是Java提供了interface的方式,可以达到部分多重继承的功用。所谓的interface基本上定义了一个类的对外沟通的方法原型,以及类内部的常 数,和多重继承不同之处在于interface并不会定义类方法的内容,以及类中的变量数据。
5不再有Goto
在程序语言的发展史上,Goto一直是毁誉参半的一项功能。在很多时候使用Goto可以大幅减少不必要的程序代码,但是也由于Goto可以很自由地改变程序的流程,如果冒然地使用,更可能造成程序结构混乱的情况。一般来说,正确使用Goto的例子多出现在循环内部,想要提早结束某一层循环。在C语言中,我们可以使用break 或contine来改变某一层循环的流程, 但如果想要改变两层以上的环执行流程,不是使用Goto就是以多余的布尔(boolean)变量,配合上一串if-then-else的判断来达成。
Java一方面移除了Goto的功能, 而另一方面同时扩大了break和continue的功能,可以允许多层循环的break或continue。如此一来不但避免了滥用Goto的可能性,同时也保存下Goto的好处。
6不再有OperatorOverloading
在C++中,Operator Overloading同样也是一项值得讨论的设计。几乎在所有C++的书中,都会引用一些例子,告诉你使用OperatorOverloading可以使你的程序看起来更为自然。如下面是一个程序设计师自定义的复数类:
//C++中自定义的复数类及0pemtor Overloading
class Complex{
public:
Complex(double real,double image){
Real_number=real;
Image_number=image;
}
Complex operator+(Complex&rhs){
Return Complex(rhs.real_number+real_number,
rhs.image_number+image_,nulnbef);
}
private:
doublereal_number //实部
doublejmage_nunmber; //虚部
}
在这里,如果你使用+来作为复数的加法符号,大家都不会有疑义,但是如果你使用的是或》这样的符号,那么别人看到你的程序之后,难保不会产生认识上的错误。这也是Operator Overloading一大问题,当大家都对运算符赋予自己的定义后,整个程序的可读性就会大受影响。Operator Overloading的存在并不是必要的,我们一样可以定义类中的方法来达到同样的目的,至于Java去掉这项功能的利弊,恐怕就要读者自己去评断了。
7取消自动类型转换
Java是一个严格进行类型检查的程序语言,对于下面这样的程序,在C++的编译器上编译时最多只会出现警告的信息,但是在Java里则不予通过:
Int aInteger; Double aDouble=271828; AInteger = aDouble;
虽然这样的转型在C++里是合法的,但是也会造成数据精确度的损失。Java为了要确定写程序的人充分地了解这点,必须要程序设计强制转型(type casting),Java的编译器才会接受:
int aInteger;
doublea Double=271828;
aInteger=(int)aDouble;
8不再有指针
取消指针(Pointer)这样数据类型,可能会让许多熟悉C++语言的程序设计师大吃一惊。在C++语言里,灵活地运用指针是许多程序设计师的得意之作,但是占整个除错时间最久的也是指针的问题。配合上C++对内存管理的态度,程序设计师必须要自己去追踪自己向系统要到的内存,最后确实地交还给系统,并且在使用指针时,要小心翼翼地注意不要跨过合法的记忆空间,造成Segmentation Fault或General Protection Fault之类的问题。
Java去掉了指针类型,并不表示程序设计师在开发高级数据结构,像堆栈(stack)、 队列(queue)、二元树(binarytree)时,都必须要像在传统Basic上,利用大范围的数组来自行模拟系统内存,自行建构类似指针的表示方式。
相反地,Java提供了和Lisp语言中相似的Reference类型,通过Reference去读取配置到的内存内容,可以确保不会去读取到不属于自己的内存空间,而另一方面,程序的执行系统也可以动态地去做内存垃圾回收的工作,将没有被reference参考到的内存空间回收给系统使用。
9和C++连接
不管Java是多么强大,总是有人需要把它和C++连接起来。因为只要有一个新的程序语言或是软件开发工具一出现,大家就会问:"它是否具有和原有程序库连接的能力呢"也因为C++语言在电脑界中占了很重要的地位。大家的问题其实就等于是直接问"它是否可以和C++连接"。目前在Java中,的确提供了和C++语言连接的方法,它的做法基本上是先将C++语言所写的程序建构成动态链接函数库(DynamicLinking Library,DLL),再由Java程序去调用DLL里的函数。
这种连接的方式,使得DLL中的函数,从Java的眼光看就是一个"方法"。不过因为这种方法是直接由其他的程序语言所提供,而不是以Java语言所写的,所以它被称之为"原生方法"(NativeMethod)。
由于Java Applet一些安全上的限制,所以这种连接外部程序的方法只能用在Java Application内。
小结:
事实上,constant和typedef这两条语句包含了#define语句的作用。现在,结构和联合已经被Java的类所代替。删除这些特性的原因是:由于其希望维持与C语言的向后兼容性,C ++的语言规范包含了大量冗余。比如,类实际上就已经包括了结构和联合的作用,因此这两种数据结构完全可以取消。关于#define语句,Java语言规范的制订者认为:尽管该语句的出发点是为了增强程序的可读性,但实际效果却恰恰相反,它常常导致难读的代码,故应该予以取消。Java不再支持独立函数,因此任何函数都必须封装到某个类中。由于人们普遍认为, C++所用的超类是非常不稳定的,因此Java抛弃了C++中的多继承并代之以接口。Java的接口指的是,在别的类看来一个类所能实现的方法。它所显示的只是一个类的方法或常量和变量 ,而不是这个类的全部结构。
最后,Java还取消了C++中的GOTO语句、 *** 作符重载、自动类型转换及指针数据类型。 GOTO语句引起的争议已经有很多年了,可一直阴魂不散,这跟某些程序员对该语句一直情有独钟有关。C++仍然支持数据类型的自动转换,但Java要求编程人员显式实现数据类型之间的转换。自动数据类型转换使得两个数据类型互不兼容的变量可以相互赋值,而不需要给出显式说明。这有时会导致一些问题,其中最常见的是精确度损失。比方说,如果把一个带符号的32位整数赋给一个无符号整数,则所有的结果均为正数。Java的设计者们认为这很容易引起程序错误,从而决定不支持这种转换方式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)