Глава 1. Ориентация объекта
Xiaobai: Java — полностью объектно-ориентированный язык программирования! Хорошо? Что такое ориентированный на процесс? Что такое объектно-ориентированный?
Большой парень: Прежде чем мы официально приступим к этой части исследования, нам очень полезно понять две концепции процессно-ориентированного и объектно-ориентированного. Не волнуйся, я поговорю с тобой дальше.
Ориентированность на процесс – шаг за шагом
Ориентированность на процесс заключается в том, чтобы анализировать шаги, необходимые для реализации требований, реализовывать эти шаги шаг за шагом с помощью функций, а затем вызывать их по очереди.
Объектно-ориентированный — поведенческий
Объектно-ориентированный - разделить все требование по характеристикам и функциям, и инкапсулировать эти общие части в объекты.Объект создается не для выполнения определенного шага, а для описания поведения определенной вещи на шаге решения задачи .
Сяобай: Процессно-ориентированное вполне понятно, но объектно-ориентированное слишком сложно для понимания (плачет)
Босс: Позвольте мне привести вам еще один пример и хорошо поговорить
Пример с бильярдом — помогает понять
Сначала выдвигаем требование:
Придумайте игру в бильярд (пропустите начало игры, рассмотрите только середину)
Процессуальное мышление:
1.палер1 ватин
2. Реализуйте эффект снимка экрана
3. Оценка того, забит ли гол и эффективен ли он
4.палер2 ватин
5. Реализуйте эффект снимка экрана
6. Оценка того, забит ли гол и эффективен ли он
7. Вернитесь к шагу 1.
8. Вывести результат игры
Реализуйте вышеуказанные шаги шаг за шагом через функции, это требование выполняется.
Объектно-ориентированный способ мышления:
После наблюдения мы можем увидеть, что в описанном выше процессе на самом деле их много.общностьМесто
Итак, мы собираем все эти общие части вместе и делаемобщая структура
-
Система игроков (включая игрока1 и плательщика2)
-
Система эффекта ватина отвечает за отображение игрового экрана пользователю.
-
Система правил, судите, фолить, выигрывать или проигрывать и т. д.
Мы будем утомительными шагами, через поведение, функцию,модульный, это объектно-ориентировано, мы даже можем использовать эту программу для быстрой реализации различных игр в 8 мячей и снукера соответственно (просто нужно изменить правила, система игрока и система эффекта ватина одинаковы)
Плюсы и минусы процедурного и объектно-ориентированного:
ориентированный на процесс
преимущество: С точки зрения производительности он лучше, чем объектно-ориентированный, потому что класс нужно создавать при вызове, а накладные расходы слишком велики.
недостаток: Нелегко поддерживать, повторно использовать, расширять
Применение: микрокомпьютер с одним чипом, разработка встраиваемых систем, Linux/Unix и другие места с высокими требованиями к производительности.
объектно-ориентированный
преимущество:Легко поддерживать, легко повторно использовать, легко расширять, потому что объектно-ориентированныйупаковка,наследовать,полиморфизмхарактеристики, можно сконструироватьнизкое сцеплениесистема, что делает систему более гибкой и простой в обслуживании **Минусы:** Более низкая производительность, чем ориентированная на процесс
низкое сцепление, простое понимание означает, что модуль и модуль максимально независимы, отношения между ними максимально просты, и постарайтесь сделать их независимыми для выполнения некоторых подфункций, что позволяет избежать проблемы воздействия на все тело. . В этой части мы будем систематически организовывать и подводить итоги после объектно-ориентированного обучения.
Невозможно понять проблемы процессно-ориентированного только на примерах после учебника, В некоторых небольших подпрограммах процессно-ориентированное чувство будет проще, но столкнувшись с более крупным проектом, нам нужно написать N подобных функций. , все больше и больше функций, все больше и больше кода, и начинается дорога к ошибкам.
1.1 Классы и объекты
Как объектно-ориентированное мышление проявляется в Java? через классы и объекты
Добрыйпредставляет собой набор связанных свойств и поведений. является абстрактным понятием.объектЭто специфическое проявление таких вещей. конкретная сущность.
Переменные-членысвойства вещей
метод членаповедение вещей
Мы упомянули эти концепции выше, так как же нам их понимать?
Класс — этоОбщие черты,а такжеподобное поведениеОписание человека.
Например, у Сяо Ли и Лао Чжана есть имена, возраст, рост, вес и т. д.Атрибуты,И оба они могут общаться, заниматься спортом и т. д.подобное поведение.
Поскольку у этих двух людей есть общие черты, мы абстрагируем их и определяем какДобрый——Человечество, а Сяо Ли и Лао Ван — это индивидуумы (объекты) этого класса, а индивидуум — это реальное конкретное существование Когда дело доходит до людей, вы знаете только, какими должны быть атрибуты и поведение, но не знаете некоторых из них. его конкретные значения. Например, вы знаете, что он принадлежит к «человеку», поэтому у него должны быть такие атрибуты, как имя, возраст и т. д., но вы не знаете его конкретного имени и сколько ему лет. Два конкретных объекта, Сяо Ли и Лао Ван, на самом деле могут знать, что Лао Вану в этом году исполнилось 30 лет, а его рост равен 175.
Подводя итог приведенным выше примерам:
Переменные-члены используются для описания атрибутов этого класса, например, люди должны иметь такие атрибуты, как имя и возраст.
Методы-члены используются для описания поведения вещей, например людей, которые могут общаться в чате, заниматься спортом и т. д.
1.1_1 Определение и использование классов
Мы изучили основные определения и понятия классов и объектов
Далее мы будем использовать пример, чтобы понять, как определить класс
A: Определение класса
Переменные-члены:Формат определения такой же, как у обычных переменных, но расположение другое.внутри класса, вне метода.
Метод участника:Формат определения такой же, как и при обычном методе, просто перейдите купал статический(Причина будет объяснена позже)
B: Создание и использование классов
а: создать формат объекта
имя класса имя_объекта = новое имя класса();
Например: Человек p = новый Человек();
b: Как использовать переменные-члены и методы-члены?
имя объекта переменная-член
имя_объекта.membermethod()
Например: p.reading();
p.sleeping();
На самом деле мы видим, что определение класса все еще очень простое, оно объединяет наши предыдущие знания, но различается лишь по некоторым позициям, а что касается значения каждой части формата объекта, мы объясним его в ближайшее время ( нам также нужно добавить некоторые очки знаний)
Давайте сначала рассмотрим эту тему
Я часто слышу, что есть слово, называемое локальной переменной, имеет ли оно какое-то отношение к переменным-членам в классе?
1.1_2 Разница между переменными-членами и локальными переменными:
(1) Положение в классе другое
Переменные-члены: вне метода в классе
Локальные переменные: в определении метода или в объявлении метода
(2) Различные места в памяти
Переменные-члены: в куче
Локальные переменные: в стеке
(3) Жизненный цикл отличается
Переменные-члены: существуют при создании объекта, исчезают при исчезновении объекта
Локальные переменные: существуют при вызове метода и исчезают при вызове метода
(4) Значение инициализации отличается
Переменные-члены: имеют значения по умолчанию (подробнее об этом ниже)
Локальные переменные: не имеют значения по умолчанию, должны быть определены, назначены и затем использованы.
Ниже мы подробно объясним проблему инициализации, но у меня все еще есть проблема.Когда мы изучаем распределение памяти в java, есть такое предложение, "память кучи используется для хранения объектов и массивов, созданных new" Другими словами, объект существует в куче, а переменная-член существует в классе, а объект является отдельным классом>, поэтому переменная-член также существует в куче, тогда возникает проблема, когда она выводится таким же образом, она будет можно обнаружить, что метод такой же, как переменные-члены > переменные существуют в одном и том же объекте, не означает ли это, что локальные переменные также существуют в куче? Это, очевидно, отличается от нашего определения выше
Класс может создавать n разных объектов.Когда мы создаем новый объект, сущность объекта выделяет место в памяти в куче, потому что переменные-члены class> различны в разных объектах (например, имя Сяо Ли и фараона отличается) , всем нужно собственное пространство для хранения, поэтому переменные-члены класса будут храниться в куче вместе с объектом, а поскольку метод класса является общим для всех объектов, при создании объекта локальные переменные в метод Он не создается, он будет помещен в стек только тогда, когда метод используется объектом.
1.1_3 Проблемы с формальными параметрами:
Мы знаем, что в куче хранятся объекты и массивы из new, оба из которых являются ссылочными типами.
Говоря о знании массивов, мы уже говорили об основных типах и ссылочных типах, таких как массивы, и о влиянии формальных параметров на фактические параметры.
Перейти - Глава 3 3.3_1 Проблема с передачей параметров
После того, как мы узнали об объектах, давайте перейдем к задаче.
базовый тип: Изменения формальных параметров не влияют на фактические параметры (перенос значений)тип ссылки: Изменения формальных параметров напрямую влияют на фактические параметры (передаются по ссылке).
1.1_4 Анонимные объекты (понимание)
Давайте сначала разберемся, как создавать анонимные объекты
(1) Простое понимание:объект без имени
(2) Сценарии применения
A: При вызове метода он вызывается только один раз.
B: может быть передан как фактический параметр
Преимущества: анонимный объект является мусором после вызова и может быть переработан сборщиком мусора, и его проще писать таким образом.
Примечание. Если вы вызываете несколько членов объекта, вы должны дать объекту имя (то есть s на приведенном выше рисунке), то есть использовать обычный метод создания объектов
Давайте рассмотрим пример, чтобы увидеть, как конкретно использовать анонимные объекты.
1.1_5 Обзор и использование пакетов
Во-первых, давайте возьмем простой пример:
Например: летом в общежитии очень жарко, нам (пользователям) нужно только управлять пультом дистанционного управления, чтобы использовать кондиционер, и нам не нужно знать, как работает кондиционер внутри.
Теперь, когда у меня меньше знаний, у меня нет глубокого понимания концепции инкапсуляции. Не волнуйтесь, я сначала пройдусь по ней. Я напишу конкретную статью о значении и проблемах инкапсуляции. Сейчас я только нужно произвести впечатление.
Обзор пакета: относится к свойствам и деталям реализации скрытого объекта и предоставляет публичный доступ только к внешнему миру.
Преимущества упаковки:
·Скрыть детали реализации и предоставить публичный доступ
·Улучшить возможность повторного использования кода
·Улучшить безопасность
Принципы упаковки:
·Скрыть контент, который не требуется предоставлять извне
·Скрыть свойства и предоставить общедоступные методы для доступа к ним
Мыслительный процесс:
Чтобы присвоить значения переменным-членам через объекты, вы можете присвоить некоторые недопустимые данные
Это неразумно. Таким образом, данные должны быть оценены, прежде чем назначать
StudentDemo — это тестовый класс, который обычно только создает объекты и вызывает методы.
Таким образом, это суждение должно быть определено в классе Student. нужно использовать логические утверждения
Логические операторы должны быть определены в методах. Поэтому предоставьте метод в классе Student для проверки данных
Но если вы не вызываете метод для назначения назначения, назначьте назначение напрямую.
Значит наш метод не работает
Поэтому мы должны принудительно использовать мой метод и не вызывать переменную-член напрямую.
Для этой ситуации Java предоставляет ключевое слово private
Частный: частный, может изменять переменные-члены и методы-члены.
Члены, измененные с помощью private, доступны только в этом классе, поэтому, если внешний мир хочет оперировать переменными-членами в классе, это должно быть достигнуто путем вызова методов в классе.
1.1_6 Модификаторы доступа
Программист-клиент: потребитель классов, который использует типы данных в своем приложении. Его цель — собрать различные классы для быстрой разработки приложений.
Создатели классов: программисты, создающие новые типы данных с целью построения классов.
Причины, по которым существует контроль доступа:
а) сделать так, чтобы программисты-клиенты не могли прикасаться к частям, к которым они не должны прикасаться;
б) Разрешить разработчикам библиотек изменять внутреннюю работу классов, не беспокоясь о том, что это повлияет на программистов-клиентов.
Четыре ключевых слова Java: public, protected, default, private.
(Они решают, кто может использовать то, что определено сразу после него)
Область применения
разрешение на доступ | Добрый | Сумка | Подкласс | другие пакеты | |
---|---|---|---|---|---|
public | √ | √ | √ | √ | доступный для всех |
protect | √ | √ | √ | Унаследованные классы могут получать доступ и иметь те же разрешения, что и частные. | |
default | √ | √ | Унаследованные классы могут получать доступ и иметь те же разрешения, что и частные. | ||
private | √ | Элементы, к которым не может получить доступ никто, кроме создателя типа и внутренних методов типа. |
1.1_7 Применение стандартного случая частного
Это можно улучшить с помощью этого ключевого слова (обычно после использования)
Содержание этого представлено сразу ниже
1.1_8 Обзор и применение этого ключевого слова
Звонить здесь можно толькопо названию объекта, здесь он должен представлять объект студента
this: Представляет ссылку на объект своего класса.
Помните:Какой объект вызывает метод, это представляет какой объект
Быть применимым: локальные переменные скрывают переменные-члены (добавлены позже)
1.2 Конструктор
Конструктор имеет то же имя, что и класс, в котором он находится., но конструктор не имеет возвращаемого значения.
Конструкторы часто используются для инициализации переменных экземпляра класса или выполнения других необходимых шагов для создания полного объекта.
Как понять это?
Когда объект создается, конструктор используется для инициализации объекта.
Так что же называется инициализацией?
Нужно ли нам знать, что конструктор также называетсяКонструктор, это длякласс инициализации, когда конструктор вызывается, он будет иметь значениеинициализировать элемент, когда используешьпараметризованная конструкция, будуЗначение в параметре передается члену, а при использовании конструкции без аргументов некоторыезначение по умолчаниюдля инициализации членов
Например:
private StringТак;
private int age;
public bool flag;
Когда вышеуказанные три переменные-члены инициализируются по умолчанию конструкцией без аргументов, они будут инициализированы
name = null; возраст =0; флаг =false;
Уведомление:
О: Если мы не укажем конструктор, система автоматически предоставит конструктор без аргументов.
B: Если мы предоставим конструктор, система больше не будет предоставлять конструктор без аргументов по умолчанию.
Если мы по-прежнему хотим использовать конструктор без параметров в настоящее время, мы должны предоставить его сами.Рекомендуется всегда предоставлять конструктор без параметров (поэтому мы привыкли давать конструкторы без параметров и конструкторы на основе параметров в сорт)
Есть два способа присвоить значения переменным-членам:
A:setXxx()
Б: метод строительства
Говоря об этом, мы должны упомянуть, что методы get и set будут часто использоваться при написании кода в будущем, что собственно и отражено здесь.упаковка,Не позволяйте пользователям напрямую манипулировать участниками, может игратьБезопасностьРоль конкретного содержания можно увидеть в знании лицевой части упаковки.
Конструктор должен передать некоторые необходимые параметры для инициализации объекта при создании объекта.
Сеттер/геттер должен контролировать, может ли свойство быть прочитано или записано.
Два не противоречат друг другу
При объяснении классов ранее нам не хватило некоторых знаний, поэтому давайте поговорим о процессе инициализации классов:
инициализация класса
Что делает Student s = new Student(); в памяти?
Загрузите файл Student.class в память
Создать место для s в памяти стека
Создайте место для студенческих объектов в куче памяти
· Инициализация по умолчанию переменных-членов объекта ученика
· Отображение инициализации переменных-членов студенческого объекта
Присвойте значения переменным-членам объекта ученика через конструктор
После того, как объект студента инициализирован, присвойте адрес объекта переменной s
1.3 статическое ключевое слово
Рекомендации по статическим ключевым словам
О: В статических методах нет этого ключевого слова.
Статика загружается с загрузкой класса, это с созданием объекта → статика существует до объекта
B: Статические методы могут обращаться только к статическим переменным-членам и статическим методам-членам.
статический метод:
**A: Переменные-члены: ** Доступ возможен только к статическим переменным
**B:Методы-члены:** Доступны только статические методы-члены.
Нестатический метод:
**A: переменная-член: ** может быть статической или нестатической
**B: метод-член:** может быть статическим методом-членом или нестатическим методом-членом
Почему статические методы не могут получить доступ к нестатическим методам?
Поскольку статические методы загружаются с загрузкой класса, статика лучше, чем существование объекта, вы хотите получить доступ к нестатическим вещам, но в настоящее время их может не быть.
Подводя итог в одном предложении: static может получить доступ только к static
1.4 статические переменные и переменные-члены
Куй железо, пока горячо, давайте проведем некоторые различия между статическими переменными и переменными-членами.
разная принадлежность
Статические переменные принадлежат классам, поэтому их также называют переменными класса.
· Переменные-члены принадлежат объекту. Также называется переменной экземпляра (переменной объекта)
· Различные места в памяти
Статические переменные хранятся в статической области области метода
Переменные-члены хранятся в куче памяти
·В памяти появляется время другое
Статические переменные загружаются при загрузке класса и исчезают при исчезновении класса.
Переменные-члены существуют, когда объект создается, и исчезают, когда объект исчезает.
· Разные звонки ·
Статические переменные можно вызывать по имени класса или по объекту.
Переменные-члены могут вызываться только по имени объекта
Первый способ — использовать объект для вызова метода-члена.
Второй метод заключается в использовании класса для вызова метода-члена (рекомендуемый метод 2 [соответствующий метод-член должен быть записан как статический]).
Если вы не хотите, чтобы пользователи создавали объекты для вызова методов-членов:
Пока конструктор является закрытым, внешний мир не может создавать объекты.
В одной и той же папке определения классов одинаковы как в обеих папках, так и в одной папке
1.4 Создание примечаний к документации и инструкций
(один)
Делайте комментарии к документации, а инструмент спецификации документации анализирует комментарии к документации. инструмент javadoc Д: формат javadoc -d каталог -автор -версия ArrayTool.java Каталог: вы можете написать путь к папке Создать текст справкифайл изнеправильно: Не найден документируемый общедоступный или защищенный класс: сообщите нам, что у класса недостаточно разрешений (решение: добавьте общедоступный перед классом)
(два)
API(Application Programming Interface)
Интерфейс прикладного программирования (справочная документация)
Jdk может помочь нам проверить подробное использование и описания параметров некоторых классов и методов.Умение проверять документы также является очень важным навыком (скачайте его из Интернета)
Давайте попробуем использовать класс самостоятельно, ознакомившись с документацией.
Класс математики
A: Это класс, который работает с математикой.
B: конструктора нет, потому что его члены статические
C: генерировать случайные числа
public static double random(): [0.0,1.0)
D: Как сгенерировать случайное число от 1 до 100
int number = (int)(Math.random()*100)+1;
Е: Игра «Угадай число».
1.5 Кодовые блоки
Поговорим о последнем пункте знаний в этой части.
(1) Код, заключенный в {}.
(2) Классификация:
A: Статический кодовый блок
концепция:В классе Java (в методе не может существовать блоков статического кода)
Блок кода, объявленный с использованием ключевого слова static и {}:
воплощать в жизнь:Статические блоки кода запускаются при загрузке класса и только один раз и имеют приоритет над различными блоками кода и конструкторами.
эффект:В общем, если какой-то код нужно выполнить при запуске проекта, то требуется статический блок кода. Например, многие файлы конфигурации и другие ресурсы, которые необходимо загрузить при запуске проекта, мы можем поместить их все в статические блоки кода.
Инициализируйте данные класса и выполните его только один раз.
B: Создание блоков кода
**Концепция:** Блок кода, объявленный с помощью {} в классе java (отличие от статического блока кода в том, что ключевое слово static отсутствует):
воплощать в жизнь:Блок конструктора вызывается при создании объекта, один раз для каждого создания объекта, но имеет приоритет над конструктором.
эффект:Подобно роли конструкторов, объекты могут быть инициализированы, и пока объект создан, блок кода конструкции будет выполнен один раз. Но, наоборот, конструктор не обязательно выполняется при создании каждого объекта (в случае нескольких конструкторов, если параметры, передаваемые при создании объекта, различны, для инициализации используется соответствующий конструктор).
Здесь может быть размещен один и тот же код в нескольких конструкторах.Перед выполнением каждого конструктора сначала выполняется блок кода конструктора.
C: локальный кодовый блок
Используется для ограничения жизненного цикла переменных, их раннего освобождения и улучшения использования памяти.
Статические кодовые блоки, конструктивные блоки кода, порядок конструкторов
·Статический блок > Блок конструктор > Конструктор
конец:
Если есть какие-либо недостатки или ошибки в содержании, вы можете оставить сообщение для меня, чтобы сделать комментарии, все! ^_^
Если это может вам помочь, то следуйте за мной!
Мы здесь незнакомцы, но мы все усердно работаем для своей мечты ❤
Публичный аккаунт, настаивающий на продвижении оригинальной технологии Java: в идеале — более двух дней.