JavaRush /Java blogi /Random-UZ /Java-da ibtidoiy turlar: ular unchalik ibtidoiy emas
Viacheslav
Daraja

Java-da ibtidoiy turlar: ular unchalik ibtidoiy emas

Guruhda nashr etilgan

Kirish

Ilovalarni ishlab chiqishni ba'zi ma'lumotlar bilan ishlash, to'g'rirog'i, ularni saqlash va qayta ishlash deb hisoblash mumkin. Bugun men birinchi muhim jihatga to'xtalib o'tmoqchiman. Java-da ma'lumotlar qanday saqlanadi? Bu erda ikkita mumkin bo'lgan format mavjud: mos yozuvlar va ibtidoiy ma'lumotlar turlari. Keling, ibtidoiy tiplarning turlari va ular bilan ishlash imkoniyatlari haqida gapiraylik (nima bo'lishidan qat'iy nazar, bu bizning dasturlash tilini bilishimizning asosidir). Java ibtidoiy ma'lumotlar turlari hamma narsa tayanadigan poydevordir. Yo'q, men umuman bo'rttirib aytmayapman. Oracle-da primitivlarga bag'ishlangan alohida qo'llanma mavjud: ibtidoiy ma'lumotlar turlari Java-da ibtidoiy tiplar: Ular unchalik ibtidoiy emas - 1 Bir oz tarix. Boshida nol bor edi. Lekin nol zerikarli. Va keyin bit paydo bo'ldi . Nega uni shunday chaqirishdi? U " binary digi t " (ikkilik raqam) qisqartmasidan shunday nomlangan . Ya'ni, bu faqat ikkita ma'noga ega. Va nol bo'lgani uchun, endi u 0 yoki 1 bo'lishi mantiqan to'g'ri keladi. Va hayot yanada qiziqarli bo'ldi. Bitlar suruv bo'lib to'plana boshladi. Va bu suruvlar bayt (bayt) deb atala boshlandi . Zamonaviy dunyoda bayt = 2 uchinchi kuchga, ya'ni. 8. Ammo ma'lum bo'lishicha, bu har doim ham shunday bo'lmagan. Bayt nomi qayerdan kelib chiqqanligi haqida ko'plab taxminlar, afsonalar va mish-mishlar mavjud. Ba'zilar hamma narsa o'sha davr kodlari bilan bog'liq deb o'ylashadi, boshqalari esa ma'lumotni shu tarzda o'qish foydaliroq deb o'ylashadi. Bayt eng kichik manzilli xotira qismidir. Xotirada noyob manzillarga ega bo'lgan baytlardir. ByTe - bu Binary Term - mashina so'zining qisqartmasi degan afsona bor. Mashina so'zi - sodda qilib aytganda, bu protsessor bitta operatsiyada qayta ishlay oladigan ma'lumotlar miqdori. Ilgari, mashina so'zining hajmi eng kichik manzilli xotira bilan bir xil edi. Java-da o'zgaruvchilar faqat bayt qiymatlarini saqlashi mumkin. Yuqorida aytib o'tganimdek, Java-da o'zgaruvchilarning ikki turi mavjud:
  • java ibtidoiy turlari to'g'ridan-to'g'ri ma'lumotlar baytlari qiymatini saqlaydi (bu primitivlarning turlarini quyida batafsilroq ko'rib chiqamiz);
  • mos yozuvlar turi, ob'ekt manzilining baytlarini Heap-da saqlaydi, ya'ni ushbu o'zgaruvchilar orqali biz to'g'ridan-to'g'ri ob'ektning o'ziga kirishga erishamiz (ob'ekt uchun masofadan boshqarish pultining bir turi)

Java bayti

