Лучший способ по-настоящему изучить Java-ME для специалиста по C # [закрыто]

StackOverflow https://stackoverflow.com/questions/90578

Вопрос

Недавно я начал разрабатывать приложения для Blackberry.Следовательно, мне пришлось перейти на Java-ME и изучить это и связанные с ним инструменты.Синтаксис прост, но у меня продолжают возникать проблемы с различными ошибками и окружающей средой.

Например, что меня удивило и отняло много времени, так это отсутствие реальных свойств у объекта класса (то, что, как я предполагал, есть у всех языков ООП).Есть много подводных камней.Я был в разных местах, где сравнивают синтаксис Java с C #, но, похоже, нет ни одного сайта, который рассказывал бы о том, на что следует обратить внимание при переходе на Java.

Окружающая среда - это совершенно другая проблема в совокупности.Среда разработки Blackberry IDE просто ужасна.Внешний вид напоминает мне Borland C ++ для Windows 3.1 - настолько он устарел.Некоторые из других проблем включали пятнистый intellisense, слабую отладку и т.д...У Blackberry действительно есть бета-версия плагина Eclipse, но без поддержки отладки это просто редактор с модными инструментами рефакторинга.

Итак, есть какие-нибудь советы о том, как вписаться в Java-ME?

Это было полезно?

Решение

Это парень здесь пришлось сделать обратный переход.Итак, он перечислил 10 главных отличий Java от C #.Я возьму его темы и покажу, как это сделано на Java:

Попался # 10 - Дай мне мой стандартный результат!

Для печати в стандартный вывод на Java:

System.out.println("Hello");

Попался # 9 - Пространства имен == Свобода

В Java у вас нет свободы в пространствах имен.Структура папок вашего класса должна соответствовать имени пакета.Например, класс в пакете org.тест должно быть, в папке организация/тест

Попался №8 - Что случилось с super?

В Java для обозначения суперкласса используется зарезервированное слово super вместо того, чтобы base

Gotcha #7 - Привязка конструкторов к базовому конструктору

У вас нет этого в Java.Вы должны вызвать конструктор самостоятельно

Понял #6 - Дагнабит, как мне создать подкласс существующего класса?

Чтобы создать подкласс класса в Java, сделайте это:

public class A extends B {
}

Это означает класс A является подклассом класса B.В C # было бы class A : B

Попался № 5 - Почему константы не остаются постоянными?

Чтобы определить константу в Java, используйте ключевое слово final вместо того, чтобы const

Попался # 4 - Где находится ArrayList, Vector или Hashtable?

Наиболее часто используемыми структурами данных в java являются HashSet, ArrayList и HashMap.Они реализуют Set, List и Map.Конечно, есть еще куча всего.Узнайте больше о коллекциях здесь

Попался №3 - О средствах доступа и Мутаторах (Геттерах и сеттерах)

У вас нет функции properties в Java.Вы должны объявить методы gets и sets для себя.Конечно, большинство IDE могут делать это автоматически.

Попался # 2 - Разве я не могу переопределить!?

Вам не нужно объявлять метод virtual на языке Java.Все методы - кроме объявленных final - может быть переопределен в Java.

И №1 попался…

В Java примитивные типы int, float, double, char и long не являются Objectэто как в C #.Все они имеют соответствующее объектное представление, например Integer, Float, Double, и т.д.

Вот и все.Не забудь посмотреть исходная ссылка, там будет более подробное обсуждение.

Другие советы

