Что такое утилитные классы java

Лекции Java / 06. Базовые и утилитные классы API JAVA.pptx

План лекции n Пакет java.lang и его структура n Класс Object и его методы n Класс Class n Интерфейс Comparable n Классы-обертки примитивных типов n Класс Math n Классы работы со строками n Пакет java.util и его структура n Collection Framework

n Базовые классы • Object • Class • Обертки примитивных типов • Math • Классы работы со строками • Классы управления процессами и потоками • Средства рефлексии • И т.д.

n Базовые интерфейсы • Cloneable • Comparable • Runnable • И т.д. n Основные исключения • Exception • Error • RuntimeException • SecutityException • И т.д.

Класс Object n Является суперклассом для всех классов (включая массивы) n Переменная этого типа может ссылаться на любой объект (но не на переменную примитивного типа) n Его методы наследуются всеми классами n Реализует базовые операции с объектами

Методы класса Object n Получение строкового представления объекта String toString() n Получение ссылки на описание класса объекта final Class getClass() n Клонирование объекта (получение копии) protected Object clone() n Проверка равенства объектов boolean equals(Object obj) n Получение хэш-кода объекта int hashCode() n Метод завершения работы с объектом protected void finalize() n Методы обслуживания блокировок в многопоточных приложениях void wait(. ), void notify(), void notifyAll()

Клонирование объектов n Считается, что результатом клонирования является копия объекта n Массивы поддерживают операцию клонирования int[] arrayCopy = (int []) array.clone(); n В классе Object метод clone() является защищенным n Метод clone() реализуется в конкретном классе n Никто не гарантирует того, что результатом его выполнения будет копия объекта, и даже того, что новый объект будет того же класса n Однако существует ряд соглашений, регламентирующих реализацию метода clone()

Читайте также:  Synchronized блок в java

Простое клонирование объектов n Класс должен переопределять метод clone() n Класс должен реализовывать интерфейс-маркер Cloneable n Результат клонирования должен быть получен вызовом super.clone() n Результатом работы метода Object.clone() является точная копия объекта public Object clone() < Object result = null; try < result = super.clone(); >catch (CloneNotSupportedException ex) < throw new InternalError(); >return result; >

Особенности клонирования

int[][] a = , >;
int[][] b = (int[][]) a.clone(); 1
System.out.println(a[0][0]);
9
b[0][0] = 9;

System.out.println(a[0][0]); n В результате клонирования скопировался только сам объект a , но не объект, на которые он ссылался n При использовании результатов клонирования необходимо явное приведение типа • Начиная с Java5 для массивов можно не выполнять явное приведение типа, но только для массивов

Глубокое клонирование объектов n Простого клонирования может быть недостаточно, если объект содержит ссылки на агрегированные объекты n В этом случае после процедуры простого клонирования необходимо создать и их копии тоже public Object clone() < Object result = null; try < result = super.clone(); result.a = (. ) a.clone(); . >catch (CloneNotSupportedException ex) < >return result; >

Равенство объектов n Простого сравнения ссылок недостаточно для сравнения содержимого объектов n Для сравнения объектов по их содержимому применяется метод equals(Object obj) n В классе Object метод реализован таким образом, что возвращает true только при сравнении с самим объектом n Конкретный класс должен переопределять метод equals(. )

Источник

Paths

Утилитарный класс — это класс-помощник, содержащий статические переменные и статические методы, которые выполняют определенный перечень задач, объединённых одним смыслом.

Давайте рассмотрим примеры стандартных утилитарных классов:

java.lang.Math Класс, который может выполнять множество различных математических вычислений, дает нам некоторые математические константы.
java.util.Arrays Класс содержит различные методы для работы с массивами (такие как сортировка и поиск). Этот класс также содержит статическую фабрику, которая позволяет просматривать массивы как списки.
java.lang.System Класс реализует методы для работы с системой. Чаще всего мы можем его использовать для вывода текста в консоли. Для этого мы обращаемся к статической переменной out , которая хранит в себе объект класса PrintStream , и уже у него вызываем метод println ( System.out.println ).

Мы можем и сами создать утилитарный класс: для этого мы просто создаем класс со статическими public методами, которые нам необходимы. Но нужно помнить, что для создания утилитарного класса необходимы весомые причины. Например, необходимость использования одного и того же метода или набора методов, выполняющего единственную задачу (скажем, сложное вычисление) из нескольких различных классов.

Давай рассмотрим пример утилитарного класса — класс Paths .

Класс Paths

Это класс состоит всего из одного статического метода — get — с разными принимаемыми параметрами.

Мы можем передать в метод get :

get(String first, String. more) Путь целиком, либо перечисление названий директорий и (или) файла в последнем аргументе.
get(URI uri) URI.

Этот утилитарный класс решает задачу преобразования пути (в виде строки) или URI в Path . Path мы уже проходили и понимаем, зачем он нам нужен и как мы с ним далее можем работать.

Часто бывает, что мы имеем дело с путем именно в виде String или URI. Вот тут-то мы и можем воспользоваться методами утилитарного класса Paths .

Давайте рассмотрим примеры:

 Path path = Paths.get("C:\\Users\\User\\Documents\\MyFile.txt"); 
 Path path = Paths.get(URI.create("file:///Users/User/Code/MyClass.java")); 
 Path path = Paths.get(System.getProperty("user.home"),"documents", "document.txt"); 

Но в самом деле есть один нюанс. С появлением Java 11 версии любая реализация метода get вызывает в себе Path.of .

 public static Path get(String first, String. more) < return Path.of(first, more); >public static Path get(URI uri)

Теперь этот утилитарный класс может быть признан устаревшим, поэтому мы должны использовать именно Path.of для наших целей.

 Path path = Paths.get("C:\\Users\\User\\Documents\\MyFile.txt"); 
 Path path = Path.of("C:\\Users\\User\\Documents\\MyFile.txt"); 
 Path path = Paths.get(URI.create("file:///Users/User/Code/MyClass.java")); 
 Path path = Path.of(URI.create("file:///Users/User/Code/MyClass.java")); 
 Path path = Paths.get(System.getProperty("user.home"),"documents", "document.txt"); 
 ath path = Path.of(System.getProperty("user.home"),"documents", "document.txt"); 

Источник

Create a Utility Class in Java

Create a Utility Class in Java

Utility classes in Java are also known as Helper Class. It is an efficient way to create methods that can be re-used. The code we need to use over and over again can be put inside a utility class.

Usage of Utility Class in Java

The Java utility class is a stateless class that cannot be instantiated and declared using final and public keywords. In the example given below, we have a UtilityClassExample , which has a private constructor that prevents instantiation. For example, there are many examples of Util classes in Java like Apache StringUtils , CollectionUtils , or java.lang.Math .

The methods in the utility class should be declared static and not abstract as object methods need instantiation. The final keyword prevents subclassing. Here, we create our own Utility class with a private constructor, which, when invoked, throws an exception. Since we declared a private constructor, default can not be created; hence class can not be instantiated.

In the code given below, we have all members of the UtilityClassExample static. If we need to add or subtract two int or float type variables, we created methods in the utility class to re-use the code. We also have a method that returns a number multiplied by ten.

In the method addFloatValues() , we have also used Math.round() to round off the result to the nearest int. The Float class has the sum() method that returns the sum of two float arguments. We call each member method of this utility class passing arguments and print the output in the main() method of the class TestUtitity . Thus this utility class has methods that are used very often.

public final class UtilityClassExample   private static final int constantValue = 10;  private UtilityClassExample()   throw new java.lang.UnsupportedOperationException("Utility class and cannot be instantiated");  >  public static int addIntValues(int i,int j)  int sum = i + j;  return sum;  >  public static int subIntValues(int i,int j)  int diff = 0;  if(i>j)  diff = i - j;  >else  diff = j - i;  >  return diff;  >  public static float addFloatValues(float i, float j)  float sum = Float.sum(i,j);  return Math.round(sum);  >  public static float subFloatValues(float i, float j)  float diff = 0.00f;  if(i>j)  diff = i - j;  >else  diff = j - i;  >  return diff;  >   public static int returnValAfterMultiplying(int i)  return i * constantValue;  > >  class TestUtility   public static void main(String [] args)  int a = 4;  int b = 9;  int c = 7;  float d = 3.12f;  float e = 6.85f;   System.out.println(+a+" multiplied by ten is : "+UtilityClassExample.returnValAfterMultiplying(a));  System.out.println(b+"+"+c+" is : "+UtilityClassExample.addIntValues(b,c));  System.out.println(d+"+"+e+" is : "+UtilityClassExample.addFloatValues(d,e));  System.out.println(b+"-"+a+" is : "+UtilityClassExample.subIntValues(b,a));  System.out.println(e+"-"+d+" is : "+UtilityClassExample.subFloatValues(e,d));  > > 
4 multiplied by ten is : 40 9+7 is : 16 3.12+6.85 is : 10.0 9-4 is : 5 6.85-3.12 is : 3.73 

It is not recommended to use a Utility class of your own as it reduces flexibility.

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

Источник

Оцените статью