Java весна 2013 лекция 2

44

Transcript of Java весна 2013 лекция 2

Page 1: Java весна 2013 лекция 2
Page 2: Java весна 2013 лекция 2
Page 3: Java весна 2013 лекция 2
Page 4: Java весна 2013 лекция 2

public abstract class MyAbstractClass {private int a = 0;

public int getSum(){return a + getB();

}

protected int getA(){return a;

}

abstract int getB();}

public interface MyInterface {int getDif();

}

MyAbstractClass

<<abstract>>

- int a

+ int getSum()

+ int getA()

int getB()

MyInterface

<<interface>>

int getDif()

Page 5: Java весна 2013 лекция 2

public class MyClass extends MyAbstractClass implements MyInterface {private int b = 1;

public int getB(){return b;

}

public int getDif(){return getA() - b;

}}

MyAbstractClass

<<abstract>>

MyInterface

<<interface>>

MyClass

Page 6: Java весна 2013 лекция 2

public static void main(String[] args) {//MyAbstractClass aObject = new MyAbstractClass(); - ошибка

MyClass object1 = new MyClass();int result1 = object1.getSum(); int result2 = object1.getDif(); doSomething(object1);

MyInterface object2 = new MyClass();//int result3 = object2.getSum(); - ошибкаint result4 = object2.getDif();doSomething(object2);

}

public static void doSomething(MyInterface object){//MyClass object3 = object; - ошибка//int result5 = object.getSum(); - ошибкаint result6 = object.getDif();

}

Page 7: Java весна 2013 лекция 2

public class MyClassChild extends MyClass implements Interface1, Interface2{…

}

MyClassInterface2

<<interface>>

MyClassChild

Interface1

<<interface>>

Page 8: Java весна 2013 лекция 2
Page 9: Java весна 2013 лекция 2

static Class<T> forName(String className)

String getCanonicalName()

Fields[] getField(String name)

Class[] getInterfaces()

Method[] getMethods()

Constructor[] getConstructors()

Page 10: Java весна 2013 лекция 2

public Class<?> getClass()

public String toString()

public boolean equals(Object obj)

public int hashCode()

protected Object clone()

Page 11: Java весна 2013 лекция 2
Page 12: Java весна 2013 лекция 2

bits type type

8 byte boolean

16 short char

32 int float

64 long double

Page 13: Java весна 2013 лекция 2
Page 14: Java весна 2013 лекция 2

Page 15: Java весна 2013 лекция 2

List students == List<Object> students

public Object getFirstValue(List listOfNumbers){return listOfNumbers.get(0);

}

public String getFirstStringValue(List<String> listOfNumbers){return listOfNumbers.get(0);

}

public static void main(String[] args){List<Integer> listOfNumbers = new ArrayList<Integer>();listOfNumbers.add(42);String name1 = (String)getFirstValue(listOfNumbers); //Runtime error!String name2 = getFirstStringValue(listOfNumbers); //Compile error!

}

Page 16: Java весна 2013 лекция 2

public class GenericExample<T> {private T value;

public GenericExample(T value){this.value = value;

}

public T getT(){return value;

}

public static void main(String[] args) {GenericExample<Integer> intObject = new GenericExample<Integer>(1);Integer valueInteger = intObject.getT();GenericExample<String> stringObject = new GenericExample<String>("word");String valueString = stringObject.getT();

}}

Page 17: Java весна 2013 лекция 2

public class GenericExample {

public static <T> T getTheFirst(List<T> list){return list.get(0);

}

public static void main(String[] args) {List<Integer> listOfInts = new ArrayList<Integer>();listOfInts.add(0);Integer intValue = getTheFirst(listOfInts);

List<String> listOfStrings = new ArrayList<String>();listOfInts.add(“Java is the best!”);String stringValue = getTheFirst(listOfStrings);

}}

Page 18: Java весна 2013 лекция 2

public class LongId<T> {private long id;

public LongId(long id){this.id = id;

}

public long getLong(){return id;

}}

public void manyIdsInParams(long userId, long serverId, long adress){…}

public void manyIdsInParams(LongId<User> userId, LongId<Server> serverId, LongId<Adress> adress){…}

Page 19: Java весна 2013 лекция 2
Page 20: Java весна 2013 лекция 2
Page 21: Java весна 2013 лекция 2
Page 22: Java весна 2013 лекция 2
Page 23: Java весна 2013 лекция 2
Page 24: Java весна 2013 лекция 2
Page 25: Java весна 2013 лекция 2
Page 26: Java весна 2013 лекция 2

Page 27: Java весна 2013 лекция 2
Page 28: Java весна 2013 лекция 2
Page 29: Java весна 2013 лекция 2

public class HelloRunnable implements Runnable {

public void run() { System.out.println("Hello from a thread!");

}

public static void main(String args[]) { (new Thread(new HelloRunnable())).start();

} }

Page 30: Java весна 2013 лекция 2

public class HelloThread extends Thread {

public void run() {System.out.println("Hello from a thread!");

}

public static void main(String args[]) { (new HelloThread()).start();

}}

Page 31: Java весна 2013 лекция 2
Page 32: Java весна 2013 лекция 2

try { Thread.sleep(5000);

} catch (InterruptedException e) { // We've been interrupted.return;

}

for (int i = 0; i < inputs.length; i++) { heavyTask(inputs[i]); if (Thread.interrupted()) { // We've been interrupted.

return; }

}

Page 33: Java весна 2013 лекция 2

public class HelloThread extends Thread { public void run() {

System.out.println(“1. Hello from a thread!"); } public static void main(String args[]) {

Thread thread = new HelloThread();thread.start(); thread.join();System.out.println(“2. Hello from the main!");

}}

Page 34: Java весна 2013 лекция 2

public class HelloThread extends Thread { private StringBuilder builder;

public HelloThread(StringBuilder builder){this.builder = builder;

}

public void run() {builder.append(“?. Hello from a thread!");

}

public static void main(String args[]) {StringBuilder builder = new StringBuilder();Thread thread = new HelloThread(builder);thread.start();builder.append(“?. Hello from the main!");thread.join();Systen.out.printin(builder.toString());

}}

Page 35: Java весна 2013 лекция 2
Page 36: Java весна 2013 лекция 2

public synchronized void increment() { j++;

}

public void addName(String name) { synchronized(lockObject) {

lastName = name; nameCount++;

} nameList.add(name);

}

Page 37: Java весна 2013 лекция 2

public class TwoMonitors { private long c1 = 0; private long c2 = 0; private Object lock1 = new Object(); //the first monitor private Object lock2 = new Object(); //the second monitor

public void c1Up() { synchronized(lock1) {

c1++; }

}

public void c2Up() { synchronized(lock2) {

c2++; }

} }

Page 38: Java весна 2013 лекция 2

public void c1c2Up() { synchronized(lock1) {

c1++; synchronized(lock2) {

c2++; }

} }

public void c2c1Up() { synchronized(lock2) {

c2++; synchronized(lock1) {

c1++; }

}}

Page 39: Java весна 2013 лекция 2

private boolean needDoSomething;

public void run() {while(true){

if(needDoSomething){doSomething();

}Thread.sleep(1000);

}}

Page 40: Java весна 2013 лекция 2

Page 41: Java весна 2013 лекция 2
Page 42: Java весна 2013 лекция 2

4. class Object и class Class<?>. Основные методы этих классов

5. Простые типы в Java. Классы "обертки" простых типов.

6. Generic programming в Java. Создание своих шаблонных классов и методов.

7. Коллекции в Java. Iterator, Iterable.

8. Processes и Threads.

9. Interface Runnable. class Thread. Методы start() и run().

10. Методы класса Thread: sleep(), interrupt(), join().

11. Ключевые слова volatile и synchronized.

12. Проблемы многопоточного доступа к данным. Race condition. Deadlock.

13. Методы класса Object: wait(), notify() и notifyAll().

Page 43: Java весна 2013 лекция 2

Шаг 4: Вынести Frontend из класса Main:

class Frontend extends AbstractHandler implements Runnable{…}

Шаг 5: Добавить в класс Frontend переменную handleCount = 0.

Запустить Frontend в отдельном потоке. В методе run() писать значение handleCount в лог каждые 5 секунд.

В методе handle() кроме формирования страницы, увеличивать значение handleCount.

Hint: Для handleCount хорошо подходит тип данных AtomicInteger.

Page 44: Java весна 2013 лекция 2