java和c#的相似及区别基础对比
用过十几种语言,但是java和c#是最为重要的两门。c#发明人曾主导开发了pascal和delphi,加入微软后,参考了c++和java完成了c#和net。大家用过java或c#任意一种的,可以通过本篇文章快速掌握另外一门语言。
基础语法
- 变量声明:Java和C#都使用
type variableName。 - 条件语句:Java和C#都使用
if、else if、else。 - 循环:Java和C#都支持
for、while、do-while。 - 数组:Java和C#都使用
int[] myArray = new int[10]。
类和对象
- 类定义:Java和C#都使用
public class ClassName { }。 - 对象创建:Java和C#都使用
ClassName obj = new ClassName();。 - 构造函数:Java和C#都支持构造函数,用于创建对象时初始化对象。
- 继承:Java使用
class Child extends Parent { },C#使用class Child : Parent { }。 - 多态:Java和C#都通过方法重写实现多态。
接口和抽象类
- 接口定义:Java和C#都使用
public interface InterfaceName { }。 - 实现接口:Java使用
class ClassName implements InterfaceName { },C#使用class ClassName : InterfaceName { }。 - 抽象类:Java和C#都使用
public abstract class AbstractClassName { }。
访问修饰符
- 公共:Java和C#都使用
public。 - 私有:Java和C#都使用
private。 - 受保护:Java和C#都使用
protected。 - 包私有:Java默认访问级别(无修饰符),C#使用
internal。
异常处理
- try-catch:Java和C#都使用
try { } catch (ExceptionType e) { }。 - finally:Java和C#都使用
finally { }。 - 抛出异常:Java和C#都使用
throw new ExceptionType()。
事件处理
- Java:使用监听器(Listeners)和事件(Events)模型。
- C#:使用事件(Events)和委托(Delegates)。
泛型
- Java:使用
<T>来定义泛型类、接口和方法。 - C#:使用
<T>来定义泛型类、接口、方法和委托。
集合
- Java:有
java.util包,包含List、Set、Map等接口和ArrayList、HashSet、HashMap等实现类。 - C#:有
System.Collections.Generic命名空间,包含List<T>、HashSet<T>、Dictionary<TKey, TValue>等泛型集合类。
并发和多线程
- Java:使用
java.lang.Thread类和java.util.concurrent包来支持多线程和并发。 - C#:使用
System.Threading和System.Threading.Tasks命名空间来支持多线程和异步编程。
文件输入/输出
- Java:使用
java.io和java.nio包进行文件操作。 - C#:使用
System.IO命名空间进行文件操作。
特性和框架
- Java:有Spring Boot、Hibernate、Java EE等企业级框架。
- C#:有ASP.NET Core、Entity Framework等企业级框架。
应用程序入口
- Java:使用
public static void main(String[] args)作为应用程序入口。 - C#:俺也一样。
包和命名空间
- Java:使用
package关键字定义包。 - C#:使用
namespace关键字定义命名空间。
依赖管理
- Java:使用Maven或Gradle来管理项目依赖。
- C#:使用NuGet包管理器来管理项目依赖。
编译和运行
- Java:源代码编译成字节码(.class文件),运行在Java虚拟机(JVM)上。
- C#:源代码编译成中间语言(IL),运行在.NET运行时(CLR)上。
语言特性
- Java:支持标记接口、匿名内部类、检查型异常等。
- C#:支持属性(Properties)、索引器(Indexers)、事件(Events)、委托(Delegates)、异步编程模式(async/await)等。
程序集(Assemblies)
- Java字节码:Java编译器将源代码编译为平台无关的字节码,存储在
.class文件中。 - C# DLL/EXE:C#编译器将源代码编译为中间语言(IL),并打包为程序集(Assembly),存储在
.dll(动态链接库)或.exe(可执行文件)中。