Java существенно не отличается от C #.На чисто синтаксическом уровне вот несколько советов, которые могут помочь вам в течение дня:

  1. В Java у вас есть два семейства исключений: java.lang.Exception и все, что вытекает из этого, и RuntimeException.Это имеет смысл, потому что в Java исключениями являются проверено;это означает, что для создания любого исключения вне времени выполнения вам также необходимо добавить throws аннотация к объявлению вашего метода.Следовательно, любой метод, использующий ваш, должен будет перехватить это исключение или объявить, что IT также выдает то же исключение.Множество исключений, которые вы принимаете как должное, таких как NullPointerException или IllegalArgumentException, фактически вытекающие из RuntimeException и поэтому вам не нужно их объявлять.Проверенные исключения являются предметом спора между двумя дисциплинами, поэтому я бы порекомендовал вам попробовать их на себе и посмотреть, помогает это вам или раздражает.На личном уровне я думаю, что проверенные исключения значительно улучшают факторизацию кода и надежность.

  2. Хотя Java поддерживает автобоксинг уже довольно давно, все еще существует довольно много различий между реализациями C # и Java, о которых вы должны знать.Принимая во внимание, что в C # вы можете взаимозаменяемо использовать int как тип значения, так и ссылочный тип, в Java они буквально не одного и того же типа:вы получаете примитивный тип значения int и тип ссылки на библиотеку java.lang.Integer.Это проявляется двумя распространенными способами:вы не можете использовать типы значений в качестве параметра универсального типа (поэтому вы будете использовать ArrayList<Integer> вместо того, чтобы ArrayList<int>), и служебные методы (такие как parse или toString) статически реализованы в ссылочном типе (так что это не int a; a.toString(); но скорее int a; Integer.toString( a );).

  3. Java имеет два различных типа вложенных классов, в C # - только один.В Java статический класс, который не объявлен с static модификатор называется внутренний класс, и имеет неявный доступ к экземпляру заключающего класса.Это важный момент, потому что, в отличие от C #, Java не имеет понятия делегатов, и внутренние классы очень часто используются для достижения того же результата с относительно небольшими синтаксическими затратами.

  4. Дженерики в Java реализованы радикально иным образом, чем в C#;когда были разработаны дженерики для Java, было решено, что изменения будут чисто синтаксическими без поддержки среды выполнения, чтобы сохранить обратную совместимость со старыми виртуальными машинами.Поскольку во время выполнения нет прямой поддержки дженериков, Java реализует дженерики, используя метод, называемый удаление типа.У стирания типов есть довольно много недостатков по сравнению с реализацией дженериков на C #, но самый важный момент, который следует извлечь из этого, заключается в том, что параметризованные универсальные типы в Java не имеют разных типов среды выполнения.Другими словами, после компиляции типы ArrayList<Integer> и ArrayList<String> являются эквивалент.Если вы много работаете с дженериками, вы столкнетесь с этими различиями гораздо раньше, чем вы думаете.

На мой взгляд, есть три самых сложных аспекта языка для разработчика C #.Кроме этого, есть инструменты разработки и библиотека классов.

  1. В Java существует прямая корреляция между пакетом (пространством имен), именем класса и именем файла.В общем корневом каталоге классы com.example.SomeClass и org.apache.SomeOtherClass будет буквально найден в com/example/SomeClass.class и org/apache/SomeOtherClass.class соответственно.Будьте осторожны при попытке определить несколько классов в одном файле Java (это возможно для частных классов, но не рекомендуется) и придерживайтесь этой структуры каталогов, пока вам не станет более комфортно со средой разработки.

  2. В Java у вас есть понятия class-path и class-loader, которые нелегко сопоставить с C # (существуют приблизительные эквиваленты, которые не используются большинством .NET-разработчиков).Classpath сообщает виртуальной машине Java, где должны быть найдены библиотеки и классы (как ваши, так и общие библиотеки системы!), и вы можете думать о загрузчиках классов как о контексте, в котором живут ваши типы.Загрузчики классов используются для загрузки типов (файлов классов) из различных мест (локальный диск, Интернет, файлы ресурсов и так далее), но также ограничивают доступ к этим файлам.Например, сервер приложений, такой как Tomcat, будет иметь загрузчик классов для каждого зарегистрированного приложения или контекста;это означает, что статический класс в приложении A не будет совпадать со статическим классом в приложении B, даже если у них одинаковое имя и даже если они используют одну и ту же кодовую базу.Домены приложений предоставляют несколько схожую функциональность в .NET.

  3. Библиотека классов Java похожа на BCL;многие различия носят косметический характер, но этого достаточно, чтобы вы снова и снова обращались к документации (и / или Google).К сожалению, я не думаю, что здесь есть что делать — вы просто будете знакомиться с библиотеками по ходу дела.

Итог:единственный способ грокнуть Java - это использовать его.Процесс обучения не такой уж крутой, но приготовьтесь к тому, что в течение первых двух-трех месяцев использования вам придется довольно часто удивляться и разочаровываться.

Короткий ответ таков - это будет раздражать, но не сложно.

Java и C # имеют одинаковые базовые концепции, и многие библиотеки очень близки по стилю, но вы будете продолжать сталкиваться с различными различиями.

Если вы говорите о свойствах класса, то они есть в Java.Синтаксис таков

public class MyClass {
    public static int MY_CLASS_PROPERTY = 12;
}

Я бы серьезно посоветовал вам приобрести IDE получше.Любой из Netbeans, Eclipse, IDEA, JBuider сделает ваш переход намного приятнее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top