\documentclass[j-spec.tex]{subfiles} \begin{document} %\setcounter{tocdepth}{3} \tableofcontents \section{Специализация: данные и функции} \subsection{В предыдущем разделе} Будет рассмотрен базовый функционал языка, то есть основная встроенная функциональность, такая как математические операторы, условия, циклы, бинарные операторы. Далее способы хранения и представления данных в Java, и в конце способы манипуляции данными, то есть функции (в терминах языка называющиеся методами). \subsection{В этом разделе} Разберём такие основополагающих в Java вещи, как классы и объекты, а также с тем, как применять на практике основные принципы ООП: наследование, полиморфизм и инкапсуляцию. Дополнительно рассмотрим устройство памяти в джава. \begin{itemize} \item \nom{класс}{- } \item \nom{объект}{- } \item \nom{статика}{- } \item \nom{стек}{- } \item \nom{куча}{- } \item \nom{сборщик мусора}{- } \item \nom{конструктор}{- } \item \nom{вложенный класс}{- } \item \nom{внутренний класс}{- } \item \nom{инкапсуляция}{- } \item \nom{наследование}{- } \item \nom{полиморфизм }{- } \end{itemize} \begin{lstlisting}[language=Java,style=JCodeStyle] package ru.gb.jcore; public class Cat { String name; String color; int age; } \end{lstlisting} \begin{lstlisting}[language=Java,style=JCodeStyle] Сat cat0; cat0 = new Cat(); Cat cat1 = new Cat(); \end{lstlisting} \begin{lstlisting}[language=Java,style=JCodeStyle] package ru.gb.jcore; public class Main{ public static void main(String[] args) { Cat cat1 = new Cat(); Cat cat2 = new Cat(); cat1.name = "Barsik"; cat1.color = "White"; cat1.age = 4; cat2.name = "Murzik"; cat2.color = "Black"; cat2.age = 6; System.out.println("Cat1 named: " + cat1.name + " is " + cat1.color + " has age: " + cat1.age); System.out.println("Cat2 named: " + cat2.name + " is " + cat2.color + " has age: " + cat2.age); } } \end{lstlisting} \begin{verbatim} Cat1 named: Barsik is White has age: 4 Cat2 named: Murzik is Black has age: 6 \end{verbatim} \begin{lstlisting}[language=Java,style=JCodeStyle] Cat cat1 = new Cat(); Cat cat2 = cat1; cat1.name = "Barsik"; cat1.color = "White"; cat1.age = 4; cat2.name = "Murzik"; cat2.color = "Black"; cat2.age = 6; System.out.println("Cat1 named: " + cat1.name + " is " + cat1.color + " has age: " + cat1.age); System.out.println("Cat2 named: " + cat2.name + " is " + cat2.color + " has age: " + cat2.age); \end{lstlisting} \begin{verbatim} Cat1 named: Murzik is Black has age: 6 Cat2 named: Murzik is Black has age: 6 \end{verbatim} \begin{lstlisting}[language=Java,style=JCodeStyle] public class Cat { String name; String color; int age; void voice() { System.out.println(name + " meows"); } void jump() { if (this.age < 5) System.out.println(name + " jumps"); } } \end{lstlisting} - Также, хотелось бы отметить, что мы можем использовать -Xms и -Xmx опции JVM, чтобы определить начальный и максимальный размер памяти в куче. Для стека определить размер памяти можно с помощью опции -Xss; \begin{lstlisting}[language=Java,style=JCodeStyle] public class Cat { private String name; private String color; private int age; public Cat() { System.out.println("constructor is constructing..."); name = "Barsik"; color = "White"; age = 2; } } \end{lstlisting} \begin{lstlisting}[language=Java,style=JCodeStyle] public class Cat { private String name; private String color; private int age; Cat(String n, String c, int a) { System.out.println("constructor is constructing..."); name = n; color = c; age = a; } } \end{lstlisting} \begin{lstlisting}[language=Java,style=JCodeStyle] Cat cat1 = new Cat("Barsik", "White", 4); Cat cat2 = new Cat("Murzik", "Black", 6); \end{lstlisting} \begin{lstlisting}[language=C,style=CCodeStyle] public class Cat { private String name; private String color; private int age; public Cat(String name, String color, int age) { this.name = name; this.color = color; this.age = age; } } \end{lstlisting} ключевое слово this в Java используется только в составе экземпляра класса. Но неявно ключевое слово this передается во все методы, кроме статических (поэтому this часто называют неявным параметром) и может быть использовано для обращения к объекту, вызвавшему метод. \printnomenclature[40mm] \end{document}