CodeGym /Java блог /Случаен /Java променливи
John Squirrels
Ниво
San Francisco

Java променливи

Публикувано в групата
В тази статия ще обясним на всички учещи Java Howво представляват Java променливите и How да работят с тях.

Какво е Java променлива

Една променлива в Java може да се разглежда като кутия. Тази "кутия" има определен размер: паметта, която е разпределена за нея. Колко памет ще бъде разпределена зависи от типа на променливата, но ще говорим за това малко по-късно. В същото време размерът на самата кутия не може да бъде променен след създаването й, но съдържанието може. Кутията може да е празна. Можете да "вмъкнете" няHowва стойност в него и след това да извлечете и да поставите друга стойност. По този начин променливата е поле, което съхранява стойности на данни по време на изпълнението на Java програма. Тази кутия има важни функции:
  • винаги може да съдържа само една стойност (or може да бъде празна, в който случай ще съдържа стойността по подразбиране),
  • Има тип данни. Размерът му зависи от вида на данните, Howто и от това коя конкретна област от паметта е отделена за него (къде се намира).
Променливи в Java - 1

Как да декларираме променливи

За да декларирате променливи в Java, трябва да посочите техния тип и име. Ето пример за деклариране на три променливи:

int myInt;
String s;
Object variableName;
Тук int , String и Object са типът данни, а myInt , s , variableName са имена на променливи. Типът данни трябва да бъде избран въз основа на нуждите на програмата и е по-добре да изберете име, така че да е ясно за Howво става въпрос. Разбира се, за начинаещи не е толкова строго, но в големи проекти имена на променливи като 's' могат да влошат четливостта на codeа. Така че е по-добре да свикнете да именувате променливите по начин, който да ви изясни за Howво служат от самото начало. В рамките на разумното, разбира се.

Как да инициализирате променливи

Когато декларирате променлива, вие разпределяте памет за нея. Инициализацията означава, че "поставяте" определена стойност в "кутията". Това може да стане веднага по време на декларирането на променливата or по-късно. Освен това стойността на променлива може да се промени по време на изпълнение на програмата. Пример:

public class VariableTest {
    public static void main(String[] args) {
        int myInt = 5;
        String s;
        s = "init";
        System.out.println(s);
        s = s+5;
        System.out.println(s);
    }
}
Тук декларирахме и инициализирахме променливата myInt в един ред, незабавно заделяйки памет за нея (32 бита за всяко int число), дадохме й име и след това поставихме стойност 5 в разпределената памет. След това декларирахме, че заделяме място в паметта за низа s и вече отделна команда постави стойността „init“ в него. След това разпечатахме низа и променихме стойността на променливата s . В тази програма отпечатахме редовете и ако я стартирате, ще видите следния резултат:
init init5

Типове данни на променливи в Java: примитивни и непримитивни

Типовете данни на променливите в Java са разделени на две групи:
  • Примитивните типове данни включват byte , short , int , long , float , double , boolean и char
  • Непримитивни типове данни като String , Arrays и Classes
Ето пример за работа с променливи:

public class VariableTest {
   public static void main(String[] args) {

       int myInt = - 5;               // integer (whole number)
       float myFloat = 2.718281828459045f;    // Floating point number
       char myLetter = 'a';         // character
       boolean myBool = true;       // boolean
       String myText = "Hero";     // String
       System.out.println(myInt + " " +
               myFloat +" " + myLetter + " " +  myBool + " " + myText);
       Student myStudent = new Student("Walker","Johnny", "Kyle", null);
      
   }
}
int , char , boolean и float са примитиви. Низът не е примитивен. Какво ще кажете за променливата myStudent ? Това е обект на създадения от потребителя клас Student . Създаден е просто за да илюстрира работата с непримитивни променливи. Те са мнозинството в Java, тъй като почти всичко в този език за програмиране е обект. За разбиране, ето codeа на класа Student :

import java.util.Date;

public class Student {
   String surname;
   String name;
   String secondName;
   Long birthday; // Long instead of long is used by Gson/Jackson json parsers and various orm databases

   public Student(String surname, String name, String secondName, Date birthday ){
       this.surname = surname;
       this.name = name;
       this.secondName = secondName;
       this.birthday = birthday == null ? 0 : birthday.getTime();
   }

   @Override
   public int hashCode(){
       //TODO: check for nulls
       //return surname.hashCode() ^ name.hashCode() ^ secondName.hashCode() ^ (birthday.hashCode());
       return (surname + name + secondName + birthday).hashCode();
   }
   @Override
   public boolean equals(Object other_) {
       Student other = (Student)other_;
       return (surname == null || surname.equals(other.surname) )
               && (name == null || name.equals(other.name))
               && (secondName == null || secondName.equals(other.secondName))
               && (birthday == null || birthday.equals(other.birthday));
   }
}