Shunday qilib, tarix bizga bayt berdi - biz foydalanishimiz mumkin bo'lgan minimal xotira miqdori. Va u 8 bitdan iborat. Java-dagi eng kichik butun sonli ma'lumotlar turi baytdir. Bu imzolangan 8 bitli tur. Bu nima degani? Keling, hisoblaylik. 2^8 - 256. Ammo agar biz salbiy sonni xohlasak nima bo'ladi? Va Java ishlab chiquvchilari "10000000" ikkilik kodi -128 ni ifodalaydi, ya'ni eng muhim bit (eng chap bit) raqam manfiy yoki yo'qligini ko'rsatadi, deb qaror qildi. Ikkilik "0111 1111" 127 ga teng. Ya'ni 128 ni hech qanday tarzda belgilash mumkin emas, chunki -128 bo'ladi. To'liq hisob bu javobda berilgan: Nima uchun Java-da baytlar oralig'i -128 dan 127 gacha? Raqamlar qanday olinganligini tushunish uchun siz rasmga qarashingiz kerak:
Java-da ibtidoiy tiplar: Ular unchalik ibtidoiy emas - 2
Shunga ko'ra, o'lchamini hisoblash uchun 2 ^ (8-1) = 128. Bu minimal chegara (va uning minusiga ega) -128 bo'ladi degan ma'noni anglatadi. Va maksimal 128 - 1 (nolni ayirish). Ya'ni, maksimal 127 bo'ladi. Aslida, biz bayt turi bilan tez-tez "yuqori darajada" ishlamaymiz. Bu asosan "xom" ma'lumotlarni qayta ishlashdir. Masalan, tarmoq orqali ma'lumotlarni uzatish bilan ishlashda, ma'lumotlar qandaydir aloqa kanali orqali uzatiladigan 0 va 1 lar to'plami bo'lsa. Yoki fayllardan ma'lumotlarni o'qiyotganda. Ulardan satrlar va kodlashlar bilan ishlashda ham foydalanish mumkin. Misol kod:
public static void main(String []args){
        byte value = 2;
        byte shortByteValue = 0b10; // 2
        System.out.println(shortByteValue);
        // Начиная с JDK7 мы можем разделять литералы подчёркиваниями
        byte minByteValue = (byte) 0B1000_0000; // -128
        byte maxByteValue = (byte) 0b0111_1111; // 127
        byte minusByteValue = (byte) 0b1111_1111; // -128 + 127
        System.out.println(minusByteValue);
        System.out.println(minByteValue + " to " + maxByteValue);
}
Aytgancha, bayt turidan foydalanish xotira sarfini kamaytiradi deb o'ylamang. Bayt asosan ma'lumotlarni massivlarda saqlashda xotira sarfini kamaytirish uchun ishlatiladi (masalan, tarmoq orqali olingan ma'lumotlarni bayt massivi sifatida amalga oshiriladigan ba'zi buferda saqlash). Ammo ma'lumotlar ustida operatsiyalarni bajarishda baytdan foydalanish sizning kutganingizga mos kelmaydi. Bu Java Virtual Machine (JVM) ning amalga oshirilishi bilan bog'liq. Aksariyat tizimlar 32 yoki 64 bit bo'lganligi sababli, hisob-kitoblar paytida bayt va qisqa vaqtlar 32 bitli intga aylantiriladi, bu haqda keyinroq gaplashamiz. Bu hisob-kitoblarni osonlashtiradi. Batafsil ma'lumot uchun bayt qo'shilishi java tili qoidalari tufayli yoki jvm tufayli int ga o'zgartiriladimi? . Javobda JLS (Java Language Specification) ga havolalar ham mavjud. Bundan tashqari, baytni noto'g'ri joyda ishlatish noqulay daqiqalarga olib kelishi mumkin:
public static void main(String []args){
        for (byte i = 1; i <= 200; i++) {
            System.out.println(i);
        }
}
Bu erda halqa bo'ladi. Hisoblagich qiymati maksimal (127) ga yetganligi sababli, toshib ketish sodir bo'ladi va qiymat -128 bo'ladi. Va biz hech qachon tsikldan chiqmaymiz.

qisqa

Bayt qiymatlari chegarasi juda kichik. Shuning uchun, keyingi ma'lumotlar turi uchun biz bit sonini ikki baravar oshirishga qaror qildik. Ya'ni, endi u 8 bit emas, balki 16. Ya'ni 2 bayt. Qiymatlarni xuddi shu tarzda hisoblash mumkin. 2^(16-1) = 2^15 = 32768. Bu diapazon -32768 dan 32767 gacha degan ma'noni anglatadi. U har qanday maxsus holatlar uchun juda kamdan-kam qo'llaniladi. Java tili hujjatlari bizga aytganidek: " siz katta massivlarda xotirani saqlash uchun qisqa foydalanishingiz mumkin ."

int

Shunday qilib, biz eng ko'p ishlatiladigan turga o'tdik. U 32 bit yoki 4 baytni oladi. Umuman olganda, biz ikki barobarni davom ettirmoqdamiz. Qiymatlar diapazoni -2^31 dan 2^31-1 gacha.

Maksimal int qiymati

int 2147483648 ning maksimal qiymati 1 ga teng, bu umuman kichik emas. Yuqorida aytib o'tilganidek, hisob-kitoblarni optimallashtirish uchun, chunki Zamonaviy kompyuterlar uchun ularning bit sig'imini hisobga olgan holda hisoblash qulayroqdir; ma'lumotlarni bilvosita int ga aylantirish mumkin. Mana oddiy misol:
byte a = 1;
byte b = 2;
byte result = a + b;
Bunday zararsiz kod, lekin biz xatoga yo'l qo'yamiz: "xato: mos kelmaydigan turlar: mumkin bo'lgan yo'qolgan konvertatsiya intdan baytga." Siz uni bayt natijasiga tuzatishingiz kerak bo'ladi = (bayt) (a + b); Va yana bir zararsiz misol. Quyidagi kodni ishga tushirsak nima bo'ladi?
int value = 4;
System.out.println(8/value);
System.out.println(9/value);
System.out.println(10/value);
System.out.println(11/value);
Va biz xulosa chiqaramiz
2
2
2
2
*vahima tovushlari*
Gap shundaki, int qiymatlari bilan ishlaganda, qolgan qismi tashlab yuboriladi, faqat butun qismi qoladi (bunday hollarda double dan foydalanish yaxshidir).

uzoq

Biz ikki baravar oshirishda davom etamiz. Biz 32 ni 2 ga ko'paytiramiz va 64 bitni olamiz. An'anaga ko'ra, bu 4 * 2, ya'ni 8 bayt. Qiymatlar diapazoni -2^63 dan 2^63 gacha - 1. Ko'proq etarli. Bu tur katta, katta sonlarni sanash imkonini beradi. Ko'pincha vaqt bilan ishlashda ishlatiladi. Yoki, masalan, uzoq masofalarda. Raqam uzun ekanligini ko'rsatish uchun raqamdan keyin L - Long harfini qo'ying. Misol:
long longValue = 4;
longValue = 1l; // Не ошибка, но плохо читается
longValue = 2L; // Идеально
Men o'zimdan ustun bo'lishni xohlayman. Keyinchalik, ibtidoiylar bilan ob'ekt sifatida ishlashga imkon beradigan mos keladigan o'ramlar mavjudligini ko'rib chiqamiz. Ammo qiziqarli xususiyat bor. Mana bir misol: Xuddi shu Tutorialspoint onlayn kompilyatoridan foydalanib, quyidagi kodni tekshirishingiz mumkin:
public class HelloWorld {

     public static void main(String []args) {
        printLong(4);
     }

    public static void printLong(long longValue) {
        System.out.println(longValue);
    }
}
Ushbu kod xatosiz ishlaydi, hamma narsa yaxshi. Lekin printLong usulidagi tur long dan Long ga almashtirilishi bilanoq (ya'ni tip ibtidoiy emas, ob'ektga aylanadi), Java uchun biz qaysi parametrdan o'tayotganimiz tushunarsiz bo'lib qoladi. U int uzatilayotganini taxmin qila boshlaydi va xatolik yuz beradi. Shuning uchun, usul bo'lsa, 4L ni aniq ko'rsatish kerak bo'ladi. Ko'pincha ma'lumotlar bazalari bilan ishlashda identifikator sifatida long ishlatiladi.

