英语 虚拟语气

虚拟语气(SubjunctiveMood)是动词的一种特殊形式,用来表达说话人的愿望、请求、意图、建议、惊奇、设想等。下面从五个方面介绍虚拟语气的用法。

第一部分:语气的定义和种类

第二部分:简单句中的虚拟语气

第三部分:名词性从句中的虚拟语气

第四部分:条件句中的虚拟语气

第五部分:其他几种情况下的虚拟语气

第一部分:语气的定义和种类

1语气(mood):语气是动词的一种形式,表示说话人对某一行为或事情的看法和态度。

2语气的种类

⑴、陈述语气:表示动作或状态是现实的、确定的或符合事实的,用于陈述句、疑问句和某些感叹句。如:

①Therearetwosidestoeveryquestion.每个问题都有两个方面。

②Wereyoubusyalldayyesterday?昨天一整天你都很忙吗?

③Howgoodateachersheis!她是多好的一位老师啊!

⑵、祈使语气:表示说话人对对方的请求或命令。如:

①Neverbelateagain!再也不要迟到了。

②Don’tforgettoturnoffthelight.别忘了关灯。

⑶、虚拟语气:表示动作或状态不是客观存在的事实,而是说话人的主观愿望、假设或推测等。如:

①IfIwereabird,Icouldflyintheair.如果我是一只小鸟,我就能在空中飞行。

②IwishIcouldpasstheexamination.我希望我能通过考试。

③Mayyousucceed!祝您成功!

第二部分:简单句中的虚拟语气

一、情态动词的过去式用于现在时态时,表示说话人的谦虚、客气、有礼貌、或委婉的语气,常用于日常会话中。如:

⑴.Wouldyoubekindenoughtoshowmethewaytothepostoffice?请你告诉我去邮局的路好吗?

⑵.Itwouldbebetterforyounottostayuptoolate.你最好别熬夜到很晚。

二、表祝愿。

1、常用“may+动词原形表示祝愿,但愿,此时may须置于句首(多用于正式文体中)。

⑴、Maygoodluckbeyours!祝你好运!

⑵、Mayyoubehappy!祝你快乐!

⑶、Mayyoudoevenbetter!祝你取得更大成就!

⑷、Mayyouhaveagoodtime.祝愿你玩的痛快。

⑸、Maythefriendshipbetweenuslastlong.祝愿我们的友情天长地久。

⑹、Mayyoubehappy.(注意那个be)祝你幸福。

(7)Maytheworldbefilledwithlove!让世界充满爱!

2、用动词原形。例如:

(1).Longlivethepeople!人民万岁!

(2).“Godblessyou,”saidthepriest.牧师说:愿上帝保佑你!

(3).Haveagoodjourney!祝愿你旅途愉快!

三、表示强烈愿望。(该类型虚拟语气谓语仅用动词原形,第三人称单数也不加“s”

(1).Godsaveme.

(2).Heavenhelpus.

四、表命令

1.命令虚拟语气只能用在第二人称(you),而且通常省略主语(也就是you)

2.句子尾通常加上感叹号:!

3.虚拟语气动词用一般现在时态(SimplePresent),如:work,be,go

4.否定形式的命令语气,可用助动词do,加上not

(1).Work!

(2).Workharder!

(3).Bemorealert!(虚拟语气动词Be)

(4).Yougoout!

(5).Donotworksohard.(donot表示否定的虚拟语气)

(6).Don’tbeafraid.(口语中常用don’t代替donot)

五、在一些习惯表达中。如:

(1).You’dbettersetoffnow.你最好现在就出发。

(2).I’drathernottellyouthesecret.我情愿不告诉你这个秘密。 

第三部分:名词性从句中的虚拟语气

第一节:宾语从句(SubordinateClasue)中的虚拟语气

一、在动词wish后的宾语从句中的虚拟语气

在动词wish后的宾语从句中的虚拟语气,常省去宾语从句的引导词that.

一)、对现在情况的虚拟(与现在的事实相反):

从句用过去式或过去进行式(时间上是同时的)其句子结构为:宾语从句的谓语bewere(was),实义动词用过去式。例:

1.Iwish(that可省略,下同)Iknewtheanswertothequestion.(wish,动词过去式knew)我希望知道这个答案。(事实上是不知道)

2.Iwishitwerespringinmyhometownalltheyeararound.(wish,were)但愿我的家乡四季如春。(事实上不可能)

3.IwishIwereabird.(wish,were)但愿我是只小鸟。(事实上不可能)

4.Whenshewasattheparty,shewishedshewereathome.(wished,过去虚拟动词were)(事实上并不在家)

5.NowthatheisinChina,hewishesheunderstoodChinese.(wishes,过去虚拟动词understood)

现在他在中国,他希望能懂得中文。(事实上并不懂)

6.Whenwebeginthetrip,theywillwishtheywerewithus.(willwish,过去虚拟动词were)(事实上并不和我们在一起)

二)、对过去情况的虚拟(和过去的事实相反):

wish表示对过去事情的遗憾。其句子结构为:宾语从句的谓语用过去完成时,或would,could,might+现在完成时。例:

1.Iwish(that可省略,下同)Ihadn’twastedsomuchtime.

我后悔不该浪费这么多时间。(事实上已浪费了)

2.Hewisheshehadn’tlostthechance.

他真希望没有失去机会。(其实已失去)

3.Wewishedhehadspokentous.

(wished,had+spoken)(事实上他并没同我们讲)

4.Iwishyouhadcalledearlier.

(wish,had+called)(事实上已迟了)

5.Theywillwishtheyhadlistenedtoussooner.

(willwish,had+listened)(事实上并不如此)

例题分析:IwishI______longerthismorning,butIhadtogetupandcometoclass.

A.couldhaveslept

B.slept 

C.mighthaveslept

D.haveslept

动词wish后面接从句,表达不可能实现或与事实相反的情况时,谓语动词要用虚拟语气,即用过去式(表示现在发生的动作)或过去完成式(表示过去发生的动作)。本题后半句谓语动词have用的是过去时hadtogetupandcome,所以前面要用过去完成时表示过去发生的动作。所以,选项A)couldhaveslept是答案

三)、对将来情况的虚拟(表示将来的主观愿望)

从句动词"would/should/could/might+动词原形"(时间上较后)(请注意:主句和从句的主语不相同)。用wish表示对将来事情的愿望。例:

1.Iwishitwouldstopraining.(虚拟动词would+动词原形stop)

我希望雨能停止。(事实上雨还在下着呢)

2.Iwishyouwouldbequiet.(would+be)

我希望你安静一些。(事实上那家伙还在吵着呢)

3.Youwishedshewouldarrivethenextday.(would+arrive)

你希望她第二天会到。(事实上她还没到)

4.Iwishshewouldchangehermind.(would+change)

我希望她会改变主意。(呵呵,女孩子可没那么容易就改变主意喔)

5.Hewillwishwewouldjoinhimthefollowingweek.(would+join)

(只是希望我们和他在一起,实际上还没在一起)

四)、注意:

1.如果将wish改为过去式wished,其后that从句中的动词形式不变。例如:

IwishedIhadn’tspentsomuchmoney.我要是那时没有花掉那么多钱就好了。

2.如果that从句中用would,一般表示对现状不满或希望未来有所改变或请求

Iwishhewouldanswermyletter.

Iwishpriceswouldcomedown.

Iwishyouwouldhelpme.

Iwishyouwouldstopaskingsillyquestions.

二、在表示建议、命令、要求、忠告等动词的后面的宾语从句中的虚拟语气

由于这些动词本身隐含说话者的主观意见,认为某事应该或不应该怎样,这些词语后面的“that”从句应用虚拟语气,且均以“should+动词原形表示这种语气,但事实上“should”常被省略,故此从句中谓语动词用原形,常用的此类动词有:

表示要求的:ask,desire,request,demand,require,beg

表示提议、劝告、建议的:move,prpose,suggest,recommend,advise,vote

表示决定、命令的:decide,order

表示主张的:maintain,urge

表示同意、坚持的:consent,insist

例如:

1.Thedoctorsuggestedthathe(should)trytolosehisweight.

2.Heinsistedthatwe(should)tellhimthenews.

3.WhenIsuggestedthathetryshavingcream,hesaid,“Therazorandwaterdothejob.”(当我建议他用刮胡膏时,他说剃刀和水就行了)

4.HepursuedvarioustheoriesforseveraldaysuntilIsuggestedwetakethetoyaparttoseehowitdidwork.(他费了几天功夫寻找理论根据,直到我建议拆开看看它是如何转动的。)

5.OnecansuggestthatstudentsshouldspendtwoorthreeyearsinanEnglishspeakingcountry.(我们建议学生应在说英语的国家呆上两三年。)

在表示命令、建议、要求等一类动词后面的从句中虚拟语气很普遍,其结构如:

order,suggest,propose,require,demand,request,insist,command,insist+...(should)do

6.Isuggestthatwe(should)holdameetingnextweek.

7.Heinsistedthathe(should)besentthere.

注意:在insist后的从句中,如果是坚持自己,用陈述语气,坚持别人做什么事情,用虚拟语气.

8.sheinsiststhatsheisright.

9.sheinsistedthatIshouldfinishtheworkatonce.

或者说,suggest,insist不表示建议或坚持要某人做某事时,即它们用于其本意暗示、表明、坚持认为时,宾语从句用陈述语气。

10.Theguardatgateinsistedthateverybodyobeytherules. 

判断改错:

(错)11. Youpalefacesuggeststhatyou(should)beill.

(对)12. Yourpalefacesuggeststhatyouareill.

(错)13. Iinsistedthatyou(should)bewrong.

(对)14. Iinsistedthatyouwerewrong.

例题分析:15.Itispolitelyrequestedbythehotelmanagementthatradios______after11o’clockatnight.

A.werenotplayed

B.notbeplayed

C.nottoplay

D.didnotplay

全句意思是:旅馆管理部门恳请客人晚上11点后不要打开收音机。句中的谓语动词request(请求)所引出的从句应当用虚拟语气,即动词原形或“should+动词原形。本句的主语从句中,主语radio是谓语动词play的客体,谓语应当用被动语态。所以,答案是C)notbeplayed。在上述这类句子中不能用动词过去时形式表示虚拟语气,所以A)不正确。选项B)nottoplay是动词带to的不定式,不能在句中作谓语。选项D)didnotplay也是动词play的过去时形式,同样不能在本句中作为虚拟语气来使用。而且,它是主动语态形式,而本题要用被动语态。

活学活用:

16).Thechairmanrequestedthat.

Athemembersstudiedmorecarefullytheproblem

Btheproblemwasmorecarefulnesslystudied

Cwithmorecarefulnesstheproblemcouldbestudied

Dthemembersstudytheproblemmorecarefully

17).Thecommitteerecommendsthatthematteratthenextmeeting.

Awouldbediscussed

Bwillbediscussed

Cbediscussed

Dmaybediscussed

18).Thedoctorinsistedthathispatient.

Athathenotworktoohardforthreemonths

Btakeiteasyforthreemonths

Ctakingiteasyinsideofthreemonths

Dtotakesomevacationsforthreemonths

三、在expect,believe,think,suspect等动词的否定或疑问形式后的宾语从句中的虚拟语气

expect,believe,think,suspect等动词的否定或疑问形式后的宾语从句中,我们经常用“should+动词原形(或完成形式)”,表示惊奇,怀疑,不满等。

Ineverthoughtthatheshouldbesuchabraveyoungsoldier.

我们从来没想到他是个如此勇敢的小战士。

活学活用:

1)thatthetimewillsoonberipeforinterventioninIran,theywouldbefacedbyalargearmy?

AItisbelieved

BShouldtheybelieve

CTheywouldbelieve

DIftheywouldbelieve

2)IthinkitadvisablethatheforTokyosoon.

Awillleave

Bmayleave

Cleave

Dleaves

四、wouldratherwouldsoonerhadratherwould(just)assoonwouldprefer之后的宾语从句中的虚拟语气

wouldrather,wouldsooner,hadrather,would(just)assoon,wouldprefer(希望)也用来表达主观愿望,它们之后的宾语从句中需用虚拟语气。谓语动词用过去式表示现在或将来,用过去完成式表示与过去事实相反。表示宁愿做什么"对过去做的事的懊悔"

(1).Iwouldratherhecametomorrowthantoday.

(2).Johnwouldratherthatshehadnotgonetothepartyyesterdayevening.

(3).Don’tliveintheworld,Iwouldrather(Iwouldjustassoon)youdie.

(4).Iwouldratheryougotomorrow.

(5).Iwouldrathereverythinghadn’thappenedinthepast.

(6).Themanagerwouldratherhisdaughterdidnotworkinthesameoffice.经理宁愿她女儿不与他在同一间办公室工作。

(7).Tobefrank,I’dratheryouwerenotinvolvedinthecase.坦率地说,我希望你不要卷入这件事。

(8).Youdon’thavetobeinsuchahurry.Iwouldratheryouwentonbusinessfirst.你没有必要这么着急,我宁愿你先去上班。

(9).I’dratheryoudidn’tmakeanycommentontheissueforthetimebeing.我倒希望你暂时先不要就此事发表意见。

(10).Franklyspeaking,I’dratheryoudidn’tdoanythingaboutitforthetimebeing.坦白地说,我宁愿你现在对此事什么也不要做。

(11).Wouldn’tyouratheryourchildwenttobedearly?为什么你不愿让你的孩子早点上床呢?

(12).Iwouldjustassoonyouhadreturnedthebookyesterday.我真希望你昨天把这本书还了。

注:若某人愿自己做某事,wouldrather后用动词原形

Iwouldratherstayathometoday.

②wouldrather...than...中用动词原形

Iwouldratherstayathomethangoouttoday.

五、“hadhoped”后的宾语从句中的虚拟语气

“hadhoped”表示原来希望做到而实际上未能实现的事情,其宾语从句的谓语用“would+动词原形

IhadhopedthatshewouldgototheU.S.andstudythere,butshesaidshelikedtostayinChina.我原本希望她到美国去念书,但她说她喜欢留在中国。

第二节:主语从句中的虚拟语气

一、“Itis(was)+形容词(或过去分词)+that……”结构中的虚拟语气在形如“Itis(was)+形容词(或过去分词)+that……”结构中,使用某些表示愿望、建议、请求、命令、可能、适当、较好、迫切、紧近、重要等形容词后的主语从句的谓语也用虚拟语气。其表达形式为should+动词原形或省略should直接用动词原形(美国英语中省去should

常用的形容词:*natural(自然的),appropriate(适当的),advisable(合适的),preferable(更可取的),better(更好的)*necessary(必须的),important(重要的),imperative(急需的),urgent(急迫的),essential(本质的),vital(必不可少的)*probable(很可能的),possible(可能的)*desirable(极好的)advisable(合理的),compulsory(必须的),crucial(紧急的),desirable(理想的),essential(必要的),imperative(迫切的),incredible(惊人的),necessary(必要的),possible(可能的),strange(奇怪的),urgent(紧迫的)。

常用的过去分词(PastParticiple):*required(需要的),demanded(要求),requested(被请求的),desired(要求)*suggested(建议),recommended(推荐)*orderd(命令)

1.Itisnecessarythatwe(should可省略,下同)haveawalknow.(necessary,should+have)(表示有需要去散步)

2.Itwasnecessarythatwe(should)makeeverythingreadyaheadoftime.(necessary,should+make)(表示有必要事先做好准备)

3.Itisrequiredthatnobody(should)smokehere.(required,should+smoke)(表示要求不要在此抽烟)

4.Itisimportantthateverypupil(should)beabletounderstandtheruleofschool.(important,should+be)(表示重要的是学生都能了解校规)

5.It’simportantthatwe(should)takegoodcareofthepatient.(important,should+take)(表示重要的是照顾好病人)

6.Itisnaturalthatsheshoulddoso.(形容词natural,should+动词原形do)

7.Itisessentialthattheseapplicationformsbesentbackasearlyaspossible.这些申请表应尽早地寄回,这是很重要的。

8.Itisvitalthatenoughmoneybecollectedtofundtheproject.重要的是募集足够的钱,为这个项目提供资金。

9.Itisdesiredthatwe(shouldgeteverythingreadythisevening.希望我们今晚一切都准备就绪。

注:在上述所列形容词后面用that引出的宾语从句中,谓语动词也要用虚拟语气。

10.Idon’tthinkitadvisablethatTombeassignedtothejobsincehehasnoexperience.汤姆缺乏经验,指派他做这项工作我认为是不恰当的。

11.

二、在Itis+名词+that…的主语从句中的虚拟语气

Itis+名词+that的主语从句中,常用虚拟语气,表示建议、命令、请求、道歉、怀疑、惊奇等。这类名词

有:advicedecisiondesiredemandideamotionorderpitypreferenceproposalrecommendationrequirementresolutionshamesuggestionsurprisewishwonder等。

⑴、Itismyproposalthathebesenttostudyfurtherabroad.我建议派他去国外进一步学习。

第三节:虚拟语气用在表语从句或同位语从句中

当某些表示建议、请求、命令等主观意向的名词作主语时,其后的表语从句或同位语从句需用虚拟语气,其表达形式为should+动词原形或直接用动词原形。这类名词常见的有:

demand(要求),desire(请求),requirment(要求)

advice(劝告),recommendation(建议),suggestion(建议)

order(命令)

necessity(必要地),preference(优先)

proposal(计划),plan(计划),idea(办法)

recommendation以及planidearesolution等。

Weareallforyourproposalthatthediscussionbeputoff.我们都赞成你提出的将讨论延期的建议。

Thesuggestionthatthemayorpresenttheprizeswasacceptedby

everyone.由市长颁发奖金的建议被每个人接受。

⑴、Theadviceisthatwe(should可省略,下同)leaveatonce.

(名词adviceshould+leave)(表示加以劝告)

⑵、Myideaisthatwe(should)getmorepeopletoattendtheconference.

(idea,should+get)(表示做出主意)

⑶、Imakeaproposalthatwe(should)holdameetingnextweek.

(proposal,should+hold)(表示做出计划)

⑷、Thejudgeassentedtothesuggestionthat.

Abothofthecriminalswillsoonbesetfreedom

Bsomeofthecriminalsthereareofguiltonly

Cthegirlwastobeparoledinthecustodyofawelfaresociety

Dtheprisonerbesentencedtodeath

第四部分:条件句中的虚拟语气

(一) 表示与现在、过去、将来事实相反的假设

  1.与现在事实相反的假设。

  其句子结构为:

  从句:if+主语+动词的过去式(bewere+其他

  主句:主语+would(should,could,might)+动词原形+其他

  例:IfIwereyou,Iwouldgowithhim.

  2.与过去事实相反的假设。

  其句子结构为:

  从句:If+主语+过去完成时+其他

主句:主语+should(would,could,might)+现在完成时+其他。

例:Ifyouhadstudiedharderlastterm,youcouldhavepassedexam.

  3.表示对将来事实实现的可能性不大的假设。

  其句子结构为:

  从句:If+主语+should(wereto)+动词原形+其他

  主句:主语+would(could,should,might)+动词原形

  例:Ifheweretogotomorrow.Hemighttellyou.

(二) 从句和主句要根据各自发所生的时间选用符合具体时间的虚拟语气形式

  1.从句表示过去,主句表示现在。

  Iftheyhadstaredtheearlymorningyesterday,theywouldbeherenow.

  2.从句表示将来,主句表示过去。

IfIwerenottomakeapreparationformyexperimentthisafternoon,Iwouldhavegonetoseethefilmwithyoulastnight。

  3.从句表示过去,主句表示将来。

  Ifwehadn'tmadeadequatepreparations,weshouldn'tdaretodotheexperimentnextweek

  4.从句表示将来,主句表示现在。

Ifweshouldn'thaveanexamthisafternoon.Iwouldgoshoppingnow.

第五部分:其他几种情况下的虚拟语气
第一节:虚拟语气在asif/asthough引导的方式状语从句中的应用
虚拟语气在asif/asthough引导的方式状语从句中,谓语动词形式与wish后的宾语从句基本相同


1.表示与现在事实相反或对现在情况有怀疑,谓语动词用过去式。例如:
(1).Hefeltasifhealonewereresponsibleforwhathadhappened.他感到仿佛唯独他要对发生的一切负责。
(2).Heactsasifhewere/wasaTVexpert.他做起事来好象是个电视专家。
(3).AlantalkedaboutRomeasifhewereaRoman.艾伦谈起罗马来好像他是个罗马人一样。
(4).Johnpretendsasifhedidn'tknowthethingatall,butinfactheknowsitverywell.(用过去式表示与现在事实相反的假设)
(5).Hepretendsasifhedidn'tknowthethingatall,butinfactheknowsitverywell.(用过去式表示与现在事实相反的假设)他假装好象完全不懂那事,其实他对那事非常了解。

2.表示过去想象中的动作或情况,谓语动词用过去完成式。如:
(1).Thetreelookedasifit______foralongtime.
A.hasn'twatered    B.didn'twater
C.hadn'tbeewatered  D.wasn'twatered
那棵树看上去好象很久没人给浇水了。(答案是c
(2).Theoldmanlookedatthepicture,hefeltasthoughhehadgonebacktotime20yearsago.(用过去完成式表示与过去相反的事实)
(3).Theoldmanlookedatthepicture,hefeltasthoughhehadgonebacktotime20yearsago.(用过去完成式表示与过去相反的事实)那老人看着照片,他觉得仿佛回到20年前的时光。

3.表示与将来事实相反:
(1).Theytalkedandtalkedasiftheywouldnevermeetagain(would+动词原形,表示与将来事实相反)
(2).Theytalkedandtalkedasiftheywouldnevermeetagain.(would+原形动词meet,表示与将来事实相反)他们谈了又谈,仿佛他们不会再相见的样子。

:asif/asthough句中,如果有可能成为事实,用陈述语气.
Helooksasifheisgoingtobeill.

4.

第二节:虚拟语气用在lestforfearthatincase引导的目的状语从句中
在由lest等引导的目的状语从句中需用虚拟语气,表示以防,以免等意思,其谓语动词多由should+动词原形构成,should也可省略。
例如:
⑴、Hewaspunishedlestheshouldmakethesamemistakeagain.他被处以惩罚以免他再犯。
⑵、Themadmanwasputinthesoft-paddedcelllesthe_____himself.
a.injure  b.injured  c.hadinjure  d.wouldinjure
这个疯子被关进墙上装有衬垫的病房,以免伤了他自己。(答案是a

第三节:介词短语表示虚拟
有时假设的情况并不以条件从句表示出来,而是通过一个介词短语来表示,或通过上下文或其他方式表示出来。如butfor,butthat…,incaseof,otherwise,supposing,undermorefavourablecondition,without等表示让步假设。
1).Heworkedveryhard;otherwisehemighthavefailed.(他刻苦工作,不然他就失败了。)
2).Wecouldhavedonebetterundermorefavorableconditions.(假设我们有更有利条件,我们还会做得更好。)
3).Butforhishelp,I.
Ashouldnothavesucceeded
Bhadnotsucceeded
Cdidnotsucceed
Dhavenotsucceeded
4).Butthathecametohelpme,I.
Acouldnothavesucceeded
Bdidnotsucceed

Ccouldnotsucceed
Dcan’tbutsucceed
第四节:虚拟语气用在Itisabouthightimethat定语从句中
Itisabouthightimethat定语从句中需用虚拟语气,表示该做……的时候了,其动词形式用一般过去时或should+动词原形。
(1).It'salready5o'clocknow.Don'tyouthinkit'sabouttimewewenthome?现在已经5点钟了,你不认为我们应该回家了吗?
(2).Itisabouttimeyouwereinbed.
(3).Itishightimeweleft.
(4).ItisthefirsttimeIcamehere.
注:
1、在thisisthefirsttimesecondtimethat...句型中,从句中谓语动词用陈述语气完成时态。
例如:
IsthisthefirsttimethatyouhavevisitedHongkong?这是你第一次参观香港吗?
2、It'stimetodosomething有别于It'stimethat...

第五节:在ifonly引起的感叹句中需用虚拟语气
谓语动词用过去式或过去完成式(谓语动词与wish宾语从句的虚拟形式相同).
⑴、Ifonlyhedidn’tdrivesofast!(现在)
⑵、Ifonlyshehadaskedsomeone’sadvice.(过去)
⑶、Ifonlytherainwouldstop.(将来)
例题解析:
⑷、LookattheterriblesituationIamin!ifonlyI____youradvice.
A.follow  B.hadfollowed  C.wouldfollow  D.havefollowed
ifonly引出感叹句,意思是要是……多好,表示说话人的一种愿望,希望发生(事实上不可能发生)与过去事实相反的情况。本句的全句意思是:看我现在的处境多糟糕!要是我听从你的劝告多好。事实上,句中的没有听从劝告,所以处境很糟糕。
题中空格处应当用虚拟语气,答案是B

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1JAVA SE 1.1深入JAVA API 1.1.1Lang包 1.1.1.1String类和StringBuffer类 位于java.lang包中,这个包中的类使用时不用导入 String类一旦初始化就不可以改变,而stringbuffer则可以。它用于封装内容可变的字符串。它可以使用tostring()转换成string字符串。 String x=”a”+4+”c”编译时等效于String x=new StringBuffer().append(“a”).append(4).append(“c”).toString(); 字符串常量是一种特殊的匿名对象,String s1=”hello”;String s2=”hello”;则s1==s2;因为他们指向同一个匿名对象。 如果String s1=new String(“hello”);String s2=new String(“hello”);则s1!=s2; /*逐行读取键盘输入,直到输入为“bye”时,结束程序 注:对于回车换行,在windows下面,有'\r'和'\n'两个,而unix下面只有'\n',但是写程序的时候都要把他区分开*/ public class readline { public static void main(String args[]) { String strInfo=null; int pos=0; byte[] buf=new byte[1024];//定义一个数组,存放换行前的各个字符 int ch=0; //存放读入的字符 system.out.println(“Please input a string:”); while(true) { try { ch=System.in.read(); //该方法每次读入一个字节的内容到ch变量中。 } catch(Exception e) { } switch(ch) { case '\r': //回车时,不进行处理 break; case '\n': //换行时,将数组总的内容放进字符串中 strInfo=new String(buf,0,pos); //该方法将数组中从第0个开始,到第pos个结束存入字符串。 if(strInfo.equals("bye")) //如果该字符串内容为bye,则退出程序。 { return; } else //如果不为bye,则输出,并且竟pos置为0,准备下次存入。 { System.out.println(strInfo); pos=0; break; } default: buf[pos++]=(byte)ch; //如果不是回车,换行,则将读取的数据存入数组中。 } } } } String类的常用成员方法 1、构造方法: String(byte[] byte,int offset,int length);这个在上面已经用到。 2、equalsIgnoreCase:忽略大小写的比较,上例中如果您输入的是BYE,则不会退出,因为大小写不同,但是如果使用这个方法,则会退出。 3、indexOf(int ch);返回字符ch在字符串中首次出现的位置 4、substring(int benginIndex); 5、substring(int beginIndex,int endIndex); 返回字符串的子字符串,4返回从benginindex位置开始到结束的子字符串,5返回beginindex和endindex-1之间的子字符串。 基本数据类型包装类的作用是:将基本的数据类型包装成对象。因为有些方法不可以直接处理基本数据类型,只能处理对象,例如vector的add方法,参数就只能是对象。这时就需要使用他们的包装类将他们包装成对象。 例:在屏幕上打印出一个*组成的矩形,矩形的宽度和高度通过启动程序时传递给main()方法的参数指定。 public class testInteger { public static void main(String[] args) //main()的参数是string类型的数组,用来做为长,宽时,要转换成整型。 { int w=new Integer(args[0]).intValue(); int h=Integer.parseInt(args[1]); //int h=Integer.valueOf(args[1]).intValue(); //以上为三种将字符串转换成整形的方法。 for(int i=0;i<h;i++) { StringBuffer sb=new StringBuffer(); //使用stringbuffer,是因为它是可追加的。 for(int j=0;j<w;j++) { sb.append('*'); } System.out.println(sb.toString()); //在打印之前,要将stringbuffer转化为string类型。 } } } 比较下面两段代码的执行效率: (1)String sb=new String(); For(int j=0;j<w;j++) { Sb=sb+’*’; } (2) StringBuffer sb=new StringBuffer(); For(int j=0;j<w;j++) { Sb.append(‘*’); } (1)和(2)在运行结果上相同,但效率相差很多。 (1)在每一次循环中,都要先将string类型转换为stringbuffer类型,然后将‘*’追加进去,然后再调用tostring()方法,转换为string类型,效率很低。 (2)在没次循环中,都只是调用原来的那个stringbuffer对象,没有创建新的对象,所以效率比较高。 1.1.1.2System类与Runtime类 由于java不支持全局函数和全局变量,所以java设计者将一些与系统相关的重要函数和变量放在system类中。 我们不能直接创建runtime的实例,只能通过runtime.getruntime()静态方法来获得。 编程实例:在java程序中启动一个windows记事本程序的运行实例,并在该运行实例中打开该运行程序的源文件,启动的记事本程序5秒后关闭。 public class Property { public static void main(String[] args) { Process p=null; //java虚拟机启动的进程。 try { p=Runtime.getRuntime().exec("notepad.exe Property.java"); //启动记事本并且打开源文件。 Thread.sleep(5000); //持续5秒 p.destroy(); //关闭该进程 } catch(Exception ex) { ex.printStackTrace(); } } } 1.1.1.3Java语言中两种异常的差别 Java提供了两类主要的异常:runtime exception和checked exception。所有的checked exception是从java.lang.Exception类衍生出来的,而runtime exception则是从java.lang.RuntimeException或java.lang.Error类衍生出来的。    它们的不同之处表现在两方面:机制上和逻辑上。    一、机制上    它们在机制上的不同表现在两点:1.如何定义方法;2. 如何处理抛出的异常。请看下面CheckedException的定义:    public class CheckedException extends Exception    {    public CheckedException() {}    public CheckedException( String message )    {    super( message );    }    }    以及一个使用exception的例子:    public class ExceptionalClass    {    public void method1()    throws CheckedException    {     // ... throw new CheckedException( “...出错了“ );    }    public void method2( String arg )    {     if( arg == null )     {      throw new NullPointerException( “method2的参数arg是null!” );     }    }    public void method3() throws CheckedException    {     method1();    }    }    你可能已经注意到了,两个方法method1()和method2()都会抛出exception,可是只有method1()做了声明。另外,method3()本身并不会抛出exception,可是它却声明会抛出CheckedException。在向你解释之前,让我们先来看看这个类的main()方法:    public static void main( String[] args )    {    ExceptionalClass example = new ExceptionalClass();    try    {    example.method1();    example.method3();    }    catch( CheckedException ex ) { } example.method2( null );    }    在main()方法中,如果要调用method1(),你必须把这个调用放在try/catch程序块当中,因为它会抛出Checked exception。    相比之下,当你调用method2()时,则不需要把它放在try/catch程序块当中,因为它会抛出的exception不是checked exception,而是runtime exception。会抛出runtime exception的方法在定义时不必声明它会抛出exception。    现在,让我们再来看看method3()。它调用了method1()却没有把这个调用放在try/catch程序块当中。它是通过声明它会抛出method1()会抛出的exception来避免这样做的。它没有捕获这个exception,而是把它传递下去。实际上main()方法也可以这样做,通过声明它会抛出Checked exception来避免使用try/catch程序块(当然我们反对这种做法)。    小结一下:    * Runtime exceptions:    在定义方法时不需要声明会抛出runtime exception;    在调用这个方法时不需要捕获这个runtime exception;    runtime exception是从java.lang.RuntimeException或java.lang.Error类衍生出来的。    * Checked exceptions:    定义方法时必须声明所有可能会抛出的checked exception;    在调用这个方法时,必须捕获它的checked exception,不然就得把它的exception传递下去;    checked exception是从java.lang.Exception类衍生出来的。    二、逻辑上    从逻辑的角度来说,checked exceptions和runtime exception是有不同的使用目的的。checked exception用来指示一种调用方能够直接处理的异常情况。而runtime exception则用来指示一种调用方本身无法处理或恢复的程序错误。    checked exception迫使你捕获它并处理这种异常情况。以java.net.URL类的构建器(constructor)为例,它的每一个构建器都会抛出MalformedURLException。MalformedURLException就是一种checked exception。设想一下,你有一个简单的程序,用来提示用户输入一个URL,然后通过这个URL去下载一个网页。如果用户输入的URL有错误,构建器就会抛出一个exception。既然这个exception是checked exception,你的程序就可以捕获它并正确处理:比如说提示用户重新输入。 

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值