☕ Java

Ein- und Ausgabe in Java 17: Eine ausführliche Anleitung

Java для начинающих: что это такое, история и первая программа

Добро пожаловать в мир Java! Если вы пользовались Android-смартфоном, заходили в интернет-банк или играли в Minecraft — вы уже сталкивались с Java. В этом уроке разберём: что такое Java, откуда она взялась, и напишем первую программу — строку за строкой.

Что такое Java и зачем она нужна?

Java — это язык программирования и платформа для создания программ. Представьте: вы написали рецепт торта на русском. Французский кондитер не поймёт. Немецкий — тоже. Придётся переводить для каждой страны. Именно такая проблема была у программистов до Java: программу переписывали для Windows, Mac, Linux отдельно.

Java решила это принципом "Write Once, Run Anywhere" (Пиши однажды, запускай везде). Программа пишется один раз и запускается на любой платформе.

История Java: от кофейного острова до миллиардов устройств

В 1991 году в компании Sun Microsystems Джеймс Гослинг (James Gosling) начал секретный проект "Green". Цель — создать язык для бытовой электроники (телевизоров, пультов управления), который работает на любом железе.

Первое название — Oak (дуб, дерево за окном Гослинга), но такая торговая марка уже была. Язык переименовали в Java — в честь острова Ява в Индонезии, откуда привозили любимый кофе команды. Логотип Java — чашка кофе!

В 1995 году Java стала публичной и произвела революцию. В 2010 году Oracle купила Sun Microsystems вместе с Java. Сегодня Java — один из самых популярных языков в мире, неизменно в топ-3.

Где используется Java сегодня?

  • Android-разработка — миллиарды смартфонов используют Java/Kotlin
  • Серверные приложения — LinkedIn, Amazon, eBay, Twitter
  • Банки и финансы — надёжность и безопасность
  • Minecraft — написан целиком на Java!
  • Big Data — Hadoop, Spark, Kafka написаны на Java
  • Корпоративные системы — ERP, CRM, системы управления

Как работает Java: JVM — ваш персональный переводчик

Java решила проблему переносимости с помощью JVM (Java Virtual Machine — Виртуальная машина Java).

  1. Вы пишете код на Java (файл .java)
  2. Компилятор javac превращает его в байт-код (файл .class)
  3. JVM читает байт-код и переводит в команды для вашего конкретного процессора

Аналогия: байт-код — это эсперанто (международный язык). JVM — переводчик, знающий все платформы (Windows, Mac, Linux). Один байт-код — везде, где есть JVM.

Ваш код (.java)
      ↓ компилятор javac
   Байт-код (.class)
      ↓ JVM (на любой ОС)
  Машинный код процессора

Три важные аббревиатуры:

  • JVM — виртуальная машина, запускает байт-код
  • JRE = JVM + стандартные библиотеки (для запуска программ)
  • JDK = JRE + компилятор javac + инструменты (нужен разработчику!)

Установка JDK

Windows

  1. Скачайте JDK 17+ с adoptium.net (бесплатный OpenJDK)
  2. Запустите установщик, нажимайте Next
  3. Проверьте: откройте cmd и введите java -version

macOS

brew install openjdk@17
java -version

Linux (Ubuntu)

sudo apt install openjdk-17-jdk
java -version

После установки вы увидите: openjdk version "17.0.x"

Первая программа: Hello, World!

Создайте файл HelloWorld.java:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

Запуск:

javac HelloWorld.java   # Компилируем → HelloWorld.class
java HelloWorld         # Запускаем
# Вывод:
Hello, World!

Разбор каждой строки — ничего не пропускаем!

