Страницы

Поиск по вопросам

понедельник, 25 ноября 2019 г.

Что есть в Java, чего нет в C#?


Решил попробовать писать под андроид и столкнулся с необходимостью писать на Java
До этого писал больше на C#. Языки похожие во многом, но есть и отличия. И так как пок
я C# знаю лучше Java, то так получается, что я пользуюсь только теми возможностями синтаксиса Java, которые знаю по C#. В общем, сейчас для меня java превратился в "урезаный C#", потому что каких-то чисто джавовских "фишек" я не знаю, а некоторых возможностей из C# в этом языке нет. Ну, например, в Java нет оператора ??, нет linq, нет свойств, нет атрибутов.

Так вот сам вопрос: а что есть в Java, чего нет в C#? Именно из синтаксиса, различных удобностей и синтаксического сахара.
    


Ответы

Ответ 1



Смотрите. В основном по фичам в данный момент C# идёт впереди Java, Java находится в позици догоняющего. Однако есть несколько фич, которые есть в Java и нет в C# и которые при правильном использовании могут облегчить жизнь программисту. 1) Легковесные (анонимные) производные классы. Пример: new Thread(new Runnable() { // это анонимный производный класс! @override public void run() { // do some work } }).start(); В C# надо было бы объявить производный класс явно. Аналогичная, но не равносильная фича C# — анонимные методы, то есть лямбды. 2) Нестатические внутренние классы. В C# внутренние классы лишь логически находятс «внутри» и не имеют доступа к instance-переменным. В Java внутренние классы более богаты. 3) enum'ы. В C# они такие же, как в C++, и являются по существу именованными константам целочисленного типа. В Java enum'ы есть константы объектного типа, гораздо более богатые семантически. 4) checked exceptions. Вы можете объявлять как часть сигнатуры метода исключения которые бросаются этим методом. В C# такой возможности нету. (Хотя разработчики C# считают, что эта фича не нужна и даже вредна, тем не менее по факту это фича, которая есть в Java и нет в C#.) 5) final-параметры. В C# const могут лишь переменные и поля, в Java можно параметр объявить как final, и при попытке его изменить компилятор наругается на вас. 6) SoftReference представляет собой «более сильную» версию WeakReference (которы тоже есть в Java): объекты, референсируемые ими, не удаляются, пока памяти хватает, даже если другие объекты уничтожаются в процессе сборки мусора. 7) У Java есть симпатичные помеченные блоки, которые позволяют выйти из любого количеств циклов за раз (break) или пропустить итерацию во внешнем цикле (continue). Также break

Комментариев нет:

Отправить комментарий