仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3091|回复: 19
打印 上一主题 下一主题

[学习教程] JAVA网页设计C#、Java之对照

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:55:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
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:36 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
金色的骷髅 该用户已被删除
板凳
发表于 2015-1-21 06:50:09 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
因胸联盟 该用户已被删除
地板
发表于 2015-1-24 19:45:32 | 只看该作者
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
第二个灵魂 该用户已被删除
5#
发表于 2015-1-25 22:48:44 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
爱飞 该用户已被删除
6#
发表于 2015-2-4 20:12:09 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
若天明 该用户已被删除
7#
发表于 2015-2-7 03:03:13 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
透明 该用户已被删除
8#
发表于 2015-2-10 04:28:52 | 只看该作者
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
飘灵儿 该用户已被删除
9#
发表于 2015-2-28 19:46:22 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
海妖 该用户已被删除
10#
发表于 2015-3-1 13:47:36 | 只看该作者
吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
小女巫 该用户已被删除
11#
发表于 2015-3-7 10:25:58 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
小妖女 该用户已被删除
12#
发表于 2015-3-14 21:18:47 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
灵魂腐蚀 该用户已被删除
13#
发表于 2015-3-17 16:07:00 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
不帅 该用户已被删除
14#
发表于 2015-3-24 10:22:13 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
兰色精灵 该用户已被删除
15#
 楼主| 发表于 2015-3-26 17:38:17 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
冷月葬花魂 该用户已被删除
16#
发表于 2015-3-27 20:19:50 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
谁可相欹 该用户已被删除
17#
发表于 2015-3-30 17:41:53 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
变相怪杰 该用户已被删除
18#
发表于 2015-4-2 11:14:40 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
柔情似水 该用户已被删除
19#
发表于 2015-4-6 02:10:08 | 只看该作者
是一种使用者不需花费很多时间学习的语言
老尸 该用户已被删除
20#
发表于 2015-4-9 11:50:04 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 18:14

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表