java与c#的语法对比
1,命名空间与包
C#为了把实现相似功能的类组织在一起,引入了命名空间的概念(namespace)
Java中与此对应的东西叫做包(package)
2,类的访问控制方面的不同
C#只有两种:public和默认(同internal)
public能被所有的类(同项目中和不同项目中)访问
internal(在class关键字前不加控制符时默认为internal),表明类只能在同一项目中访问
Java也只有两种:public和默认
public能被所有的类访问
默认(在class关键字前不加控制符时)只能被同一包中的所有类访问
3,类成员的访问控制
C#中有四种:public,protected,private(默认),internal(注意这里internal和默认是不同的)
public能被所有的类访问
protected只能被子类访问
private(也即不写任何控制符时的默认情况下)只能类内部访问
internal能被同一项目中的类访问
Java也有四种:public,protected,private和默认
public能被所有的类访问
protected既能被同一个中的其他类访问,也可以被不同包中的子类访问
private只能在类内部使用
默认可以被这个包中的其他类访问,如果一个子类与父类位于不同的包中,子类也不能访问父类中的默认访问控制成员
4,C#中类的继承用通过冒号:实现,在Java中用extends
C#中实现接口通过冒号:实现,在Java中用implements
C#中密封类用sealed实现,在Java中用final
C#中常数用const实现,在Java中用final
C#中属性用set,get代码块实现,在Java中一般用类似于C#中的字段代表属性,或者用setter,getter构造器实现
C#中有部分类(partial)的概念,Java中没有
C#中有readonly修饰属性只读,Java中没有
C#中有virtual和override修饰虚方法和重写方法,Java中没有,Java中默认父类中的方法都是virtual的
Java中有static{},synchroized{}代码块的概念,C#中没有
Java中有标签(如labelA:)的概念,C#中没有
C#中子类调用父类的方法用base.method(),Java中用super.method()
C#中用is来判断一个实例是否是某一个类的,Java中用instanceof
C#中用foreach(int i in array)来对数组中每一个元素的遍历,Java中用for(int i : array)
~~~~~~~~~~~~~~~~~~~~~
1. C#命令输入和输出语法是:Console.ReadLine()和Console.WriteLine()(当然不换行的话就去掉Line,这些想必大家都知道,所以文章中只提供比较常用的)。
Java命令输入和输出语法是:System.In.Read()和System.Out.Println()
心得:其实两个语言语法本质都一样就是名字不一样。
2. C#中在一个.cs文件中可以存在多个Public修饰符修饰的类。
Java中在一个.java文件中有且仅能存在一个Public修饰符修饰的类。
心得:目前还不知道为啥java会有这样的限制,不过这一点很容易范错误。
3. C#中Switch语句接受的类型是byte、char、string.
Java中Switch语句接受类型是byte、char、string、int
心得:java语言貌似支持的多一点。
4. C#中存在属性与字段是两个概念,属性是属性访问器,是对字段的封装。
Java中貌似没有属性访问器,属性和字段是一个概念,通过自己实现方法来封装属性的访问,一般是getxxx()和setXXX()方法
心得:这点我还是比较赞同C#的做法,毕竟从编程的角度来说,C#将属性作为语法通用的,不需要用户手动去实现,省去了大量的重复编码。
5. C#中构造函数调用基类或者当前重载构造函数语法是直接在构造函数后面:base()和:this()就可以实现。
Java中相同原理语法是在构造函数模块中的第一条语句使用this()或者super()。
心得:这个我个人觉得c#设计的比较好,因为从程序的可读性方面,这样也容易使得读者容易读懂代码,对于程序员来说也容易区分,比较容易知道运行顺序;而Java的实现方式必须使得使用者记住在第一条语句,有的时候在编写一个大的程序的时候,很有可能会忽略这个。
6. C#中存在静态构造函数,即在类运行时,只执行一次。
Java中是不存在静态构造函数的。
心得:这点我也不知道为啥Java中不存在,不过在网上查了下,有网友说是因为这违背了面向对象的思想,后面也跟了一大堆理由,不过我总看都觉得该网友没有很好理解面向对象思想。这个问题我觉得也值得深入研究,有兴趣的可以跟我一起研究下,至于C#中出现这个,我也没仔细深入研究为什么会出现这个情况,我只知道有的时候在类构造的时候,有些参数是执行一次的,但是细想这些也可以通过其他方法实现,所以暂时也说不出C#中静态构造函数的优点,不过竟然微软定义了该语法,而且是在3.5定义的我相信必有它的用处。
7. C#中继承接口和抽象类都是使用:符号的。
Java中继承用Extends标识符,实现用Implements,且如果同时存在,Extends必须在Implements之前。
心得:C#相对来说是比较自由,直接用:就实现继承和实现。
可是Java中区别比较明确,这点我觉得还是java比较好,这样写的代码比较直观,可读性比较好,虽然写的字数多。
8. C#中用Sealed修饰符表示密封,即不可继承,用Const表示常量。
Java中使用Final修饰符表示密封和常量。
心得:Java中用一个修饰符代表2个功能,从设计角度说,不怎么符合功能单一原则,所以我个人觉得必要的时候还是拆分表示,可读性和区别性会好点。
9. C#的Is运算符可以用于类型的判别。
Java中用Instanceof进行类型的判别。
10. C#中存在Internal修饰符,表示程序集的访问级别。
Java中存在类似的修饰符Default,表示同一类和同一包中的访问级别。
心得:C#中访问修饰符大概有以下几种:
Public:公共的,最大的访问权限。
Internal:程序集的,命名空间级别的访问权限。
Protected:受保护的,类以及子类的访问级别权限。
Private:私有的,只能在该类中访问级别权限。
Java访问修饰符有以下几种:
Public:公共的,最大访问级别。
Protected:受保护的,同一类,同一包中的类和子类访问级别。
Defalut:同一类,同一包中的类访问级别。
Private:私有的,同一类中访问级别。
纵观,其实都差不多,但是平时必须注意,细节决定成败。
11. C#中异常直接用Throw抛出。
Java中如果要抛出异常,貌似必须现在方法或者类定义后面用Throws进行声明。
心得:这点也没深入研究,所以不发表观点。
12. C#中有命名空间,用Using关键字引入。
Java中有包,类似命名空间定义,用Import引入包。
13. C#中同步锁定,用Lock关键字。
Java中同步锁定,用Synchronized关键字。
14. C#基本数据类型中有string,且有包装类String。
Java基本数据类型是没有string,用String取代。
http://blog.csdn.net/kingmax54212008/article/details/49623235
http://blog.csdn.net/kingmax54212008/article/details/49623001
Java的常用包
- java.lang: 这个包下包含了Java语言的核心类,如String、Math、Sytem和Thread类等,使用这个包无需使用import语句导入,系统会自动导入这个包中的所有类。
- java.util: 这个包下包含java的大量工具类/接口和集合框架类/接口。如Arrays和List、Set等。
- java.net: 这个包下包含了一些Java网络编程相关的类/接口。
- java.io: 这个包含了一些Java输入/输出编程相关的类/接口。
- java.text: 这个包下包含一些Java格式化相关的类。
- java.sql: 这个包下包含了java进行JDBC数据库编程的相关类/接口。
- java.awt: 这个包下包含了抽象窗口工具集(Abstract Window Toolkits) 的相关类/接口,这些类主要用于构建图形用户界面(GUI)程序。
- java.swing:这个包下包含了Swing图形用户界面编程的相关类/接口,这些可用于构建平台无关的GUI程序。
java与c#的语法对比的更多相关文章
- Java, C#, Swift语法对比速查表
原文:Java, C#, Swift语法对比速查表 Java 8 C# 6 Swift 变量 类型 变量名; 类型 变量名; var 变量名 : 类型; 变量(类型推断) N/A var 变量名= ...
- Python3 与 C# 面向对象之~继承与多态 Python3 与 C# 面向对象之~封装 Python3 与 NetCore 基础语法对比(Function专栏) [C#]C#时间日期操作 [C#]C#中字符串的操作 [ASP.NET]NTKO插件使用常见问题 我对C#的认知。
Python3 与 C# 面向对象之-继承与多态 文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 目录: 2.继承 ¶ 2.1.单继 ...
- Java中两个List对比的算法
Java中两个List对比的算法: // 测试数据 // tdcsDdt.add("Z"); // tdcsDdt.add("B"); // tdcsDdt ...
- Java基础之基础语法
前言:Java内功心法之基础语法,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 一个Java程序可以认为是一系列对象的集合,而这些对象通过调 ...
- 【转】Spring学习---Bean配置的三种方式(XML、注解、Java类)介绍与对比
[原文]https://www.toutiao.com/i6594205115605844493/ Spring学习Bean配置的三种方式(XML.注解.Java类)介绍与对比 本文将详细介绍Spri ...
- Java的12个语法糖【转】
本文转载自公众号 Hollis 原创: 会反编译的 Hollis 侵权删 本文从 Java 编译原理角度,深入字节码及 class 文件,抽丝剥茧,了解 Java 中的语法糖原理及用法,帮助大家在学 ...
- Java同C#的语法不同之处
Java同C#的语法不同之处... [注:转载而来但原出处不详:若是您原创请联系我]1,命名空间与包 C#为了把实现相似功能的类组织在一起,引入了命名空间的概念(namespace) Java中与此对 ...
- Java中的标签语法(类似于C语言goto循环体)
Java中的标签语法(少用) 101到150的质数 此法类似于C语言中的GOTO循环 public static void main(String[] args) { int count=0; //标 ...
- Python学习笔记:与Java 基础语法对比
闲着无聊学习下Python 的语法.由于我目前主要编程语言还是Java ,所以针对Python 的学习我主要是通过与Java 进行对比.我使用的是Python3,因此语法上也会遵循Python3 的规 ...
随机推荐
- Android: TODO 应用交互的两种实现方法(Behavior)
最近在写 TODO app,涉及到 Calendar 和 RecyclerView 的交互, 需求: 1. 往上滑动, Calendar 显示为周 2. 周显示模式下,往下滑动,显示为月 3. 列表下 ...
- 【Android】16.5 Android内置的系统服务
分类:C#.Android.VS2015: 创建日期:2016-03-01 一.简介 实际上,在Android.Content.Context类中,Android已经提供了多种类型的系统服务,这些服务 ...
- Java中instanceof关键字的理解
java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: res ...
- Django:Django Rest Framework
Django Rest Framework 一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称 ...
- android笔记一 控件属性
<?xml version = "1.0" encoding = "utf-8"?> <LinearLayout xmlns:android= ...
- HttpClient 教程 (三)
转自:http://www.cnblogs.com/loveyakamoz/archive/2011/07/21/2113246.html 第三章 HTTP状态管理 原始的HTTP是被设计为无状态的, ...
- C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 一款html拼图游戏详解
本文是爱编程原创翻译,转载请看清文末的转载要求,谢谢合作! 游戏介绍 这篇文章是献给web游戏开发者用简单的开发工具开发一款游戏.此文介绍了用html.css.javascript只需简单和几个步骤开 ...
- SpringMVC之学习(2)值得接收和传递
springmvc中 @Controller 来标识一个控制器 @RequestMapping来标识请求路径,可以写在类名上,也可以写在方法名上.写在类,表示所有的方法都在此路径下. package ...
- php底层HashTable的实现
本文转载自: http://segmentfault.com/blog/tree/1190000000718519 HashTable对PHP来说是一种非常重要的数据结构.很多PHP的内部实现(变量 ...