Руководство по Java Core. Типы переменных.

Переменные – это именованные участки памяти, которыми мы можем манипулировать. Каждая переменная в языке Java имеет свой тип (строгая типизация), который и определяет размер переменной в памяти, максимальные и минимальные значения, которые эта переменная может принимать и набор операций, которые могут применяться в этой переменной.

Перед тем, как использовать переменную, мы должны её объявить.

Пример:


int i = 1;

В языке Java существует три типа переменных:

  • Локальные
  • Переменные класса
  • Статические переменные

Поговорим о каждой их них отдельно.

Локальные переменные

  • Объявляются в методах, блоках и конструкторах.
  • Создаются во время начала использования метода, блока или конструктора и уничтожаются после выхода из них.
  • Модификаторы доступа не применяются к локальным переменным.
  • Область видимости локальных переменных ограничивается методом, блоком или конструктором в которых они объявлены.
  • Локальные переменные не имеют значения по умолчанию, поэтому они должны быть инициализированы до первого использования.

Пример:
Класс Developer


package net.proselyte.javacore.variables;

public class Developer {
    private String name;
    private int experience;

    public Developer() {
    }

    public String getName() {
        return name;
    }

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

    public int getExperience() {
        return experience;
    }

    public void setExperience(int experience) {
        this.experience = experience;
    }

    public void increaseExperience() {
        this.experience += 1;
    }
}

Класс DeveloperRunner


package net.proselyte.javacore.variables;

public class DeveloperRunner {
    public static void main(String[] args) {
        Developer developer = new Developer();

        developer.setName("Proselyte");
        developer.setExperience(2);

        System.out.println("Developer's experience is: " + developer.getExperience() + " years.");
        developer.increaseExperience();
        System.out.println("And now developer's experience is: " + developer.getExperience() + " years.");
    }
}

В результате работы программы мы получим следующий результат:


/*Some system messages*/
Developer's experience is: 2 years.
And now developer's experience is: 3 years.


Переменные класса

  • Объявляются внутри класса, но за пределами методов.
  • Когда в heap (см. JVM)  выделяется место для объекта, для каждой переменной класса выделяется определённая часть этой памяти.
  • Создаются в момент создания экземпляра класса, в который они входят и уничтожаются вместе с экземпляром.
  • Могут быть объявлены до или после использования.
  • Видны для всех методом, блоков и конструкторов внутри класса. Обычно, они объявляются с модификатором доступа private.
  • Имеют значения по умолчанию согласно спецификации. Значения переменным класса могут быть присвоены при декларации, в конструкторе или с помощью метода (setter).
  • Внутри самого класса, переменные класса могут быть вызваны прямым обращением к имени переменной. В других же классах доступ к ним происходит по полному имени (имя_объекта.имя_переменной) или с помощью метода (getter).

Пример:
Класс Person:


package net.proselyte.javacore.variables.instance;

public class Person {
    private String firstName;
    private String lastName;
    private int age;

    public Person(String firstName, String lastName, int age) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "\n=======================\n" +
                "Person: " +
                "First Name: " + firstName + "\n" +
                "Last Name: " + lastName + "\n" +
                "Sge: " + age +
                "\n=======================\n";
    }
}

Класс PersonRunner:


package net.proselyte.javacore.variables.instance;

public class PersonRunner {
    public static void main(String[] args) {
        Person proselyte = new Person("Proselyte", "Developer", 27);

        System.out.println("Proselyte Info: ");
        System.out.println(proselyte);
    }
}

В результате работы программы получим следующий результат:


/*Some system messages*/
Proselyte Info: 

=======================
Person: First Name: Proselyte
Last Name: Developer
Sge: 27
=======================

Статические переменные

  • Объявляются с модификатором static за пределами метода, блока или конструктора.
  • Должны быть только одна копия переменной на класс, независимо от количества экземпляров.
  • Чаще всего используются как постоянные значения (константы).
  • Хранятся в статической памяти.
  • Создаются и уничтожаются в моменты запуска и остановки программы соответственно.
  • Имеют значения по умолчанию согласно спецификации.
  • Доступ к ним может быть получен вызовов вида: имя_класса.имя_статической_переменной.

Пример:

Здесь приведём некое подобие веб сайта, где адрес сайта будет статической финальной строкой (константой).

Класс WebPage


package net.proselyte.javacore.variables.staticmod;

public class WebPage {
    public static final String WEBSITE = "http://proselyte.net/";
    private String url;
    private String content;

    public WebPage() {
    }

    public WebPage(String id, String content) {
        this.url = id;
        this.content = content;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    @Override
    public String toString() {
        return "\n=================\n" +
                "WebSite: " + WEBSITE +
                "\nPage Info: " +
                "\nurl:" + url +
                "\ncontent:\n" + content +
                "\n=================\n";
    }
}

Класс Site


package net.proselyte.javacore.variables.staticmod;

public class Site {
    public static void main(String[] args) {
        WebPage main = new WebPage("/", "This is main page.");
        WebPage blog = new WebPage("/blog", "This is blog.");

        System.out.println(main);
        System.out.println(blog);
    }
}

В результате работы программы получим следующий результат:


/*Some system messages*/
=================
WebSite: http://proselyte.net/
Page Info: 
url:/
content:
This is main page.
=================


=================
WebSite: http://proselyte.net/
Page Info: 
url:/blog
content:
This is blog.
=================

В этом уроке мы ознакомились с типами переменных в языке Java.
В следующем уроке мы рассмотрим базовые операторы для манипуляций с переменными.