Типове променливи в Java: локални, екземплярни и статични

Има три различни типа променливи в Java, ние сме ги изброor, Howто следва:
  1. Локални променливи
  2. Променливи на екземпляра
  3. Статични променливи

Локални променливи

Променлива, декларирана в тялото на метода, се нарича локална променлива. Освен това локалните променливи се декларират вътре в конструктори и блокове. Можете да използвате локални променливи само в този метод, конструктор or блок, където са създадени, а другите методи в класа дори не знаят, че променливата съществува. Така че локалните променливи се създават, когато се въведе методът, конструкторът or блокът и променливата се унищожава, след като методът, конструкторът or блокът не работят. Локална променлива не може да бъде дефинирана с ключовата дума static . Нещо повече: не можете да използвате модификатори за достъп за локални променливи. Ето един пример:

public class VariableTest {
   public static void main(String[] args) {
       System.out.println(myMethod("C plus "));
   }
           private static String myMethod(String myString) {
       String myOtherString = "plus";
       return myString + myOtherString;
   }
}
Тук myOtherString е локална променлива. Не можете да го използвате от другия метод, но myMethod . Локалните променливи не могат да имат стойности по подразбиране. Ако поне една локална променлива не е инициализирана в програмата, програмата няма да работи правилно. Нека направим малка промяна в един от предишните примери и "забравим" да инициализираме променливата myBool :

public class VariableTest {
   public static void main(String[] args) {

       int myInt = - 5;               // integer (whole number)
       float myFloat = 2.718281828459045f;    // Floating point 
       char myLetter = 'a';         // character
       boolean myBool;       // boolean
       String myText = "Hero";     // String
       System.out.println(myInt + " " +
               myFloat +" " + myLetter + " " +  myBool + " " + myText);
       Student myStudent = new Student("Walker","Johnny", "Kyle", null);

   }
}
Ако се опитаме да стартираме програмата, тя ще изведе грешка:
Грешка:(10, 50) java: променливата myBool може да не е инициализирана

Променливи на екземпляра

Променлива, декларирана вътре в класа, но извън тялото на всеки метод, конструктор or блок, се нарича променлива на екземпляр. Променливите на екземпляра се създават, когато се създава обект с помощта на ключовата дума new . Унищожава се, когато обектът е унищожен. Не може да се декларира като статичен, но можете да използвате модификатори за достъп за променливи на екземпляр. Променливите на екземпляра са видими за всички методи, конструктори и блокове в класа. Обикновено променливите на екземпляра са частни, но можете да промените видимостта за подкласове. Променливите на екземпляра, за разлика от локалните променливи, имат стойности по подразбиране. За всички числови примитивни типове стойността по подразбиране е 0, за булеви е false, а за обектни препратки е null. Стойностите могат да бъдат присвоени по време на декларацията or в рамките на конструктора. Ето един пример:

//instance variable example
public class Employee {

   // here we have a public instance variable. It is visible for this class and child classes
   public String name;

   //this instance variable is private so it’s visible for the Employee class only. You can use setters and getters to get it
   private double salary;

   public Employee (String empName) {
       name = empName;
   }

   public String getName() {
       return name;
   }

   public void setName(String name) {
       this.name = name;
   }

   public double getSalary() {
       return salary;
   }

   public void setSalary(double employeeSalary) {
       salary = employeeSalary;
   }

   public static void main(String args[]) {
       Employee employee = new Employee("Johnny");
       employee.setSalary(1500);
       System.out.println("name = " + employee.getName());
       System.out.println("salary = " + employee.getSalary());
   }
}

Статични променливи

Променлива, която е декларирана като статична, се нарича статична променлива. Java ви предлага да декларирате такива променливи извън метод, конструктор or блок. Не може да е локално, те принадлежат на клас, а не на инстанции. Това означава, че едно копие на статична променлива веднъж създадено и споделено между всички екземпляри на класа. Разпределянето на памет за статични променливи се случва само веднъж, когато класът се зареди в паметта. Те могат да имат всяHowва видимост, но обикновено се декларират като публични. Те също имат стойности по подразбиране, като променливи на екземпляр.

public class Box
{
   public void add(int data)
   {
       Storage.sum = Storage.sum + data;
       Storage.count++;
   }

   public void remove(int data)
   {
       Storage.sum = Storage.sum - data;
       Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}
В горния пример създадохме отделен клас Storage , преместихме променливите count и sum в него и ги обявихме за статични. Публичните статични променливи могат да бъдат достъпни от всеки програмен метод (и не само от метод). За да затвърдите наученото, ви предлагаме да гледате видео урок от нашия курс по Java
Коментари
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION