Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Intermediate Java

Intermediate Java

Adrien Couque

March 14, 2013
Tweet

More Decks by Adrien Couque

Other Decks in Technology

Transcript

  1. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Mots clés Types primitifs boolean byte char double float int long short Visibilité private protected public Constantes true false null void Conditions if else switch case default break return Boucles continue do for while Déclarations abstract extends implements interface new package transient volatile Inutilisés const goto Exceptions try catch finally throw throws
  2. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Mots clés Types primitifs boolean byte char double float int long short Visibilité private protected public Constantes true false null void Conditions if else switch case default break return Boucles continue do for while Déclarations abstract extends implements interface new package synchronized transient volatile Inutilisés const goto Exceptions try catch finally throw throws
  3. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Types primitifs Range Default Size boolean true,  false false 1 byte -­‐128..127 0 8 short -­‐32,768..32,767 0 16 int -­‐2,147,483,648..   2,147,483,647 0 32 long -­‐9,223,372,036,854,775,808..   9,223,372,036,854,775,807 0L 64 float 1.4e-­‐45  -­‐>  3.4e38 0.0f 32 double 439e-­‐324  -­‐>  1.79e308 0.0d 64 char \u0000’..  ‘\uffff’   0..65,535 \u0000’ 16
  4. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Visibilité Modifier Class Package Subclass World public Y Y Y Y protected Y Y Y N no modifier Y Y N N private Y N N N
  5. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly final • Variable : non modifiable – type primitif : constante – référence : référence constante, contenu modifiable – peut être initialisé plus tard (mais doit l’être avant utilisation) • Méthode : non surchargeable – Améliore performances
  6. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly final • Variable : non modifiable – type primitif : constante – référence : référence constante, contenu modifiable – peut être initialisé plus tard (mais doit l’être avant utilisation) • Méthode : non surchargeable – Améliore performances – private -> final (implicitement) • Classe : non héritable • Argument : read-only
  7. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly for each • Syntaxe : • Code compilé : • Possible d’itérer sur des collections customs : il suffit d’implémenter Iterable<T> for(T t : collection) { } Iterator<T> iterator = collection.getIterator(); while(iterator.hasNext()) { T t = iterator.next(); }
  8. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly enum • Possible d’affecter des valeurs public enum Numbers {ONE, TWO, THREE, ...}; enum Colors { BLACK(0x000000), WHITE(0xFFFFFF), RED(0xFF0000); private int value; Colors(int value) { this.value = value; } public int getValue() { return value; } }
  9. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly import • Import statique : importe le contenu statique directement dans la classe import java.util.List; import java.util.*; double r = Math.cos(Math.PI * theta); import static java.lang.Math.PI; import static java.lang.Math.*; double r = cos(PI * theta);
  10. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly static • Variable : classe au lieu d’instance • Méthode : classe au lieu d’instance • Classe interne : indépendante de la classe conteneur • Bloc static : class MyClass { static { //Exécuté quand la classe est chargée sur la JVM } }
  11. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Throwable • Error : – erreurs critiques, ex : CoderMalfunctionError, ThreadDeath, VirtualMachineError, LinkageError – assertions • Exception : – lancées via throw – doivent être catchées ou transmises (throws) : pas obligatoire pour les RuntimeExceptions : ArithmeticException, ClassCastException, NullPointerException, NoSuchElementException, NegativeArraySizeException, IllegalArgumentException... – possibilité de créer ses propres exceptions (ou RuntimeExceptions) assert test : message;
  12. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Threading • Thread : classe dont il faut hériter • Runnable : interface contenant la méthode run() MonThread t = new MonThread() ; t.start(); MonRunnable r = new MonRunnable() ; new Thread(r).start();
  13. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Threading • Android : AsyncTask • Classe abstraite qui offre un contrôle plus fin class MyAsyncTask extends AsyncTask<A,B,C> { protected void onPreExecute() {} protected void onProgressUpdate(B... values) {} protected C doInBackground(A... params) {} protected void onPostExecute(C result) {} } MyAsyncTask task = new MyAsyncTask(A... params); task.execute();
  14. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Threading • synchronized : public synchronized void maMethode(); synchronized(monObjet) { //Blabla }
  15. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Generics • Utilisation classique : • Mieux : • Encore mieux : • Pour des classes : public MyClass<T> extends List<T> implements Cloneable<T> public String getRandom(List<String> list) {} public <T> T getRandom(List<T> list) {} public <T> T getRandom(List<? extends T> list) {}
  16. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Generics • Uniquement pour la compilation : type erasure • Héritage de generics : • Wildcard : <?> List<? extends MyClass> static <T extends Comparable<? super T>> void sort(List<T> list) Map<?, ?> A extends B List<A> vs List<B> ? List<A> vs List<? extends A> ? List<A> vs List<? extends B> ?
  17. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Réfléxivité • POO au runtime • Permet d’accéder aux classes, à l’héritage, aux champs, aux méthodes, ...
  18. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Réfléxivité : Class • Récupérer une classe • Méthodes sur la classe Class c = o.getClass(); Class c = Class.forName(className); Field getField(String name); Method getMethod(String name); Constructor getConstructor(Class[] parameters); Class[] getInterfaces Class getSuperclass(); Package getPackage();
  19. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Réfléxivité : Field et Method • Field • Method String getName(); Class getType(); int getModifier(); String getName(); Class getReturnType(); Class[] getParameterTypes(); int getModifiers(); Class[] getExceptionTypes();
  20. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Réfléxivité : exemples • Créer un objet • Accéder à un champ privé Class clazz = Class.forName("com.applidium.project.MyObject"); MyObject = clazz.newInstance(); Class clazz = object.getClass(); Field field = clazz.getDeclaredField("type"); field.setAccessible(true); field.get(object); field.set(object, null);
  21. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Réfléxivité : exemples • Appeler une méthode non déclarée • Plus propre try { Class c = WebView.class; Method m = c.getMethod("setLayerType", Integer.TYPE, Paint.class); m.invoke(webView, WebView.LAYER_TYPE_SOFTWARE, null); } catch(Exception e) {} @TargetApi(11) if (android.os.Build.VERSION.SDK_INT >= 11) { ... }
  22. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Réfléxivité : exemples static Integer[] ultimateAnswer() { Integer[] ret = new Integer[256]; java.util.Arrays.fill(ret, 42); return ret; } public static void main(String args[]) throws Exception { EverythingIsTrue.setFinalStatic( Class.forName("java.lang.Integer$IntegerCache") .getDeclaredField("cache"), ultimateAnswer()); System.out.format("6 * 9 = %d", 6 * 9); // "6 * 9 = 42" }
  23. 02/01/12 Confidentiel © 2012 Applidium | Focus On : ARM

    Assembly Pour aller plus loin Boxed Types Number Boolean Byte Character Double Float Integer Long Short String StringBuffer StringBuilder StringUtils Set AbstractSet TreeSet HashSet LinkedHashSet Collection AbstractCollection List Set List LinkedList AbstractList ArrayList Vector Serializable Cloneable Map SortedMap AbstractMap EnumMap HashMap TreeMap LinkedHashMap Comparable Comparator Object