JavaRush /Java блогу /Random-KY /Java үйрөнө баштагандардын эң көп кездешкен көйгөйлөрү

Java үйрөнө баштагандардын эң көп кездешкен көйгөйлөрү

Группада жарыяланган
Макаланы түшүнүү үчүн талап кылынган бorм деңгээли: башталгыч. Сиз Java синтаксисинин тапшырмасын изилдөө процессиндесиз жана анын баштапкы деңгээлине жакындап калдыңыз. Java тorн үйрөнө баштагандардын эң көп кездешкен көйгөйлөрү - 1Сиз жаңы эле Java тorн үйрөнө баштадыңыз. Сиз бир корнукопиядан алынган терминдер менен бомбаланып жатасыз. Сизге тонналаган техникалык маалыматтар жүктөлөт, кээде сиз үч карагайда адашып каласыз. Мага ишен, сен буга чейин эле программалоо менен алектенип калгансың, ДАЙЫМ УШУНДАЙ БОЛОТ (ушул маалда экрандан коркунучтуу күлкү угулуп, сүйлөмдүн ортосунан кесилген жайбаракат үн шыбырап, “Чурка... мурун өзүңдү сакта. кеч...»). Сиз эң мыкты иштеп чыгуучу болсоңуз да, мүчүлүштүктөр программалоо өмүрүңүздүн аягына чейин сизди кыйнашат. Бирок, бул сезилгендей коркунучтуу эмес.
Эгер сиз JavaRushти жаңыдан үйрөнө баштаган болсоңуз, анда сиз макалада айтылган көйгөйлөргө туш болгонсуз. Кандай болгон күндө да, биз Java тorн үйрөнгөнүңүздүн алгачкы айларында болгон көйгөйлөрдү сүрөттөгөн комментарийлерди кабыл алабыз.

0-деңгээл маселеси: Салыштыруу оператору (==) жана дайындоо оператору (=) менен чаташуу.

Бул башка программалоо тилдеринен которулгандар үчүн өтө кеңири таралган көйгөй. (=)Ал эми жалпысынан башталгыч класстан бери биз бул бирдей белги экенине көнүп калганбыз . Жөнөкөй ыкманы эстеп калууга болот: эгер сиз баалуулуктардын бирине гана маани берериңизди билсеңиз (бирин экинчисине дайындайсыз) сиз бир гана " =" белгисин колдоносуз, антпесе бардык өзгөрмөлөргө маани берсеңиз. жана баалуулуктарды (сиз аларды салыштырасыз) сизге кош " ==" белгиси керек.

Маселе: Саптын эквиваленттүүлүгүн текшерүү үчүн салыштыруу операторун (==) колдонуу

Эмне кылуу керек: Эсиңизде болсун, эч бир Java an objectисинин эквиваленттүүлүгүн колдонуу менен текшерүү мүмкүн эмес(==) , анткени бул оператор примитивдүү типтердин теңдигин текшерүү үчүн иштелип чыккан.
Java тorн үйрөнө баштагандардын эң көп кездешкен көйгөйлөрү - 2
an objectтер үчүн колдонуу керек .equals(). Ал эми StringJava тorнде бул an object гана эмес (жана immutable).
деп белгиленген an object Immutable түзүлгөндөн кийин абалын өзгөртүү мүмкүн эмес an object болуп саналат. Javaда бул класстын бардык мисал талаалары примитивдер (же ошондой эле ) катары белгиленгенин билдирет . finalimmutable

Маселе: Циклдеги сапты бириктирүү

Муну өзүңүз аракет кылбаңыз! Саптар бириктирилген сайын жаңы an object түзүлөт String(жогоруда билгенибиздей, саптар immutableөзгөрүлбөйт). Кайсы бир убакта эс тутумуңуз түгөнүп калат же программа аяктоо үчүн өтө көп убакытты талап кыла баштайт. Чечим. Циклдеги мазмунду бириктиргенде StringBuilderанын ордуна колдонуңуз . StringКласс StringBuilderсимволдор сабына көп өзгөртүүлөрдү киргизүү керек болгондо колдонулат. Жана мындай саптар, айырмаланып String, андай эмес immutable.

