Переменные – это именованные участки памяти, которыми мы можем манипулировать. Каждая переменная в языке 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.
В следующем уроке мы рассмотрим базовые операторы для манипуляций с переменными.