|
Общее позиционирование
|
Строго типизированный, платформенно-независимый язык под JVM. Стандарт для корпоративных, банковских, Android- и микросервисных систем.
|
Строго типизированный язык Microsoft для .NET/CLR. Применяется в enterprise, desktop, web (ASP.NET), game-dev (Unity).
|
|
Разработчик / год
|
Sun Microsystems (1995), ныне Oracle
|
Microsoft (2000 г.)
|
|
Парадигма
|
Объектно-ориентированная + функциональная (через Stream API)
|
Объектно-ориентированная + функциональная (LINQ, lambda, async/await, records)
|
|
Среда выполнения
|
JVM (Java Virtual Machine)
|
.NET CLR (Common Language Runtime)
|
|
Компиляция / запуск
|
Байткод → JIT/AOT → JVM
|
IL (Intermediate Language) → JIT/AOT → CLR
|
|
Типизация
|
Статическая, строгая
|
Статическая, строгая
|
|
Null-безопасность
|
Возможен NullPointerException; с Java 8 есть Optional
|
С C# 8 — nullable-reference types (string?, !) — полная null-безопасность при включении
|
|
Пример «Hello World»
|
public class App { public static void main(String[] a){ System.out.println("Hello"); }}
|
class Program { static void Main(){ Console.WriteLine("Hello"); }}
|
|
Платформы
|
JVM (Linux, Windows, Mac, Android)
|
.NET 6/7 кроссплатформенный (Linux, Windows, Mac)
|
|
Типы данных
|
Примитивы (int,double,boolean) и объекты
|
Все — объекты; value-types (struct), reference-types (class), nullable (int?)
|
|
ООП-модель
|
Классы, интерфейсы, наследование
|
Классы, интерфейсы, структуры, records, наследование, множ. интерфейсы
|
|
Инкапсуляция
|
public, private, protected, package-private
|
public, private, protected, internal, protected internal, file
|
|
Наследование
|
Один базовый класс + интерфейсы
|
Один базовый класс + несколько интерфейсов
|
|
Интерфейсы / реализация по умолчанию
|
Только сигнатуры (до Java 8) → default methods (с Java 8)
|
С C# 8 — default interface methods (аналог Java 8)
|
|
Абстрактные классы
|
abstract class
|
abstract class
|
|
Records / Data классы
|
record User(String n) (с Java 16)
|
record User(string n); (с C# 9)
|
|
Enums
|
enum Color { RED, GREEN }
|
enum Color { Red, Green } (+ атрибуты, битовые флаги [Flags])
|
|
Свойства / get/set
|
Методы getX()/setX()
|
Автосвойства public int Age { get; set; }
|
|
Функции / методы
|
int sum(int a, int b){ return a+b; }
|
int Sum(int a, int b) => a + b; (стрелочный синтаксис)
|
|
Lambda / анонимные функции
|
С Java 8: x -> x+1
|
С C# 3: x => x+1
|
|
Generics
|
Type erasure (стирание типов)
|
Реальные generic с инвариантностью/ковариантностью (out/in)
|
|
Коллекции
|
List, Set, Map + Stream API
|
List<T>, Dictionary<K,V> + LINQ (аналог Stream API, но более универсальный)
|
|
Функциональные операции
|
stream().map().filter().collect()
|
list.Where(...).Select(...).ToList()
|
|
Асинхронность
|
Thread, Executor, CompletableFuture, Future
|
Встроенные async/await, Task, ValueTask, TPL, Channels
|
|
Пример async
|
CompletableFuture.supplyAsync(() -> f())
|
async Task Do() { await f(); }
|
|
Параллелизм
|
Многопоточность через Thread и Executor
|
Task Parallel Library (TPL), Parallel.ForEach, PLINQ
|
|
Обработка ошибок
|
try/catch/finally (checked/unchecked)
|
try/catch/finally (все unchecked), when-фильтры в catch
|
|
Pattern matching
|
switch (с Java 17 Pattern Matching)
|
Расширенный switch / is pattern matching (C# 7+)
|
|
Null-операторы
|
Optional.ofNullable(x)
|
?., ??, ??= (аналог Elvis-оператора)
|
|
Extension-методы
|
Нет (только через утилитные классы)
|
Да — static class Ext { public static void Log(this T x){...}}
|
|
Attributes / Annotations
|
@Annotation
|
[Attribute] — более мощная и унифицированная модель
|
|
Reflection / Meta
|
Reflection API
|
Reflection + Expression Trees (исполняемые AST)
|
|
LINQ vs Stream
|
Stream API (Java 8)
|
LINQ — универсальнее (работает с коллекциями, XML, DB, EF)
|
|
Работа с БД / ORM
|
JDBC, JPA, Hibernate, Spring Data
|
ADO.NET, Entity Framework (Core), Dapper
|
|
Web-фреймворки
|
Spring Boot, Micronaut, Quarkus
|
ASP.NET Core MVC, Minimal API, Blazor (Server/WebAssembly)
|
|
Desktop / UI
|
JavaFX, Swing
|
WPF, WinForms, MAUI (кроссплатформенный UI)
|
|
Mobile
|
Android (Java/Kotlin)
|
Xamarin / MAUI (.NET Mobile)
|
|
Game-dev
|
Ограниченно (LWJGL, LibGDX)
|
Unity (полностью на C#)
|
|
Dependency Injection
|
Spring Context, Jakarta EE CDI
|
Встроенный DI в ASP.NET Core или через Autofac, Ninject
|
|
Logging
|
SLF4J, Log4j, Logback
|
ILogger, Serilog, NLog
|
|
Test-фреймворки
|
JUnit 5, TestNG, Mockito
|
MSTest, xUnit, NUnit, Moq
|
|
Документация
|
Javadoc (/**…*/)
|
XML-комментарии (///) + Sandcastle/Doxygen
|
|
Сборка / зависимости
|
Maven, Gradle
|
MSBuild, dotnet CLI, NuGet
|
|
DevTools / IDE
|
IntelliJ IDEA, Eclipse, VS Code
|
Visual Studio, Rider, VS Code
|
|
CI/CD
|
Jenkins, GitLab CI, Maven Pipeline
|
Azure DevOps, GitHub Actions, TeamCity
|
|
Модули / пакеты
|
package, module-info.java
|
namespace, assembly, project references
|
|
Профилирование / мониторинг
|
VisualVM, JFR
|
dotTrace, PerfView, Diagnostic Tools
|
|
Форматы данных
|
Jackson, Gson (JSON/XML)
|
System.Text.Json, Newtonsoft.Json, XML Serializer
|
|
Сборка и деплой
|
JAR/WAR, Docker, Kubernetes
|
DLL/EXE, Docker, Kubernetes, Azure
|
|
Производительность
|
Высокая, JIT, GC паузы
|
Аналогичная — RyuJIT, Server GC, Span для низкоуровневых операций
|
|
Управление памятью
|
Автоматический GC
|
Автоматический GC (RyuJIT / Server GC), unsafe коды через unsafe
|
|
Кроссплатформенность
|
JVM (любая OS)
|
.NET Core / . NET 6+ (любая OS)
|
|
Безопасность
|
Sandboxing JVM, Security Manager
|
Code Access Security (устарел), AppContext, Windows ACL
|
|
Языковые фишки
|
Checked exceptions, Lambda, Streams
|
async/await, LINQ, records, pattern matching, extension methods
|
|
Философия
|
«Write once, run anywhere»
|
«Power and Productivity with .NET»
|
|
Типичные области
|
Enterprise backend, Android, микросервисы
|
Enterprise web, desktop, игры, кроссплатформенные приложения
|
|
Крупные проекты
|
Hadoop, Kafka, Elasticsearch, Android
|
Stack Overflow, Azure, Unity, Visual Studio Code, GitHub (частично)
|
|
Преимущества
|
Зрелость, кроссплатформенность, экосистема Spring
|
Богатый синтаксис, встроенный async/await, LINQ, интеграция с Windows и Azure
|
|
Недостатки
|
Многословие, GC паузы, отсутствие реактивных типов по умолчанию
|
Сильная зависимость от . NET экосистемы, меньше open-source проектов
|
|
Философия развития
|
Консервативная эволюция
|
Быстрое добавление новых фич, ориентация на разработчиков
|