Көйгөй: NullPointerException

Мындай өзгөчөлүк биз нөл көрсөткүчтү колдонууга аракет кылганда, nullбиз чындыгында реалдуу an object керек болгондо пайда болот.
Бардык примитивдүү типтердин демейки маанилери бар. Ошентип, y intболот 0, жана у booleanболот false. Ар кандай шилтеме түрлөрүнүн, башкача айтканда, an objectтердин демейки мааниси null. Бул an object же тип эмес, бул өзгөчө баалуулук. Бул негизинен "бул жерде эч нерсе жок" дегенди билдирет.
Java тorн үйрөнө баштагандардын эң көп кездешкен көйгөйлөрү - 3
Эмне кылуу керек: Эгер сиздин codeуңуз кандайдыр бир учурда an objectиңиздин маанисин кабыл ала тургандай кылып жазылган болсо null, сиз "текшерүү null" белгисин кошушуңуз керек, өзгөчө an objectти өзүңүз түзбөй жатсаңыз. Ошондой эле эсиңизде болсун, 's топтомуна караганда бош коллекцияларды кайтаруу жакшыраак null. Алуучу жана орнотуучулар үчүн валидацияны кошсоңуз жакшы болмок.

Маселе: эмнегедир if / while / for цикли иштебей жатат

if (something.equals («что-то еще»)); {// <---- корень зла!!!
     System.out.println («Почему я не работаю???»);
}
Бул жерде эмне болду? Бул жөнөкөй: кошумча үтүрлүү чекит жүз миңдеген жаңы Java программисттеринин канын бузуп салды. Ооба, андан кийин сага кереги жок if (). Тил көз карашынан алганда, мындай синтаксис абдан алгылыктуу, ошондуктан компилятор ага нааразы болбойт. Бирок ал шарттуу билдирүүнү токтотот жана блоктун ичиндеги code {}эч качан жогорудагы шартты канааттандырbyte.
Java тorн үйрөнө баштагандардын эң көп кездешкен көйгөйлөрү - 4
Чечим: Дизайн логикасын унутпаңыз. “ ;” белгиси белгилүү бир блоктун аягы дегенди билдирет, бирок бул жерде баары жаңыдан башталып жатат.

Көйгөй: Статикалык эмес мүчө өзгөрмөлөргө статикалык ыкмалардан кирүүгө аракет кылуу (мисалы, негизги)

Solution . Бул маселе концепциянын өзүн түшүнүүгө байланыштуу static. Эгерде метод ушул сөз менен белгиленсе, бул негизги методду чакыруу үчүн классты түзүүнүн кереги жок дегенди билдирет. Демек, чечим - "статиканы" жакшы түшүнүү жана алардын маңызын түшүнүү.

Маселе: Учурдагы китепканаларды жана куралдарды иштеп чыгуу менен дөңгөлөктү кайра ойлоп табууга аракет кылуу

Чечим. Бул чындыгында анчалык деле көйгөй эмес. үйрөнчүктөр үчүн, бул пайдалуу көнүгүү болуп саналат. Бирок, эгер сиз жыйынтыкка көңүл бургуңуз келсе, мисалы, абоненттердин ыңгайлуу базасын түзүү, анда телефон китепчесинде абонентти издөө сиздин арызыңыздын натыйжаларынын бири гана. Бул учурда бинардык издөө алгоритмин жазуунун кереги жок. Учурдагысын колдонуңуз (сизди ишендиребиз, аны кимдир бирөө сизге чейин жазып койгон жана ал стандарттык китепканаларда бар). Ошентип, Oracle documentтериндеги Java стандарттык китепканаларын изилдеңиз. Google'ду үйрөнүңүз, Stack Overflow окууга көнүңүз жана JavaRush жардамында суроолорду бериңиз ! ...Албетте, булар башталгычтардын бардык проблемалары эмес. Комментарийлерде өзүңүздүн оюңузду сүрөттөңүз! Сиз Java менен байланышкан макалаларды окугуңуз келеби? Java Developer тобуна кошулуңуз . Бул жерде көп кызыктуу нерселер бар.
Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION