.NET转Java
懂C#的话,转Java也不是那么难,毕竟,语言语法还是相似的.尝试了下Java,说说自己的体会吧.
一,Java和C#都是完全面向对象的语言。在面向对象编程的三大原则方面,这两种语言接近得不能再接近。不过也有一些差别,不过不多,稍微习惯下就好了,
比如:
集合:两种语言都有集合ArrayList,还有通过键访问值的Java中是HashMap而c#中是HashTable。c#比Java多泛型集合List<T>与Dictionary<K,V>更容易了,无需拆箱装箱了,更安全了。
继承:Java中用关键字extends,c#只用“:”就行了。调用父类的构造方法Java用super关键字,而c#用base关键字。
属性:java中定义和访问均要用get和set方法,可以不成对出现。c#中是真正的属性,访问时用.号即可。
事件。Java中没有(Java通过实现自定义侦听器类执行事件)。C#定义了类似于函数指针的委托来实现事件。
等等...
二,Java Web和ASP.NET也是有相似的,java web的核心是Servlet,Jsp其实本质都是Servlet,而Servlet的流程可以比较清晰看到整个前后台是怎么工作的,类似.NET的ashx一般处理程序,Java是MVC的主要倡导者,随着web技术发展,Servlet主要被当作Control使用,Jsp作为View使用,这在许多MCV框架有所体现.得益于开源社区的活跃,流行的Java MVC框架都比较成熟了.而ASP.NET MVC(虽然我没有用过,大概了解过)感觉使用起来应该不是很舒服把.貌似ASP.NET MVC也还没有推广开来.很多.NET程序员做Web还是停留在服务端控件.不是Webform不好,而是微软会把我们宠坏.感觉Webform不够优雅,耦合太高,个人接触过Java Web后觉得MVC在大多场景下更胜一筹.
目前接触过的MVC框架是Struts2,常用在展示层,前台页面展示与控制页面跳转。建立一个工程,都会有一个web.xml文件,是整个工程的主配置文件。其它框架的集成首先是在这个配置文件里面进行的。Struts也有一个主配置文件struts.xml,工程中所有配置的Action都是在这个配置文件中配置的。Action是Struts的核心,其实就是控制页面跳转用的,每个页面和后台的数据交互或者跳转到另外的页面都通过action进行。 具体使用看看相关的文档.
三,Java的框架五花八门,有名的全功能栈Spring框架,MVC框架Struts2,SpringMVC(Spring的子项),数据持久层框架 MyBatis,Hibernate,模板引擎FreeMarker,Velocity,框架有框架的好处也有坏处,使用框架无非就是提高生产力,降低测试维护成本,保证系统性能.但是不适合的使用框架只会加重系统复杂度,降低系统性能,增加维护难度.什么时候使用框架什么时候不用,要详细斟酌在做取舍.目前只接触过Struts2,因为做的一些小项目直接Servlet+Jsp+Jdbc就好了,打好基础还是比较重要的,以后在项目慢慢接触使用吧.
总的来说吧,微软的生态环境的不给力留给.NET的面越来越窄,Java生态圈的局面是前途一片光明,选择开源的Java是有原因的,丰富的资料,各种解决方案可选择.曾今遇到一个要实现浏览器post svg到后台转png图片的功能,好不容易在git上找到一个开源的库,一用bug很多,而java Apache下的batik却是相当完善.最后是通过后台cmd调用batik来实现,怎一个悲剧.曾今也在windows phone上抱有兴趣,做了几个demo app发现封闭的wp的api还是太少,招聘wp开发的少之又少.当然C#依然是最优美的语言,Visual Studio依然是最完美的IDE. .NET程序员们该多接触下其他语言开发平台,至少当作开拓下视野吧.
.NET转Java的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- 开发ERP软件应该遵守的22条规则
总结一下做管理软件,有哪些项是经过检验的条款,必须遵守的. 界面篇 1 要保存用户的偏号(profile/favourite). ASP.NET 2.0引入此功能,当用户修改默认的控件的属性时,框架 ...
- pip 豆瓣镜像使用
pip install -i https://pypi.douban.com/simple/ flask 要用https的 https://pip.pypa.io/en/latest/user_gui ...
- csdn 泄露用户密码害人不浅啊。
先是京东被盗,接着博客园也登陆不了了.
- Jquery 实现input回车时跳转到下一个input元素
/** * 回车时跳转到下一个元素 * @Author HTL * @DateTime 2016-12-30T11:33:25+0800 * @param {[type]} $input [INP ...
- Code First 中使用 ForeignKey指定外键时总是显示未引用
Code First 中使用 ForeignKey指定外键时总是显示未引用 原因是:开发环境是在.NET 4.0 修改项目,改为.net 4.5
- highcharts插件使用总结和开发中遇到的问题及解决办法
这里使用的highchart是2014-01-09从官网下载的版本,版本号是3.0.8, 当过了几天后,发现版本号变成了3.0.9,不由得的感叹highchart的版本更新之快. 在jsp中使用hig ...
- 调用axis2开发的接口遇到的问题
第1个异常 [org.apache.struts.actions.DispatchAction] – Dispatch[/myservice/NgCallServiceInfo] to method ...
- Navi.Soft30.开放平台.百度.开发手册
1系统简介 1.1功能简述 现在是一个信息时代,并且正在高速发展.以前获取信息的途径非常少,可能只有电视台,收音机等有限的来源,而现在的途径数不胜数,如:QQ,微信,官方网站,个人网站等等 本开发手册 ...
- SSD硬盘 全盘安全擦除
此文From http://ssd.zol.com.cn/575/5753057.html 在SSD固态硬盘的使用过程中,部分用户可能会碰到计算机意外掉电或死机并强行断电后,系统出现异常,扫描SSD后 ...
- Python: 如何继承str/string?
想搞一个对象继承自str,然后存一些额外信息用来标识这个字符串,然后理所当然地重写了__init__发现跪了: class newstring(str): def __init__(self, val ...