CodeGym /Java блог /Случаен /Заседна? Най-трудните части от изучаването на Java и как ...
John Squirrels
Ниво
San Francisco

Заседна? Най-трудните части от изучаването на Java и как да ги преодолеете

Публикувано в групата
Както знаете, ние препоръчваме на начинаещите codeиращи да започнат да учат езици за програмиране с Java, а CodeGym има всичко, за да направи процеса на изучаване на Java лесен дори за най-неподготвените ученици. Но колкото и елементите на геймификация, лесната история и забавните герои да помагат за улесняване на този процес, изучаването на основите на Java в най-пълна степен рядко минава без предизвикателства за повечето нови обучаеми. Заседна?  Най-трудните части от изучаването на Java и How да ги преодолеем - 1Днес ще разгледаме някои от най-трудните области в основите на програмирането на Java, опитвайки се да разберем защо много хора ги намират за трудни и дали има Howво да направите по въпроса.

1. Генерични лекарства

Генериките в Java са типове, които имат параметър. Когато създавате общ тип, вие указвате не само тип, но и тип данни, с който ще работи. Генериците често се споменават от учащите Java като една от най-трудните части на Java за разбиране. „Основният ми проблем все още е свързан с генеричните лекарства. Много по-лесно е, когато имате методи с параметри, които да следвате, но става объркващо, когато трябва да напишете свой собствен“, каза анонимен обучаващ Java.

Съвети и препоръки

Ето едно мнение за Generics в Java от Рави Реди, опитен програмист и университетски професор: „Java Generics правят едно нещо, което C++ шаблоните не правят – прилагат безопасност на типа. Внедряването на C++ шаблони е прост трик за предпроцесор и не гарантира безопасност на типа. Generics в Java са като C++ шаблони, но с допълнителна безопасност на типа. И IMHO, безопасността на типа е основна характеристика на всяка добра среда за разработка. И да! Те могат да бъдат объркващи поради нашите умствени промени между параметрите и типовете. Но вярвам, че отделянето на време за овладяването им си струва усorето. Защото открих, че „мисля“ много по-добре в Java, след като разбрах интерфейсите и Generics.“

2. Многопоточност

Многонишковостта в Java е процес на изпълнение на две or повече нишки едновременно, за да се постигне максимално използване на процесора от приложението. Многонишковостта решава много важни задачи и може да направи нашите програми по-бързи. Често пъти по-бързо. Но това се смята за една от темите, по които много новоизучаващи Java са склонни да се забиват. Всичко това, защото многонишковостта също може да създаде проблеми, instead of да ги реши. Има два специфични проблема, които многонишковостта може да създаде: безизходица и състезателни условия. Безизходица е ситуация, при която множество нишки чакат ресурси, държани една от друга, и нито една от тях не може да продължи да работи. Състезание е грешка в дизайна на многонишкова система or приложение, където работата на системата or приложението зависи от реда, в който се изпълняват части от codeа.

Съвети и препоръки

Ето една добра препоръказа това How да се справите с многопоточността от S.Lott, софтуерен архитект и активен потребител на StackExchange, популярен уебсайт за въпроси и отговори: „Многопоточността е проста. Кодирането на приложение за многопоточност е много, много лесно. Има един прост трик и той е да използвате добре проектирана опашка от съобщения (не прехвърляйте своя собствена), за да предавате данни между нишки. Трудната част е да се опитате да имате множество нишки магически да актуализират споделен обект по няHowъв начин. Това е моментът, когато става податлив на грешки, защото хората не обръщат внимание на условията на състезанието, които присъстват. Много хора не използват опашки за съобщения и се опитват да актуализират споделени обекти и да си създават проблеми. Това, което става трудно, е проектирането на алгоритъм, който работи добре при предаване на данни между няколко опашки. Това е трудно.

3. Проблеми с Classpath

Грешките в Classpath също се считат за един от най-оплаканите проблеми, с които разработчиците на Java се сблъскват в ежедневната си работа. „Проблемите с Classpath могат да отнемат много време за отстраняване на грешки и обикновено се случват във възможно най-лошите моменти и места: преди издания и често в среди, където има малък or ниHowъв достъп от екипа за разработка. Те могат да се случат и на ниво IDE и да се превърнат в източник на намалена производителност“, казва Васко Ферейра, опитен Java/Javascript разработчик и автор на уроци, свързани с програмирането.

Съвети и препоръки

„Проблемите с Classpath не са толкова ниски or недостъпни, колкото може да изглеждат на пръв поглед. Всичко е свързано с наличието/несъществуването на zip файлове (jar) в определени директории, How да намерите тези директории и How да отстраните грешките в classpath в среди с ограничен достъп. Посредством познаването на ограничен набор от концепции като зареждащи класове, веригата за зареждане на класове и режимите Първи родител/Последен родител, тези проблеми могат да бъдат решени ефективно“, обяснява експертът.

4. Полиморфизъм и правилното му използване

Когато става въпрос за принципите на ООП, много хора казват, че им е било трудно да разберат полиморфизма. Полиморфизмът е способността на програмата да третира обекти със същия интерфейс по един и същи начин, без информация за конкретния тип на обекта. Въпреки че полиморфизмът е доста основна тема, тя е доста обширна и формира добра част от основата на Java. За много ученици полиморфизмът е първата трудност при изучаването на Java. Всичко това, защото има различни форми на полиморфизъм, използвани в различни контексти, което може да бъде объркващо.

Съвети и препоръки

Няма друг начин да се справите с полиморфизма, освен да го научите. Ето How обяснява Торбен Могенсен, който преподава програмиране в Университета на Копенхагентази концепция: „Просто претоварване: + може да означава Howто събиране на цели числа, събиране с плаваща запетая, така и (на някои езици) конкатенация на низове. Полиморфизъм на подтип: Ако B е подтип на (наследява от) A, всяка стойност от тип B може да се използва в контекст, който очаква стойност от тип A. Параметричен полиморфизъм: Тип може да бъде параметризиран с параметри на типа, така че вие ​​в различните контексти могат да предоставят различни аргументи на типа, така че вие ​​инстанциирате параметризирания тип към различни конкретни типове. Това също се нарича „шаблони“ or „генерични“ и е в OO езиците, които обикновено се определят с помощта на ъглови скоби (като T<A>). Полиморфизъм на интерфейса. Това е основно механизъм, при който ограничавате полиморфизма на подтипа до подтипове, които имплементират определен интерфейс, or параметричния полиморфизъм до параметри на типа, които имплементират определен интерфейс.“

5. Рефлексия

Отражението е механизъм за изследване на данни за програма, докато тя работи. Reflection ви позволява да изследвате информация за полета, методи и конструктори на класове. Той също така ви позволява да работите с типове, които не са присъствали по време на компorране, но които са станали достъпни по време на изпълнение. Отражението и логически последователният модел за издаване на информация за грешки правят възможно създаването на правилен динамичен code. Но за много хора не е толкова лесно да разберат How да използват Reflection.

Съвети и препоръки

„В случай на отражение и Java, отражението позволява на Java, която е проектирана да бъде статично въведена, да бъде динамично въведена. Динамичното писане не е присъщо зло. Да, позволява на програмиста да наруши определени OOP принципи, но в същото време позволява много мощни функции като прокси по време на изпълнение и инжектиране на зависимости. Да, Java ви позволява да се простреляте в крака с помощта на отражение. Трябва обаче много ясно да насочите пистолета към крака си, да свалите предпазителя и да дръпнете спусъка“, обяснява Джайеш Лалуани, опитен Java програмист и архитект на applications.

6. Входно/изходни потоци

Потоците ви позволяват да работите с всеки източник на данни: интернет, файловата система на вашия компютър or нещо друго. Потоците са универсален инструмент. Те позволяват на програмата да получава данни отвсякъде (входни потоци) и да ги изпраща навсякъде (изходни потоци). Задачата им е същата: да вземат данни от едно място и да ги изпратят на друго. Има два типа потоци: входни потоци (използвани за получаване на данни) и изходни потоци (за изпращане на данни). Това, което затруднява много хора да разберат използването на потоци, е фактът, че Java има множество I/O поток класове.

Съвети и препоръки

„Java има толкова много I/O поток класове главно поради два допринасящи фактора. Първото е наследството. Някои класове все още съществуват поради исторически причини и не са отхвърлени, тъй като не се считат за вредни. Второ, гъвкавост. Различните applications имат различни изисквания и по този начин имате множество опции в зависимост от вашите изисквания. Полезните абстракции внасят яснота, когато го прочетете, и с няколко реда code можете да направите много“, казва Йонас Мелин, експерт по Java от Швеция. Кои аспекти на Java намерихте за най-трудни за разбиране or останахте за известно време? Споделете опита си в коментарите.
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION