Шпаргалка для java программиста

Начинающим Java программистам

Программирую на Java вот уже 7 лет. Но на работе часто приходится обучать новое поколение. В связи с этим и решил сделать некоторую шпаргалку, которая, надеюсь, пригодится и для хабрчан. Если кто-то может помочь дополнить чем-то информацию из этой статьи, то пишите! Итак:

Основные ресурсы для начального обучения

  • www.javable.com — сайт со статьями и tutorial’ом по Java. Все в основном на русском.
  • www.exampledepot.com — очень полезный ресурс, где собраны краткие примеры использования классов для тех или иных пакетов
  • java.sun.com — без первоисточника не обойтись. Для любого Java программиста JavaDoc должен быть истиной в последней инстанции. Так же здесь можно найти серию tutorial’ов на все возможные темы.

Основные Java пакеты

  1. java.lang — основа основ. Каждый класс в этом пакете нуждается в отдельном внимании.
  2. java.io — ни одна программа не может обойтись без операций с вводом-выводом.
  3. java.util — пакет в основном содержит все необходимое для работы с коллекциями: Collection, Enumeration, Set, List, Map и т.д. и т.п.
  4. java.net — содержит основные классы для работы с сетью.
  5. java.text — все необходимое для форматирования текста
  6. java.lang.reflect — Java не была бы Java’ой если бы не Reflection. Reflection стирает грань между данными и кодом.
  7. javax.sql — все необходимое по работе с базами данных
  8. javax.xml.*, org.w3c.dom.*, org.xml.sax.* — без этих пакетов работа с XML просто немыслима

Ресурсы для расширения кругозора

  • onjava.com — рано или поздно все новости мира Java попадают сюда
  • www.javaspecialists.eu — ресурс полезен как новичкам, так и продвинутым программистам, так как содержит много статей о тонкостях работы с Java.
  • www.theserverside.com — рекомендуется подписаться на RSS, так как часто проскакивают весьма интересные вещи по Java.
Читайте также:  Python get context data

Java Библитеки, которые должны знать все

Java не заканчивается знаниями лишь о возможностях JSDK. Чтобы чувствовать себя комфортно необходимо знать еще десятка два сторонних библиотек, используемых Java программистами повсеместно. Итак, начнем с основных:

  • Commons Lang — то что «забыли» включить в JDK
  • Commons Math — отличное дополнение для java.math
  • Commons Logging — логирование должно быть грамотным. За System.out.println для вывода логов начинающим программистам уже через неделю обучения следует отрубать руки.
  • Commons Net — логическое продолжение для пакета java.net. Множество классов для работы с основными сетевыми протоколами.
  • Commons VFS — отличная библиотека для абстрагирования от способа хранения файла. Позволяет достаточно обобщено иметь доступ до файлов по FTP, SFTP, WEBDAV, (G)ZIP и т.д.
  • Commons IO — работа с вводом-выводом часто получается весьма муторной, но с этой библиотекой все становится несколько веселее.
  • HttpClient — библиотека по работе с http ресурсами.
  • JUnit — любой код, должен сопровождаться тестированием. Для автоматизации тестирования и предназначена эта библиотека.

На этом пока все. Если подобные шпаргалки по Java вам интересны, то могу так же выложить свою коллекцию «простейших» задач по Java, которые ориентированы, на то, чтобы быстро освоить основные пакеты Java.

Источник

Шпаргалки Java программиста 10: Lombok

image

Lombok — проект по добавлению дополнительной функциональности в Java c помощью изменения исходного кода перед Java компиляцией.

По сути, проект Lombok позволяет избавиться от многословности Java в большинстве случаев и перестать писать огромные простыни кода из гетеров, сеттеров, equals, hashcode и toString (да их обычно генерит IDE, но читать и менять все равно приходится программисту), в результате Java становиться почти такой же краткой как Kotlin, Scala или C#.

Читайте также:  What is java security script

Что особенно радует, Lombok очень прост и легок в добавлении к вашему проекту. Если вам, как и мне, нравится принцип KISS, то советую посмотреть на Lombok.

Так же рекомендую, посмотреть на другие статьи цикла, например последную шпаргалку по Java SE8

Добавление в проекты очень простое, достаточно добавить обычные зависимости:

  org.projectlombok lombok 1.16.18  

Так же можно (но не обязательно добавить плагин для работы статических компиляторов, если нужно анализировать код после компиляции Lombok), см. тут

Так же есть плагины для Idea, Eclipse и т.п. Если вы собираете Gradle или Maven, то собираться будет и без этих плагинов, но будут Idea/Eclipse возможно будут показывать ошибки при анализе кода.

public Example(@NonNull P p)
public Example(@NonNull P p) < super("Hello"); if (p == null) < throw new NullPointerException("p"); >this.name = p.getName(); > 
@Getter @Setter private int age = 10; 
private int age = 10; public int getAge() < return age; >public void setAge(int age)
@ToString(exclude="f") public class Example 
@EqualsAndHashCode( exclude=) public class Example  
public class Example < . @Override public boolean equals(Object o) < . >@Override public int hashCode()
@RequiredArgsConstructor( staticName = "of" ) @AllArgsConstructor( access = AccessLevel.PROTECTED ) public class E  
public class E  < private E(T description) < . >public static E of( T description ) < return new E(description); > 
@Data public class Example
public class Example < private final String name; private int age; public Example( String name ) < this.name = name; >public String getName() < return this.name; >void setAge(int age) < this.age = age; >public int getAge() < return this.age; >@Override public String toString() < return . ; >@Override public boolean equals( Object o ) < . >@Override public int hashCode()
@Value public class Example
public class Example < private final String name; private final int age; public Example( String name, int age ) < this.name = name; this.age = age; >public String getName() < return this.name; >public int getAge() < return this.age; >@Override public String toString() < return . ; >@Override public boolean equals( Object o ) < . >@Override public int hashCode()
@Builder public class Example < private String name; private int age; @Singular private Setoccupations; > 
public class Example < private String name; private int age; private Setoccupations; Example( String name, int age, Set occupations ) < this.name = name; this.age = age; this.occupations = occupations; >public static ExampleBuilder builder() < return new ExampleBuilder(); >public static class ExampleBuilder < private String name; private int age; private ArrayList<>occupations; ExampleBuilder() < >public ExampleBuilder name( String name ) < this.name = name; return this; >public ExampleBuilder age( int age ) < this.age = age; return this; >public ExampleBuilder occupation( String occupation ) < if (this.occupations == null) < this.occupations = new ArrayList(); > this.occupations.add(occupation); return this; > . public Example build() < Setoccupations = . ; return new Example(name, age, occupations); > @java.lang.Override public String toString() < . >> > 
public String utf8ToString(byte[] bytes) < try < return new String(bytes, "UTF-8"); >catch (UnsupportedEncodingException e) < throw Lombok.sneakyThrow(e); >> 
private final Object readLock = new Object(); @Synchronized public static void hello() < . ; >@Synchronized public int answerToLife() < . >@Synchronized("readLock") public void foo()
private static final Object $LOCK = new Object[0]; private final Object $lock = new Object[0]; private final Object readLock = new Object(); public static void hello() < synchronized($LOCK) < . >> public int answerToLife() < synchronized($lock) < . >> public void foo() < synchronized(readLock) < . >> 
@Slf4j public class Example
val map = new HashMap(); for (val entry : map.entrySet())
final HashMap map = new HashMap(); . for (final Map.Entry entry : map.entrySet())
@Cleanup InputStream in = new FileInputStream(args[0]); @Cleanup OutputStream out = new FileOutputStream(args[1]); . 
InputStream in = new FileInputStream(args[0]); try < OutputStream out = new FileOutputStream(args[1]); try < . >finally < if (out != null) < out.close(); >> > finally < if (in != null) < in.close(); >> 

Название: @NonNull
Описание: обработка переменных,
которые не должны получать null
Код Lombok:

public Example(@NonNull P p)
public Example(@NonNull P p) < super("Hello"); if (p == null) < throw new NullPointerException("p"); >this.name = p.getName(); > 

Название: Getter /
Setter
Описание: легкое создание getter’ов и
setter’ов
Код Lombok:

@Getter @Setter private int age = 10; 
private int age = 10; public int getAge() < return age; >public void setAge(int age)

Название: @ToString
Описание: определение аннотации перед классом,
для реализации стандартного toString метода
Код Lombok:

@ToString(exclude="f") public class Example 

Название: @EqualsAndHashCode
Описание: легкое создание методов Equals и HashCode
Код Lombok:

@EqualsAndHashCode( exclude=) public class Example  
public class Example < . @Override public boolean equals(Object o) < . >@Override public int hashCode()

Название:
@NoArgsConstructor,
@RequiredArgsConstructor,
@AllArgsConstructor
Описание: создания пустого конструктора,
конструктора включающего все final поля,
либо конструктора включающего все возможные поля
Код Lombok:

@RequiredArgsConstructor( staticName = "of" ) @AllArgsConstructor( access = AccessLevel.PROTECTED ) public class E  
public class E  < private E(T description) < . >public static E of( T description ) < return new E(description); > 

Название: Data
Описание: генерация всех служебных методов,
заменяет сразу команды @ToString, @EqualsAndHashCode,
Getter, Setter, @RequiredArgsConstructor
Код Lombok:

@Data public class Example
public class Example < private final String name; private int age; public Example( String name ) < this.name = name; >public String getName() < return this.name; >void setAge(int age) < this.age = age; >public int getAge() < return this.age; >@Override public String toString() < return . ; >@Override public boolean equals( Object o ) < . >@Override public int hashCode()

Название: Value
Описание: создание неизменяемых классов,
аналог Data, но для неизменяемых классов
Код Lombok:

@Value public class Example
public class Example < private final String name; private final int age; public Example( String name, int age ) < this.name = name; this.age = age; >public String getName() < return this.name; >public int getAge() < return this.age; >@Override public String toString() < return . ; >@Override public boolean equals( Object o ) < . >@Override public int hashCode()

Название: Builder
Описание: реализация паттерна bulder,
Singular – используется для объектов в
единственном экземпляре (добавления элемента
в коллекции и т.п.)
Код Lombok:

@Builder public class Example < private String name; private int age; @Singular private Setoccupations; > 
public class Example < private String name; private int age; private Setoccupations; Example( String name, int age, Set occupations ) < this.name = name; this.age = age; this.occupations = occupations; >public static ExampleBuilder builder() < return new ExampleBuilder(); >public static class ExampleBuilder < private String name; private int age; private ArrayList<>occupations; ExampleBuilder() < >public ExampleBuilder name( String name ) < this.name = name; return this; >public ExampleBuilder age( int age ) < this.age = age; return this; >public ExampleBuilder occupation( String occupation ) < if (this.occupations == null) < this.occupations = new ArrayList(); > this.occupations.add(occupation); return this; > . public Example build() < Setoccupations = . ; return new Example(name, age, occupations); > @java.lang.Override public String toString() < . >> > 

Название: @SneakyThrows
Описание: обертка проверяемых исключений
Код Lombok:

@SneakyThrows(
UnsupportedEncodingException.class)
public String utf8ToString(byte[] bytes) return new String(bytes, «UTF-8»);
>

public String utf8ToString(byte[] bytes) < try < return new String(bytes, "UTF-8"); >catch (UnsupportedEncodingException e) < throw Lombok.sneakyThrow(e); >> 

Название: @Synchronized
Описание: простое создание synchronized блоков
Код Lombok:

private final Object readLock = new Object(); @Synchronized public static void hello() < . ; >@Synchronized public int answerToLife() < . >@Synchronized("readLock") public void foo()
private static final Object $LOCK = new Object[0]; private final Object $lock = new Object[0]; private final Object readLock = new Object(); public static void hello() < synchronized($LOCK) < . >> public int answerToLife() < synchronized($lock) < . >> public void foo() < synchronized(readLock) < . >> 

Название: Log
Описание: добавление инницилизации логирования,
так же позволяет выбрать вид логгера: @CommonsLog,
@JBossLog, Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j
Код Lombok:

@Slf4j public class Example
val map = new HashMap(); for (val entry : map.entrySet())
final HashMap map = new HashMap(); . for (final Map.Entry entry : map.entrySet())

Название: @Cleanup
Описание: простое определение ресурсов,
так чтобы они автоматически закрывались
после окончания работы кода.
(не так актуально при использовании
try with resources )
Код Lombok:

@Cleanup InputStream in = new FileInputStream(args[0]); @Cleanup OutputStream out = new FileOutputStream(args[1]); . 
InputStream in = new FileInputStream(args[0]); try < OutputStream out = new FileOutputStream(args[1]); try < . >finally < if (out != null) < out.close(); >> > finally < if (in != null) < in.close(); >> 

Источник

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