Java float va Java double

Ushbu turlar suzuvchi nuqta turlari deb ataladi. Ya'ni, bu butun son turlari emas. Float turi 32 bit (int kabi) va double ikki tomonlama aniqlik turi deb ataladi, shuning uchun u 64 bit (xuddi biz yoqtirgandek 2 ga ko'paytiring). Misol:
public static void main(String []args){
        // float floatValue = 2.3; lossy conversion from double to float
        float floatValue = 2.3F;
        floatValue = 2.3f;
        double doubleValue = 2.3;
        System.out.println(floatValue);
        double cinema = 7D;
}
Va bu erda qiymatlar farqiga misol (turi aniqligi tufayli):
public static void main(String []args){
        float piValue = (float)Math.PI;
        double piValueExt = Math.PI;
        System.out.println("Float value: " + piValue );
        System.out.println("Double value: " + piValueExt );
 }
Bu ibtidoiy turlar, masalan, matematikada qo'llaniladi. Mana dalil, PI sonini hisoblash uchun doimiy . Umuman olganda, siz Math sinfining API-ga qarashingiz mumkin. Yana nima muhim va qiziqarli bo'lishi kerak: hatto hujjatlarda shunday deyilgan: “ Bu ma'lumotlar turi hech qachon valyuta kabi aniq qiymatlar uchun ishlatilmasligi kerak. Buning uchun java.math.BigDecimal sinfidan foydalanishingiz kerak bo'ladi. Raqamlar va satrlar BigDecimal va Java platformasi tomonidan taqdim etilgan boshqa foydali sinflarni qamrab oladi. " Ya'ni, float va double-dagi pullarni hisoblash kerak emas. NASAdagi ish misolidan foydalanib, aniqlik haqida misol: Java BigDecimal, Yuqori aniqlikdagi hisob-kitoblar bilan shug'ullanish Xo'sh, buni o'zingiz his qilish uchun:
public static void main(String []args){
        float amount = 1.0000005F;
        float avalue = 0.0000004F;
        float result = amount - avalue;
        System.out.println(result);
}
Ushbu misolga amal qiling va keyin 5 va 4 raqamlari oldiga 0 qo'shing. Va siz hamma dahshatni ko'rasiz) Rus tilida float va double haqida qiziqarli ma'ruza mavjud: https://youtu.be/1RCn5ruN1fk Ishlash misollari BigDecimal bilan bu yerda ko'rish mumkin: BigDecimal bilan sent ishlang Aytgancha, float va double raqamlardan ko'proq narsani qaytarishi mumkin. Misol uchun, quyidagi misol Infinity qaytaradi:
public static void main(String []args){
        double positive_infinity = 12.0 / 0;
        System.out.println(positive_infinity);
}
Va bu NANni qaytaradi:
public static void main(String []args){
        double positive_infinity = 12.0 / 0;
        double negative_infinity = -15.0 / 0;
        System.out.println(positive_infinity + negative_infinity);
}
Bu cheksizlik haqida aniq. NaN nima? Bu raqam emas , ya'ni natijani hisoblash mumkin emas va raqam emas. Mana bir misol: Biz -4 ning kvadrat ildizini hisoblamoqchimiz. 4 ning kvadrat ildizi 2 ga teng. Ya'ni 2 ni kvadratga aylantirish kerak va keyin 4 ni olamiz. -4 ni olish uchun nimani kvadrat qilish kerak? Bu ishlamaydi, chunki ... agar ijobiy raqam bo'lsa, u holda qoladi. Va agar u salbiy bo'lsa, minus minus ortiqcha beradi. Ya'ni, hisoblash mumkin emas.
public static void main(String []args){
        double sqrt = Math.sqrt(-4);
        System.out.println(sqrt + 1);
        if (Double.isNaN(sqrt)) {
           System.out.println("So sad");
        }
        System.out.println(Double.NaN == sqrt);
}
Bu yerda suzuvchi nuqtali raqamlar mavzusiga yana bir ajoyib sharh: Sizning fikringiz qayerda?
Yana nimani o'qish kerak:

