仓酷云
标题:
JAVA网页设计C#、Java之对照
[打印本页]
作者:
兰色精灵
时间:
2015-1-18 11:55
标题:
JAVA网页设计C#、Java之对照
C#是不行的,比如说美国的航天飞船里就有java开发的程序以上是我的愚见,其实不管那种语言,你学好了,都能找到好的工作,对照 良多人说C#是微软用来和Java对抗的兵器,由于两者在很年夜水平上有着惊人的类似,只管云云,二者分歧的中央也良多,所谓“于渺小处见差别”。那末二者的类似和区分都在甚么中央呢?我们从明天入手下手,会从各个角度来对照C#和Java的特性,但愿能对正在进修、利用C#的伴侣有所匡助。
1、C#和.NET平台的概貌
2000年6月,微软公布C#言语和.NET平台。C#言语是一种强范例的,面向对象的言语,它具有语法复杂、表达力强的特性,而.NET平台则是组成微软的“.NET企图”的基石。
.NET平台的中心包含两方面,一方面就是出名的通用言语运转机(CommonLanguageRuntime),固然这个名词起得流畅了点,不外人人能够拿它和Java的假造机来作对照,两者完成的义务大抵不异;另外一方面就是一年夜堆通用函数库,这些库函数能够被多种言语挪用,而且经由过程编译都发生一种配合的两头言语(IntermediateLanguage),这类言语也能够拿Java的字节码来类比,固然完成的体例有些纷歧样。
2、C#和Java
上面复杂地把C#和Java的类似处列出来,固然在这里我们重点会商的是C#和Java的分歧点,可是懂得一下两者的不异的地方也是很有需要的。
两者都编译成跨平台的、跨言语的代码,而且代码只能在一个受把持的情况中运转
主动接纳渣滓内存,而且打消了指针(在C#中可使用指针,不外必需说明unsafe关头字)
都不必要头文件,一切的代码都被“包(package)”限定在某个局限内,而且由于没有头文件,以是打消了类界说的轮回依附
一切的类都是从对象派生出来,而且必需利用New关头字分派内存
用对象加锁的体例来撑持多线程
都具有接口(interface)的观点
外部类
承继类的时分不会以某种特定的会见权限来承继;
没有全局函数大概常量,统统必需属于类;
数组大概字符串都自带长度盘算和界限反省;
只利用“.”操纵符,没有“->”和“::”;
“null”、“boolean”和“bool”成了关头字;
任何变量均在利用行进行初始化;
不克不及利用整数来前往到if前提语句中,必需利用布尔值;
“Try”模块后能够有“finally”;
3.属性(Property)
属性的观点对人人来讲应当是很熟习的,类成员函数能够自在地会见本类中的任何属性成员。不外若要从一个类中往会见另外一个类中的属性,那就对照贫苦了,以是良多时分我们利用Getxxx和Setxxx办法,如许看起来显得极不天然,好比用Java大概C++,代码是如许的:
foo.setSize(getSize()+1);
label.getFont().setBold(true);
可是,在C#中,如许的办法被“属性化”了。一样的代码,在C#就酿成了:
foo.size++;
label.font.bold=true;
能够看出来,C#明显更简单浏览和了解。我们从这个“属性办法”的子程序代码中,也能够看到相似情形:
Java/C++:
publicintgetSize()
{
returnsize;
}
publicvoidsetSize(intvalue)
{
size=value;
}
C#:
publicintSize
{
get{returnsize;}
set{size=value;}
}
为了辨别这类属性化的办法和类的属性成员,在C#中把属性成员称作“域(field)”,而“属性”则成为这类“属性化的办法”公用的名词。特地说一句,实在如许的属性化办法在VB和DELPHI中是常常碰着的,在VB中它也就叫属性。
别的,在C#中Get和Set必需成对呈现,一种属性不克不及只要Get而没有Set(在Java和C++中就能够只要Get大概只要Set),C#中如许做的优点在于便于保护,假设要对某种属性举行修正,就会同时注重Get和Set办法,同时修正,不会改了这个忘了谁人。
4、对象索引机制(Indexer)
C#中引进了对象索引机制。说得分明点,对象索引实在就是对象数组。这里和上一节中的属性接洽起来说一下,属性必要埋没Get和Set办法,而在索引机制中,各个对象的Get大概Set办法是表露出来的。好比上面的例子就对照分明地申明了这一点。
publicclassSkyscraper
{
Story[]stories;
publicStorythis[intindex]{
get{
returnstories[index];
}
set{
if(value!=null){
stories[index]=value;
}
}
}
...
}
SkyscraperempireState=newSkyscraper(...);
empireState[102]=newStory("TheTopOne",...);
呵呵,有了这类特征,我们就再不必怕教室上先生叫我们写对象数组这类程序了。
5.指代(Delegate)
指代这个玩意很出格,它有点象指针,但又不完整是,不外人人仍是能够把它了解为一品种型平安的、面向对象的指针。(甚么是范例平安和面向对象就不必讲了吧?)特地提一句,有良多书上把Delegate翻译成代办署理,我以为如许翻不敷切实,翻译成“指代”更得当些,事理上符合,而且还切合它的原本意义――微软原本就是用Delegate来“代替指针”,以是叫“指代”,呵呵。
提及指代,大概至今Sun还会对它忿忿不已,为何呢?由于在Sun的尺度Java中是没有这个工具的,它是微软99年公布的MSVJ++6增加的“新特征”。为此,两家公司吵得不亦乐乎,而且还专门在网上写了大批文章相互打击,有乐趣的伴侣能够往看看(只要英文版)。
http://www.Javasoft.com/docs/white/delegates.html
http://msdn.microsoft.com/visualj/technical/articles/delegates/truth.asp
话回正传,指代有甚么特性呢?一个分明的特性就是它具有了指针的举动,就好象从Java又倒回到了C++。在C#中,指代完成的功效也许和C++内里的指针,和Java中的接口相称。可是,指代比起C++的“正宗指针”来又要拙劣一些,由于它能够同时具有多个办法,相称于C++内里的指针能同时指向多个函数,而且是范例平安的,这一点表现了它的“对象”特征;而比起Java的接口来,指代拙劣的中央在于它能能够不经由外部类就挪用函数,大概用大批代码就可以挪用多种函数,这一点表现了它的“指针”特征。呵呵,很有“波粒二象性”的滋味吧?指代最主要的使用在于关于事务的处置,下一节我们将重点先容。
6、事务(Event)
C#对事务是间接撑持的(这个特性也是MSVJ所具有的)。以后良多支流程序言语处置事务的体例各不不异,Delphi接纳的是函数指针(这在Delphi中的术语是“closure”)、Java用改编类来完成、VC用WindowsAPI的动静体系,而C#则间接利用delegate和event关头字来办理这个成绩。上面让我们来看一个例子,例子中会给人人举作声明、挪用和处置事务的全历程。
//起首是指代的声明,它界说了叫醒某个函数的事务旌旗灯号
publicdelegatevoidScoreChangeEventHandler(intnewScore,refboolcancel);
//界说一个发生事务的类
publicclassGame
{
//注重这里利用了event关头字
publiceventScoreChangeEventHandlerScoreChange;
intscore;
//Score属性
publicintScore
{
get{
returnscore;
}
set{
if(score!=value)
{
boolcancel=false;
ScoreChange(value,refcancel);
if(!cancel)
score=value;
}
}
}
//处置事务的类
publicclassReferee
{
publicReferee(Gamegame)
{
//裁判卖力调剂竞赛中的分数变更
game.ScoreChange+=newScoreChangeEventHandler(game_ScoreChange);
}
//注重这里的函数是如何和ScoreChangeEventHandler的旌旗灯号对上号的
privatevoidgame_ScoreChange(intnewScore,refboolcancel)
{
if(newScore<100)
System.Console.WriteLine("GoodScore");
else
{
cancel=true;
System.Console.WriteLine("NoScorecanbethathigh!");
}
}
}
//主函数类,用于测试上述特征
publicclassGameTest
{
publicstaticvoidMain()
{
Gamegame=newGame();
Refereereferee=newReferee(game);
game.Score=70;
game.Score=110;
}
}
在主函数中,我们创立了一个game对象和一个裁判对象,然后我们经由过程改动竞赛分数,来察看裁判对此会有甚么呼应。
请注重,我们的这个体系中,Game对象是感到不到裁判对象的存在的,Game对象在这里只卖力发生事务,至于有谁会来聆听这个事务,并为之作出反响,Game对象是不作任何亮相的。
我们注重到,在裁判类的Referee函数中,Game.ScoreChange前面利用了+=和-=操纵符,这是甚么意义呢?回到我们界说ScoreChange的中央,能够发明ScoreChange是用event关头字润色的,那末这里的意义就很分明了:ScoreChange是一个事务,而事务被触发后必要响应的事务处置机制,+=/-=就是为这个事务增添/移除绝对应的事务处置程序,并且,并非一个事务只能对应一个处置程序,我们还能够用这两个操纵符为统一事务增添/移除数个事务处置程序。怎样?很便利吧!
在实践使用中,和我们下面讲的(比赛-裁判)机制很邻近的体系就是图形用户界面体系了。Game对象能够看做是图形界面上的小零件,而得分事务就相称于用户输出事务,而裁判就相称于响应的使用程序,用于处置用户输出。
指代机制的初次表态是在MSVJ里,它是由AndersHejlsberg创造的,如今又用到了C#中。指代用在Java言语中的成果,则间接招致了微软和Sun之间对类和指针的干系发生了大批的争辩和切磋。成心思的是,Java的创造者JamesGosling十分滑稽地称号指代的创造者AndersHejlsberg为“‘函数指针’师长教师”,由于AndersHejlsberg老是千方百计地把指针变相地往各类言语中放;不外有人在看了Java中大批地利用了各类类后,也戏称Java的创造者JamesGosling为“‘全都是类’师长教师”,真是个中味道,尽在不言中啊。
其实产生见解的过程就是训练自己发现问题,分析问题的能力。根据以上的认识我想谈下传统的学习与通过视频独立学习的优缺点:
作者:
简单生活
时间:
2015-1-18 18:17
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者:
金色的骷髅
时间:
2015-1-21 06:50
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者:
因胸联盟
时间:
2015-1-24 19:45
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
第二个灵魂
时间:
2015-1-25 22:48
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者:
爱飞
时间:
2015-2-4 20:12
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
作者:
若天明
时间:
2015-2-7 03:03
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
作者:
透明
时间:
2015-2-10 04:28
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
飘灵儿
时间:
2015-2-28 19:46
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
作者:
海妖
时间:
2015-3-1 13:47
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
作者:
小女巫
时间:
2015-3-7 10:25
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者:
小妖女
时间:
2015-3-14 21:18
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者:
灵魂腐蚀
时间:
2015-3-17 16:07
是一种将安全性(Security)列为第一优先考虑的语言
作者:
不帅
时间:
2015-3-24 10:22
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者:
兰色精灵
时间:
2015-3-26 17:38
是一种使网页(Web Page)产生生动活泼画面的语言
作者:
冷月葬花魂
时间:
2015-3-27 20:19
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
作者:
谁可相欹
时间:
2015-3-30 17:41
Java是一种计算机编程语言,拥有跨平台、面向对java
作者:
变相怪杰
时间:
2015-4-2 11:14
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
作者:
柔情似水
时间:
2015-4-6 02:10
是一种使用者不需花费很多时间学习的语言
作者:
老尸
时间:
2015-4-9 11:50
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2