Строка 1: public class HelloWorld {

public — модификатор доступа. "Публичный" — этот класс виден всем.
class — ключевое слово: объявляем класс. В Java весь код живёт внутри классов.
HelloWorld — имя класса. Критично: имя файла = имя класса (учитывается регистр!).
Файл HelloWorld.java → класс HelloWorld. Ошибка → не скомпилируется.
{ — открывает тело класса.

Строка 2: public static void main(String[] args) {

Это точка входа — JVM ищет именно этот метод при запуске.
public — JVM вызывает main извне, нужен публичный доступ.
static — принадлежит классу, а не объекту. JVM вызывает без создания объекта.
void — не возвращает значение.
main — точное имя. Java чувствительна к регистру: Main не подойдёт!
String[] args — аргументы командной строки. Запуск java HelloWorld Иван → args[0]="Иван".

Строка 3: System.out.println("Hello, World!");

System — встроенный класс Java для системных операций.
out — поле класса System: стандартный поток вывода (экран).
println — метод: вывести строку + перевод строки. print — без переноса.
"Hello, World!" — строковый литерал. Двойные кавычки обязательны!
; — точка с запятой завершает каждое выражение. Забыть — самая частая ошибка!

Типичные ошибки новичков

// Ошибка 1: Неверное имя файла
// Файл helloworld.java, класс HelloWorld
// error: class HelloWorld is public, should be in HelloWorld.java

// Ошибка 2: Забытая точка с запятой
System.out.println("Hello")  // error: ';' expected

// Ошибка 3: Одинарные кавычки вместо двойных
System.out.println('Hello');  // error: unclosed character literal

// Ошибка 4: Маленькая буква
system.out.println("Hello"); // error: cannot find symbol: variable system

Больше примеров вывода

import java.util.Scanner;

public class OutputDemo {
    public static void main(String[] args) {
        // С переносом строки
        System.out.println("Строка 1");
        System.out.println("Строка 2");
        
        // Без переноса
        System.out.print("Привет, ");
        System.out.print("мир!");
        System.out.println(); // только перенос
        
        // Форматированный вывод
        String name = "Иван";
        int age = 16;
        double gpa = 4.8;
        System.out.printf("Имя: %s, Возраст: %d, Средний балл: %.1f%n", name, age, gpa);
        // %s — строка, %d — целое, %.1f — дробное с 1 знаком, %n — перенос строки
        
        // Чтение с клавиатуры
        Scanner sc = new Scanner(System.in);
        System.out.print("Введи своё имя: ");
        String yourName = sc.nextLine();
        
        System.out.print("Введи год рождения: ");
        int year = sc.nextInt();
        
        int yourAge = 2024 - year;
        System.out.println("Привет, " + yourName + "! Тебе примерно " + yourAge + " лет.");
        System.out.println("Это " + yourAge * 365 + " дней жизни!");
        sc.close();
    }
}

Комментарии в Java

public class Comments {
    /**
     * Javadoc-комментарий.
     * Из него утилита javadoc генерирует HTML-документацию.
     * @param args аргументы командной строки
     * @author Ваше имя
     * @version 1.0
     */
    public static void main(String[] args) {
        
        // Однострочный комментарий — от // до конца строки
        int x = 5; // Можно добавить в конце строки кода
        
        /*
         * Многострочный комментарий.
         * Удобен для длинных пояснений.
         * Начинается: /*  Заканчивается: */
        int y = 10;
        
        // Совет: пишите комментарии "ЗАЧЕМ", а не "ЧТО":
        int maxAttempts = 3;     // Плохой комментарий: "число три"
        int loginAttempts = 3;   // Хороший: максимум попыток до блокировки аккаунта
    }
}

Структура Java-программы

// 1. Объявление пакета (рекомендуется)
package com.example.myapp;

// 2. Импорты
import java.util.Scanner;
import java.util.ArrayList;
import java.util.HashMap;

// 3. Класс (один публичный класс = один файл)
public class MyProgram {
    
    // 4. Поля класса
    private static final String VERSION = "1.0";
    
    // 5. Точка входа
    public static void main(String[] args) {
        System.out.println("Программа v" + VERSION + " запущена!");
        
        MyProgram app = new MyProgram();
        app.run();
    }
    
    // 6. Другие методы
    public void run() {
        System.out.println("Работаю...");
    }
}

Практические задания

Задание 1: О себе

public class AboutMe {
    public static void main(String[] args) {
        System.out.println("Имя: Иван Петров");
        System.out.println("Возраст: 16 лет");
        System.out.println("Хобби: программирование и игры");
        System.out.println("Мечта: написать собственную игру на Java!");
    }
}

Задание 2: Калькулятор

public class Calculator {
    public static void main(String[] args) {
        int a = 15, b = 4;
        System.out.println(a + " + " + b + " = " + (a + b));    // 19
        System.out.println(a + " - " + b + " = " + (a - b));    // 11
        System.out.println(a + " * " + b + " = " + (a * b));    // 60
        System.out.println(a + " / " + b + " = " + (a / b));    // 3 (целое!)
        System.out.println(a + " % " + b + " = " + (a % b));    // 3 (остаток)
        // Дробное деление:
        System.out.printf("%.1f / %d = %.4f%n", (double)a, b, (double)a/b); // 3.7500
    }
}

Задание 3: Персональное приветствие

import java.util.Scanner;

public class PersonalGreet {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        System.out.print("Как тебя зовут? ");
        String name = sc.nextLine();
        
        System.out.print("В каком году ты родился(ась)? ");
        int year = sc.nextInt();
        
        int age = 2024 - year;
        System.out.println("Привет, " + name + "! Тебе примерно " + age + " лет.");
        System.out.println("Это " + age * 12 + " месяцев или " + age * 365 + " дней!");
        
        if (age < 18) {
            System.out.println("До совершеннолетия ещё " + (18 - age) + " лет.");
        } else {
            System.out.println("Ты уже совершеннолетний!");
        }
        
        sc.close();
    }
}

Итого: что мы узнали

  • ✅ Java создана Джеймсом Гослингом в 1995 году (Sun Microsystems)
  • ✅ Принцип "Write Once, Run Anywhere" — пишем один раз, запускаем везде
  • ✅ JVM — виртуальная машина, выполняющая байт-код на любой платформе
  • ✅ JDK = компилятор javac + JVM + стандартные библиотеки
  • ✅ Имя файла ОБЯЗАНО совпадать с именем публичного класса (с учётом регистра)
  • ✅ Метод main — точка входа: public static void main(String[] args)
  • ✅ System.out.println() — вывод с переносом строки
  • ✅ System.out.printf() — форматированный вывод
  • ✅ Scanner — чтение данных с клавиатуры
  • ✅ Три вида комментариев: //, /* */, /** */ (Javadoc)

В следующем уроке разберём переменные и типы данных — как хранить и обрабатывать данные в программах Java.