Java boolean

Keyingi tur mantiqiy (mantiqiy tip). U faqat kalit so'zlar bo'lgan haqiqiy yoki noto'g'ri qiymatlarni qabul qilishi mumkin. while tsikllari kabi mantiqiy operatsiyalarda va if, switch yordamida tarmoqlanishda ishlatiladi. Bu erda qanday qiziqarli narsalarni topishingiz mumkin? Xo'sh, masalan, nazariy jihatdan bizga faqat 1 bit ma'lumot kerak, 0 yoki 1, ya'ni haqiqat yoki noto'g'ri. Lekin, aslida, Boolean ko'proq xotirani egallaydi va bu aniq JVM dasturiga bog'liq bo'ladi. Odatda bu int bilan bir xil turadi. Yana bir variant - BitSet-dan foydalanish. Mana Java asoslari kitobidan qisqacha tavsif: BitSet

Java belgisi

Endi biz oxirgi ibtidoiy turga yetdik. Shunday qilib, chardagi ma'lumotlar 16 bitni egallaydi va belgini tavsiflaydi. Java char uchun Unicode kodlashdan foydalanadi. Belgini ikkita jadvalga muvofiq o'rnatish mumkin (uni bu erda ko'rishingiz mumkin ):
  • Unicode belgilar jadvali
  • ASCII belgilar jadvali
Java'da ibtidoiy tiplar: Ular unchalik ibtidoiy emas - 3
Studiyadagi misol:
public static void main(String[] args) {
    char symbol = '\u0066'; // Unicode
    symbol = 102; // ASCII
    System.out.println(symbol);
}
Aytgancha, char mohiyatan raqam bo'lib, sum kabi matematik operatsiyalarni qo'llab-quvvatlaydi. Va ba'zida bu kulgili oqibatlarga olib kelishi mumkin:
public class HelloWorld{

    public static void main(String []args){
        String costForPrint = "5$";
        System.out.println("Цена только для вас " +
        + costForPrint.charAt(0) + getCurrencyName(costForPrint.charAt(1)));
    }

    public static String getCurrencyName(char symbol) {
        if (symbol == '$') {
            return " долларов";
        } else {
            throw new UnsupportedOperationException("Not implemented yet");
        }
    }

}
Men tutorialspoint dan onlayn IDE ni tekshirishni tavsiya qilaman . Konferensiyalarning birida bu boshqotirmani ko‘rganimda, ko‘nglim ko‘tarildi. Misol sizga ham yoqadi deb umid qilaman) YANGILANGAN: Bu Joker 2017 da boʻlgan, hisobot: " Java Puzzlers NG S03 - Hammangiz qayerdan kelasiz?! "

Harflar

Literal aniq belgilangan qiymatdir. Literallardan foydalanib, siz turli xil raqam tizimlarida qiymatlarni belgilashingiz mumkin:
  • O'nlik tizim: 10
  • O'n oltilik: 0x1F4, 0x bilan boshlanadi
  • Sakkizlik tizim: 010, noldan boshlanadi.
  • Ikkilik tizim (Java7 dan beri): 0b101, 0b da boshlanadi
Sakkizlik tizim haqida bir oz ko'proq to'xtalib o'tgan bo'lardim, chunki bu kulgili:
int costInDollars = 08;
Ushbu kod qatori kompilyatsiya qilinmaydi:
error: integer number too large: 08
Bu bema'nilik kabi ko'rinadi. Endi ikkilik va sakkizlik tizimlar haqida eslaylik. Ikkilik tizimda ikkitasi yo'q, chunki ikkita qiymat mavjud (0 dan boshlab). Sakkizlik tizim esa noldan boshlab 8 ta qiymatga ega. Ya'ni, 8 qiymatining o'zi mavjud emas. Shuning uchun, bu birinchi qarashda bema'ni ko'rinadigan xato. Shuni yodda tutish kerakki, qiymatlarni tarjima qilishning "kuzatuv" qoidasi:
Java-da ibtidoiy tiplar: Ular unchalik ibtidoiy emas - 4

O'rash sinflari

Java-dagi ibtidoiylar o'zlarining o'rash sinflariga ega bo'lib, ular bilan ob'ektlar sifatida ishlashingiz mumkin. Ya'ni, har bir ibtidoiy tip uchun mos mos yozuvlar turi mavjud. Java-da ibtidoiy tiplar: Ular unchalik ibtidoiy emas - 5O'rash sinflari o'zgarmasdir: bu ob'ekt yaratilgandan so'ng uning holatini - qiymat maydonining qiymatini o'zgartirib bo'lmaydi. O'rash sinflari yakuniy deb e'lon qilinadi: ob'ektlar, aytganda, faqat o'qish uchun. Shuni ham aytib o'tmoqchimanki, bu sinflardan meros olish mumkin emas. Java avtomatik ravishda ibtidoiy turlar va ularning o'ramlari o'rtasida konvertatsiya qiladi:
Integer x = 9;          // autoboxing
int n = new Integer(3); // unboxing
Ibtidoiy turlarni mos yozuvlar turlariga (int->Integer) aylantirish jarayoni autoboxing , teskarisi esa unboxing deb ataladi . Ushbu sinflar ob'ekt ichida ibtidoiyni saqlashga imkon beradi va ob'ektning o'zi Ob'ekt kabi harakat qiladi (yaxshi, har qanday boshqa ob'ekt kabi). Bularning barchasi bilan biz juda ko'p turli xil, foydali statik usullarni olamiz, masalan, raqamlarni taqqoslash, belgini registrga o'tkazish, belgi harf yoki raqam ekanligini aniqlash, minimal raqamni qidirish va hokazo. Taqdim etilgan funktsiyalar to'plami faqat o'ramning o'ziga bog'liq. int uchun o'rashni o'zingiz amalga oshirishga misol:
public class CustomerInt {

   private final int value;

   public CustomerInt(int value) {
       this.value = value;
   }

   public int getValue() {
       return value;
   }
}
Java.lang asosiy paketida allaqachon Boolean, Byte, Short, Character, Integer, Float, Long, Double sinflarining ilovalari mavjud bo'lib, biz o'zimiz uchun hech narsa yaratishimiz shart emas, faqat tayyor bo'lgandan qayta foydalanishimiz kerak. birlar. Misol uchun, bunday sinflar bizga, aytaylik, Ro'yxat yaratish qobiliyatini beradi , chunki Ro'yxat faqat ob'ektlarni o'z ichiga olishi kerak, ularda primitivlar mavjud emas. Primitiv turdagi qiymatni aylantirish uchun statik valueOf usullari mavjud, masalan, Integer.valueOf(4) Integer tipidagi ob'ektni qaytaradi. Teskari konvertatsiya qilish uchun intValue(), longValue() va boshqalar usullari mavjud. Kompilyator o'z-o'zidan valueOf va *Value qo'ng'iroqlarini kiritadi, bu autoboxing va autounboxingning mohiyatidir. Yuqorida keltirilgan avtomatik qadoqlash va avtomatik ochish misoli aslida qanday ko'rinishga ega:
Integer x = Integer.valueOf(9);
int n = new Integer(3).intValue();
Ushbu maqolada autopacking va autounpacking haqida ko'proq ma'lumot olishingiz mumkin .

Cast

При работе с примитивами существует такое понятие How приведение типов, одно из не очень приятных свойств C++, тем не менее приведение типов сохранено и в языке Java. Иногда мы сталкиваемся с такими ситуациями, когда нам нужно совершать взаимодействия с данными разных типов. И очень хорошо, что в некоторых ситуациях это возможно. В случае с ссылочными переменными, там свои особенности, связанные с полиморфизмом и наследованием, но сегодня мы рассматриваем простые типы и соответственно приведение простых типов. Существует преобразование с расширением и преобразование сужающее. Всё на самом деле просто. Если тип данных становится больше (допустим, был int, а стал long), то тип становится шире (из 32 бит становится 64). И в этом случае мы не рискуем потерять данные, т.к. если влезло в int, то в long влезет тем более, поэтому данное приведение мы не замечаем, так How оно осуществляется автоматически. А вот в обратную сторону преобразование требует явного указания от нас, данное приведение типа называется — сужение. Так сказать, чтобы мы сами сказали: «Да, я даю себе отчёт в этом. В случае чего — виноват сам».
public static void main(String []args){
   int intValue = 128;
   byte value = (byte)intValue;
   System.out.println(value);
}
Whatбы потом в таком случае не говорor что «Ваша Джава плохая», когда получат внезапно -128 instead of 128 ) Мы ведь помним, что в byteе 127 верхнее meaning и всё что находилось выше него соответственно можно потерять. Когда мы явно превратor наш int в byte, то произошло переполнение и meaning стало -128.

Область видимости

Это то место в codeе, где данная переменная будет выполнять свои функции и хранить в себе Howое-то meaning. Когда же эта область закончится, переменная перестанет существовать и будет стерта из памяти и. How уже можно догадаться, посмотреть or получить ее meaning будет невозможно! Так что же это такое — область видимости? Java-da ibtidoiy tiplar: Ular unchalik ibtidoiy emas - 6Область определяется "блоком" — вообще всякой областью, замкнутой в фигурные скобки, выход за которые сулит удаление данных объявленных в ней. Или How минимум — сокрытие их от других блоков, открытых вне текущего. В Java область видимости определяется двумя основными способами:
  • Классом.
  • Методом.
Как я и сказал, переменная не видна codeу, если она определена за пределами блока, в котором она была инициализирована. Смотрим пример:
int x;
x = 6;
if (x >= 4) {
   int y = 3;
}
x = y;// переменная y здесь не видна!
И How итог мы получим ошибку:

Error:(10, 21) java: cannot find symbol
  symbol:   variable y
  location: class com.javaRush.test.type.Main
Области видимости могут быть вложенными (если мы объявor переменную в первом, внешнем блоке, то во внутреннем она будет видна).

Заключение

Сегодня мы познакомorсь с восемью примитивными типами в Java. Эти типы можно разделить на четыре группы:
  • Целые числа: byte, short, int, long — представляют собой целые числа со знаком.
  • Числа с плавающей точкой — эта группа включает себе float и double — типы, которые хранят числа с точностью до определённого знака после запятой.
  • Булевы значения — boolean — хранят значения типа "истина/ложь".
  • Belgilar - bu guruh belgilar turini o'z ichiga oladi.
Yuqoridagi matndan ko'rinib turibdiki, Java-dagi primitivlar unchalik ibtidoiy emas va ko'p muammolarni samarali hal qilish imkonini beradi. Ammo bu, shuningdek, dasturimizda oldindan aytib bo'lmaydigan xatti-harakatlarga duch kelishni istamasak, yodda tutishimiz kerak bo'lgan ba'zi xususiyatlarni taqdim etadi. Ular aytganidek, hamma narsa uchun to'lash kerak. Agar biz "tik" (keng) diapazonga ega bo'lgan ibtidoiyni istasak - uzoqqa o'xshash narsa - biz xotiraning katta qismini va teskari yo'nalishda ajratishni qurbon qilamiz. Xotirani tejash va baytlardan foydalanish orqali biz -128 dan 127 gacha cheklangan diapazonni olamiz.
Izohlar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION