Класс Java System является одним из базовых и используется практически в любом проекте. Он располагает множеством полезных методов для работы, некоторые из которых мы сегодня и рассмотрим.
Кратко о классе Java System
Класс java.lang.System является final, все поля и методы являются статическими (static), поэтому мы не можем создать подкласс и переопределить его методы используя наследование. Класс Java System не предоставляет каких-либо публичных конструкторов, поэтому мы не можем создать экземпляр этого класса.
Пример работы с классом
Вызов метода из класса java.lang.System выглядит так: System.out.print() — это один из самых простых способов логгирования информации.
Далее рассмотрим различные функции, предоставляемые классом java.lang.System.
Пример использования Array Copy класса Java System
Класс System обеспечивает нативный метод для копирования данных из одного массива в другой. Это встроенный метод, поэтому должен работать быстрее, чем другие способы копирования массива.
Метод System.arraycopy бросает исключение IndexOutOfBoundsException если копирование обратится к данным за пределами границ массива.
Также он бросает ArrayStoreException если элемент в исходном массиве не может быть сохранен в массиве назначения из-за несоответствия типа.
Еще может быть выброшен NullPointerException, если массив источник или массив назначения null.
Ниже приведен пример программы с примером использования этого метода:
|
1 2 3 4 5 6 7 8 9 |
// инициализируем массивы int [] array1 = {1,2,3,4,5}; int[] array2 = {10,20,30,40,50}; //копируем первые 2 элемента с массива array1 в массив array2 //начиная со второго индекса массива array2 System.arraycopy(array1, 0, array2, 2, 2); System.out.println(Arrays.toString(array2)); |
Результат выполнения:
|
1 |
[10, 20, 1, 2, 50] |
Пример использования System Properties
Класс System содержит очень полезный метод для получения System properties и дальнейшей работы с ними. По этой ссылке приведен пример использования различных методов System properties.
Читаем с консоли/пишем в консоль с помощью класса Java System
Класс System предоставляет удобный способ получить уникальный объект Console, связанный с управлением JVM. Класс Console был введен в Java IO версии Java SE 1.6 c полезным методом для печати отформатированных данных и безопасного считывания пароля. Если у вас консоль не связан с текущей JVM или работает в качестве фоновой программы, то на попытку получить объект Console возвращается значение null.
Ниже приведена программа получения объекта класса Console иго использование:
|
1 2 3 4 5 6 7 8 9 10 |
Console console = System.console(); // если удалось получить объект Console if (console != null) { Calendar c = new GregorianCalendar(); console.printf("Сайт %1$s%n", "Javadevblog.com"); //распечатает Сайт Javadevblog.com" console.printf("Текущее время: %1$tm %1$te,%1$tY%n", c); //печатаем "Текущее время: 13 12,2015" console.flush(); } else { System.out.println("Объект Console не получен"); } |
Получаем текущее время с помощью класса System
Класс System предоставляет два метода получения текущего времени в миллисекундах и наносекундах. Мы можем использовать время в миллисекундах, чтобы создать объект Date. Время в наносекундах используется в основном в научных экспериментах или тестировании производительности программ.
Ниже представлен фрагмент кода, показывающий использование методов класса System для получения текущего времени.
|
1 2 3 4 5 6 7 |
long currentTimeMillis = System.currentTimeMillis(); Date date = new Date(currentTimeMillis); System.out.println("Текущее время в миллисекундах : " + currentTimeMillis); System.out.println(date); long nanoTime = System.nanoTime(); System.out.println("Текущее время в наносекундах : " + nanoTime); |
Класс System. Переменные окружения
Класс System предоставляет метод получения переменных среды в виде неизменяемой Map, которая содержит пары ключ-значение по каждой переменной среды.
|
1 2 3 4 5 6 7 8 9 10 11 |
//получаем переменные среды в виде коллекции Map //и просматриваем каждую Map<String, String> envMap = System.getenv(); Set<String> keySet = envMap.keySet(); for(String key : keySet){ System.out.println("Ключ : " + key + " | значение : " + envMap.get(key)); } // получаем определенную переменную среды String pathValue = System.getenv("PATH"); System.out.println("$PATH=" + pathValue); |
Работаем с Security Manager
Класс SecurityManager используется для реализации политики безопасности вашего приложения, класс System обеспечивает полезные методы получения SecurityManager для работающей в данный момент JVM и установки необходимых настроек.
|
1 2 3 4 5 6 7 8 9 10 |
SecurityManager secManager = System.getSecurityManager(); if(secManager == null){ System.out.println("SecurityManager не сконфигурирован"); } SecurityManager mySecManager = new SecurityManager(); System.setSecurityManager(mySecManager); secManager = System.getSecurityManager(); if(secManager != null){ System.out.println("SecurityManager получен"); } |
Операции File IO с помощью класса System
Класс System содержит три поля — in, out и err. Они используются для чтения данных из InputStream и записи данных в OutputStream. Например, мы можем установить FileOutputStream к полю out и err для того, чтобы результат вывода в консоль записывался в файл.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
try(FileInputStream fis = new FileInputStream("input.txt"); FileOutputStream fos = new FileOutputStream("server.log");) { //устанавливаем inputStream System.setIn(fis); char c = (char) System.in.read(); System.out.print(c); //печатаем первый считанный знак //устанавливаем outputStream System.setOut(new PrintStream(fos)); System.out.write("Привет, Java\n".getBytes()); //устанавливаем errorStream System.setErr(new PrintStream(fos)); System.err.write("Сообщение об исключении\n".getBytes()); } catch (IOException e) { e.printStackTrace(); } |
Продвинутые операции. Класс System
Класс System предоставляет множество методов для продвинутых операций, например, для запуска сборщика мусора, загрузки внешней библиотеки, прекращения работы JVM.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//запустить сборщик мусора System.gc(); System.out.println("Сборщик мусора запущен"); //загружаем внешние библиотеки System.load("lbXYZ.so"); System.loadLibrary("libos.name.dylib"); //завершаем работу текущей JVM System.exit(1); // а этот вывод в консоль никогда не случится, // потому что JVM уже закончила свою работу System.out.println("JVM is terminated"); |
Это были самые интересные методы класса System в Java. Надеюсь, это поможет вам лучше понимать и в дальнейшем больше использовать класс System.



