Объектно-ориентированное программирование (ООП)
Объектно-ориентированное программирование (ООП) - это парадигма программирования, которая базируется на концепции "объектов". Она предоставляет способ организации кода, который позволяет разрабатывать более модульные, масштабируемые и легко поддерживаемые программы. Основными концепциями ООП являются классы, объекты, инкапсуляция, наследование и полиморфизм. Вот более подробное описание этих концепций:
...
Читать дальшеJXPath
// без JXPath
Address address = null;
Collection locations = vendor.getLocations();
Iterator it = locations.iterator();
while (it.hasNext()) {
Location location = (Location) it.next();
String zipCode = location.getAddress().getZipCode();
if (zipCode.equals("90210")) {
address = location.getAddress();
break;
}
}
// c JXPath
Address address = (Address) JXPathContext.newContext(vendor).
getValue( "locations[address/zipCode='90210']/address");
XPath (XML Path Language) — язык запросов к элементам XML-документа. Разработан для организации доступа к частям документа XML в файлах трансформации XSLT и является стандартом консорциума W3C. XPath призван реализовать навигацию по DOM в XML. В XPath используется компактный синтаксис, отличный от принятого в XML.
...
Читать дальшеМодули (Modules)
// module-info.java
module com.example.mymodule {
requires other.module;
exports com.example.mypackage;
}
Java 9 ввел важное изменение в структуру приложений — модульную систему Java (Java Platform Module System, JPMS). Эта система была внедрена для улучшения масштабируемости, обеспечения лучшей изоляции и повышения устойчивости приложений. Вот основные концепции модульной системы:
...
Читать дальшеНаследование конструкторов
public class SuperClass {
public SuperClass(int value) {
// инициализация суперкласса
}
}
class SubClass extends SuperClass {
public SubClass(int value) {
super (value); // вызываем конструктор суперкласса
// инициализация подкласса
}
}
В Java конструкторы не наследуются в том смысле, в котором наследуются методы и поля. Конструкторы - это специальные методы, используемые для инициализации объектов класса, и они не наследуются автоматически от суперкласса.
...
Читать дальшеfor-each для собственного класса
import java.util.Iterator;
import java.util.List;
public class IterableExample {
public static void main (String[] args) {
Row row = new Row(List.of(new Cell("text1"), new Cell("text2"), new Cell("text3")));
for (Cell cell : row) {
System.out.println(cell.text);
}
}
static class Row implements Iterable<Cell> {
private List<Cell> cells;
public Row(List<Cell> cells) {
this.cells = cells;
}
@Override
public Iterator<Cell> iterator() {
// в данном случаем можно было просто отдать cells.iterator();
return new Iterator<>() {
private int index = 0;
@Override
public boolean hasNext() {
return index < cells.size();
}
@Override
public Cell next() {
return cells.get(index++);
}
};
}
}
static class Cell {
String text;
public Cell(String text) {
this.text = text;
}
}
}
В Java цикл for-each позволяет перебирать элементы массивов, коллекций и других итерируемых объектов без необходимости использовать индексы или итераторы. Однако, для того чтобы вы могли использовать for-each для перебора элементов своего собственного класса, этот класс должен реализовать интерфейс Iterable и предоставить метод iterator(), возвращающий объект, реализующий интерфейс Iterator.
...
Читать дальшеScanner
import java.util.Scanner;
public class ScannerExample {
public static void main (String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Введите целое число: ");
int number = scanner.nextInt();
System.out.println("Вы ввели: " + number);
// Не забывайте закрывать Scanner после использования.
scanner.close();
}
}
Класс Scanner представляет собой инструмент для считывания данных из различных источников, таких как стандартный ввод (клавиатура), файлы и строки. Он является частью пакета java.util и используется для обработки ввода данных в приложениях.
...
Читать дальшеImmutable Classes (неизменяемые классы)
Неизменяемость — это характеристика объектов Java, которая делает их неизменными для будущих изменений после их инициализации. Его внутреннее состояние невозможно никак изменить. Чтобы изменить состояние, мы должны создать новую копию такого объекта с предполагаемыми изменениями.
Возьмем пример класса java.lang.String, который является неизменяемым классом. После создания строки мы не сможем изменить содержимое этой строки. Каждый общедоступный API в классе String возвращает новую строку с измененным содержимым. Исходная строка всегда остается неизменной.
...
Читать дальшеArrays.toString() и Arrays.deepToString()
Double[] doubleArray = new Double[] {11.0, 45.55, 83.4};
System.out.println(Arrays.toString(doubleArray));
// [11.0, 45.55, 83.4]
String[] stringArray = new String[] {"John", "Mary", "Bob"};
System.out.println(Arrays.toString(stringArray));
// [John, Mary, Bob]
String[][] deepArray = new String[][] {{"John", "Mary"}, {"Alice", "Bob"}};
System.out.println(Arrays.deepToString(deepArray) );
// [[John, Mary], [Alice, Bob]]
В Java массивы не переопределяют toString(), поэтому, если вы попытаетесь напечатать его напрямую, вы получите имя класса + '@' + шестнадцатеричный хеш-код массива, как определено в Object.toString().
Но обычно нам на самом деле нужно что бы напечаталось содержимое массива....
Читать дальшеПринцип программирования KISS

Принцип программирования KISS - это акроним, который расшифровывается как "Keep It Simple, Stupid" или более корректно "Keep It Short and Simple". Этот принцип представляет собой философию, которая подразумевает, что программное обеспечение должно быть создано и поддерживаться с максимальной простотой, чтобы быть более надежным, легко понимаемым и легко изменяемым.
...
Читать дальшеСпособы передачи параметров в Java
public class PassBy {
public static void main(String[] args) {
int i = 0;
System.out.println(i); // 0
changeValue(i);
System.out.println(i); // 0
SuperInt si = new SuperInt(0);
System.out.println(si.i); // 0
changeValue(si);
System.out. println(si.i); // 10
}
public static void changeValue(int val) {
val = 10;
}
public static void changeValue(SuperInt val) {
val.i = 10;
}
static class SuperInt {
public int i;
public SuperInt(int i) {
this.i = i;
}
}
}
В языках программирования существует два основных способа передачи параметров в методы (или функции) — "по значению" и "по ссылке". Эти методы определяют, каким образом изменения, внесенные в параметр внутри метода, влияют на исходное значение аргумента, переданного методу. Рассмотрим оба способа более подробно.
...
Читать дальше