Класс 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.