среда, 29 июля 2015 г.

SCJP

I / O
new File(parent, child)      
  • if  child = null  => NullPointerException
  • if  parent = null => new File(child)

Текущая папка С:\parent\child
File file = new File("../file.txt");
file.getPath()
   ..\file.txt     то, что передали в метод
file.getAbsolutePath()    C:\parent\child\..\file.txt       текущая папка+аргумент метода
file.getCanonicalPath()    C:\parent\file.txt  нормальный логический путь

Потоки
Thread.yield() - вызывает приостановку текущего потока, позволяя какому-то другому потоку начать выполнение. Yield переводится как уступить, выйти, передать выполнение.
threadObj.join() - текущий поток приостанавливается и ждет, пока threadObj не закончит выполнение. Выполнение текущего потока "присоединяется" к концу выполнения другого потока.

Основные методы класса Thread
  • public void run()
  • public void start()
  • public final void join() throws InterruptedException (3 overloaded methods)
  • public static void sleep(long millis) throws InterruptedException (2 overloaded methods)
  • public static void yield()
  • public static Thread currentThread()
3 статичных метода, 2 бросают проверяемые исключения!

Некоторые методы класса Object
  • public final void wait() throws InterruptedException (3 overloaded methods)
  • public final void notify()
  • public final void notifyAll()
Все методы не статические. Только 1 метод бросает проверяемое исключение!

Generics
List<? extends Number> - List<Integer>, List<Double> ...
List<? super Integer> - List<Integer>, List<Number>, List<Object>

List<? extends Number> - коллекция с extends доступна только для чтения! В такую коллекцию нельзя добавлять элементы, при попытке вызова метода add код даже не скомпилируется.
List<? super Number> - в коллекцию c super можно добавлять элементы.

         List<? extends Integer> list = new ArrayList<Integer>(); for (Integer element : list) { System.out.println(element); } Integer first = list.get(0);
Для коллекции с extends в цикле for используется тип коллекции. Метод get также вернет объект типа коллекции.
   
         List<? super Integer> list = new ArrayList<Integer>(); for (Object element : list) { System.out.println(element); } Object first = list.get(0);
Внимательно, так как для коллекции с super в цикле for используется не тип коллекции, а Object. Метод get также вернет Object.

Object set = new TreeSet<Integer>();
boolean flag = set instanceof NavigableSet<Integer>;   // неправильно. в instanseof нельзя использовать параметризированный тип. Generic type information does not exist at runtime - it is for compile-time safety only.
boolean flag = set instanceof NavigableSet<?>;            // верно! 

Class c = new ArrayList<Integer>().getClass();        // yes
Class c = ArrayList<Integer>.class;                           // no

Создание объектов с '?' иногда возможно!
new TreeMap<String, ? super Integer>();                                          // no
class Test1 extends ArrayList<? extends Number> {}                      // no
class Test1 extends ArrayList<Set<? extends Number>> {}            // YES !
new ArrayList<Set<?>>();                                                                 // YES !

class Test <T> {
T[] array = new T[7];                                      // no
T value = new T();                                          // no
List<T> list = new ArrayList<T>();               // yes
}

Различие List<?> и List<Object>
List<?> List<Object>
 список элементов любого типа,
 в таком списке нельзы вызывать add.
 абсолютно идентично List<? extends Object> 
 только список Object, 
в список можно добавлять 
Wildcard ? means "many possibilities". If you do NOT see the question mark, then it means the <type> in the brackets, and absolutely NOTHING ELSE.

public class MyClass<T>                                  // класс
public <T> void myMethod(T t)                       // метод
1) Класс не обязательно должен быть дженериком, чтобы в нем создать дженерик-метод.
2) Если класс объявлен как дженерик, то в объявлении метода можно опустить <T>.
Ссылки
https://nikojava.wordpress.com/2008/10/10/free-scjp-mock-exams/ - Хорошие тематические тесты. Понравились.