1Z0-803 Java SE 7 Programmer I Passed
Today I've passed Java SE 7 Programmer I Exam with a score of 88%.
Unlike my preparation for MS 70-483: Programming in C#, I did not make any notes to the blog and Java projects to study every nuances necessary for this level of Java Certification Exams, especially taking into account the knowledge of C#. The only things I've done are: reading appropriate literature (see below), making drafts of a future set articles dedicated to comparison of C# and Java, and ofc some notes of major differences between tese languages within the scope of topics covered by the Java Programmer I Exam. Here they are:
Unlike my preparation for MS 70-483: Programming in C#, I did not make any notes to the blog and Java projects to study every nuances necessary for this level of Java Certification Exams, especially taking into account the knowledge of C#. The only things I've done are: reading appropriate literature (see below), making drafts of a future set articles dedicated to comparison of C# and Java, and ofc some notes of major differences between tese languages within the scope of topics covered by the Java Programmer I Exam. Here they are:
---------------------------------------------------- docs.oracle.com/javase/tutorial/extra/certification/javase-7-programmer1.html OCA/OCP Java® SE 7 Programmer I & II Study Guide ---------------------------------------------------- _________ MODIFIERS Good table for revising modifiers: http://bmanolov.free.fr/javamodifiers.php _________ T Y P E S For an integer the JVM looks for matches in the following order: int, long, Integer.... _ _ _ _ _ _ PTIMITIVES 0) Primitives are passed by value, for passing-by-reference purpose corresponding wrappers can be used. 1) Completely legal: short sh = 0512; byte b = -0; 2) Char value van be assigned to an int value, but this rule is inapplicable for arrays. * that is why char even can be passed to a method taking int as a param * integer cannot be passed instead of char because of narrowing conversion 3) defaut values of primitive data types and objects: char -> \u0000 byte, short, int -> 0 long -> 0L float -> 0f double -> 0d boolean -> false Objects(inc. String) -> null _ _ _ _ ARRRAYS char[] chArr = new char[] {'1', '2', '3'}; Frack this sh*t! Equals arrays shit declaration: int []arr[] = {{1,2,3},{1,2,3}}; int arr[][] = {{1,2,3},{1,2,3}}; int[][] arr = {{1,2,3},{1,2,3}}; It's incorrect to specify the size of an array with a square brackets when declaring, instantiating and initializing an array in a single line Correct multidimensional array declaration in init: String[][] strArr = new String[][] {{},{}}; Arrays have an ATTRIBUTE (NOT A METHOD) called length. _ _ _ _ _ _ ArrayList<e> benefits: *reduces memory footprint *dynamically resizes based on the number of elements ___________________________________________ ArrayList<string> ejg = new ArrayList<>() is legal object initialization ___________________________________________ ArrayList<string>() ejg = new ArrayList<>() ejg.get(0) // throws an exception System.out.println(ejg); // prints [] ___________________________________________ ArrayList<string>() ejg = new ArrayList<>(); ejg.add(0, "first"); // OK ejg.add(10, "lol"); // Cannot add at index which is OutOfBounds .add(index, obj) // inserts obj at specified index position Array void array.copy(Object src, int srcPos, Object dest, int destPos, int length2Copy) _ _ _ _ STRINGS String content cannot be compared using == <= ... only using .equals(String str) method. Strings have only .length(), not an attribute. (Arrays have attribute .length, not a method) _ _ _ _ String .charAt(int index) .concat(String str) .contains(CharSequence s) .isEmpty() .getChars(int srcBegin, int srcEnd, // Characters are copied from this sequence char[] dst, int dstBegin) // into the destination character array dst. .getBytes() .equals(Object obj) .equalsIgnoreCase(String anotherString) int compareTo(String anotherString) / compareToIgnoreCase(String anotherString) .regionMatches(int toffset, String other, int offset, int len) .matches(String regex) .startsWith(String prefix) / startsWith(String prefix, int toffset) .endsWith(String suffix) .indexOf(int ch) / indexOf((int ch, int fromIndex)) .lastIndexOf(int ch, int fromIndex) .replace(char oldChar,char newChar) .replaceFirst(String regex, String replacement) .replaceAll(String regex, String replacement) .reverse() .substring(int beginIndex) / substring(int beginIndex, int endIndex) CharSequence subSequence(int beginIndex, int endIndex) .split(String regex, int limit) .trim() .length() .toLowerCase() / toLowerCase(Locale locale) .toUpperCase() / toUpperCase(Locale locale) .toCharArray() .valueOf(Object obj) .intern() _ _ _ _ _ _ _ StringBuilder StringBuilder by default takes the initialize size as length+16 which is 0+16. so capacity would return 16 here. StringBuilder.insert() can be used to insert number, string, char or CharSequence StringBuilder append(Object obj) int capacity() int charAt(char ch) StringBuilder delete(int start, int end) StringBuilder deleteCharAt(int index) void ensureCapacity(int minimumCapacity) // Characters are copied from this sequence into the destination character array dst. void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) StringBuilder insert(int indexToInsert, char[] charArr, int charArrStart, int charArrLen) StringBuilder insert(int offset, Object obj) int indexOf(String str) int indexOf(String str, int fromIndex) int lastIndexOf(String str) int lastIndexOf(String str, int fromIndex) int length() StringBuilder reverse() // replace only characters from start to end exclusively, // the rest of original string is shifted by the rest elements of the replacement string StringBuilder replace(int start, int end, String str) String toString() // if < than current length, characters with index > newLength will be cut off, // if greater - '\u0000' will be inserted void trimToSize() void setLength(int newLength) void setCharAt(int index, char ch) String substring(int start) String substring(int start, end) CharSequence subSequence(int start, int end) __________ EXCEPTIONS - Exceptions are classes. If you try to catch an exception from its derived class afterwards, the code wont compile. - When overriding class method throws should be omitted or be of the same, derived type, however, an overriding method can throw RuntimeException and derived, not thrown by the overriden method. Exception / Throwable \ Error - java.lang.Throwable is the base class of all exceptions - Error is not an exception coz it is not a sublacc of Exception - checked exceptions must be a part of methods signatur if not catched in the body SHould be never handled: StackOverflowError OutOfMemoryError Exception inheritance tree IOException BadStringOperationException CertificateException CloneNotSupportedException (class do not overrides clone method of Object) DataFormatException NotBoundException (A NotBoundException is thrown if an attempt is made to lookup or unbind in the registry a name that has no associated binding.) ParseException (Signals that an error has been reached unexpectedly while parsing.) TimeoutException (Exception thrown when a blocking operation times out. ) RuntimeException inheritance tree NullPointerException IndexOutOfBoundsException ArrayIndexOutOfBoundsException StringIndexOutOfBoundsException IllegalArgumentException NumberFormatException SecurityException The rule that "if a base class' method doesn't throw an exception, an overriding method in the derived class can't thow an exception" aolies only to checked exceptions. A base or overriden method is free to throw any Error or runtime exception. ExceptionInInitializerError may be throw by JVM when a static initializer in your code throws a NullPointerException. NumberFormatException is thrown by multiple methods from Java API when invalid numbers are passed on a Strings to be converted to the specified number format. NumberFormatException is a subclass of IllegalArgumentException __________________________ INHERITANCE & POLYMORPHISM - polymorphism does not apply to static methods and depends only of type of a variable, not the object - polymorphic methods are also called overridden methods - interfaces can only extends other interfaces - class cannot implement two interfaces with the sme method having different return types, even if types pass IS-A test (compile-time error) ______ SCOPES 1) If access modifier is not specified it considered to be default, which means that member can be accessed by any class within the package. 2) protected modifier extends package accessibility to child classes from other packages. ____________ CONTROL FLOW _ _ _ _ SWITCH valid types: byte, int, Integer, String 0) SWITCH is based on labels, so when executed it jumps to the first matching label or default and starts execute everything after it. 1) Compile-time constants, including expressions and final variables, are permissible in case labels: final int someNumber = 10; switch (num) { case 10*3 : ... case 10/3 : ... // decimal part will be discarded and 3 will be compared with num someNumber: ... } * Java compiler does not consider a final variable which was not asigned value at initialization considered not to be a compile-time constant and thus cannot be applied to switch case statement. 2) Default statement case executes only of no matching values are found. ______________ INITIALIZATION ______________________________________________________________________________________ Java VM calls and executes the main method - a class shouldn't define multiple main methods, which used to start an app; - more than one class in app can define main method; - the main method must accept String[] of varargs String...; ______________________________________________________________________________________ STATIC AND INSTANCE INITIALIZERS This shit is legal :( class Ideone { static { System.out.println("Static Initializer 1"); } { System.out.println("Non-Static Initializer 1"); } public static void main (String[] args) throws java.lang.Exception { ... } static { System.out.println("Static Initializer 2"); } { System.out.println("Non-Static Initializer 2"); } } * static constructors are invoked at first mention of a Class in any line of code. * if you do not assign explicit values to instance variables of class, they are initialized to their default values, even if no-arg constructor is declared with empty body. _______ CASTING When mathematical operations is perfomed on any primitives than smaller than int, the result is automatically cast to an integer. Legal: int iNum = (int)123.456; // iNum = 123 _________ OPERATORS ^ - XOR (true if only one of operands is true, otherwise - false) _____________ PAY ATTENTION - comments can appear at any position in a source files - a base class can user reference variables and objects of its derived classes - instanceof - on the methods name when overloading - "0123456".substring(0,5) // 0 inclusive and 5 exclusive, so the output is: 01234; - ClassCastExceptions are arisen at runtime; - you should not implement an interface if it is already implemented by a super class; - there is no difference how any times you will import a package; - the path of imported class used in an import statement isn't related to the class's physical location. When + operator encounters a String object, it trells all remaining operands as String objects. Concatenation runs from left2right, and if either operand is a String, the operands are concatenated. If both operands are numbers, they are added together. Interfaces and their methods are implicitly abstract and adding that modifier makes no difference. The method must be implemented by any (concrete) implementing class. Default no-args constructor generated by the compiler only if the class has no constructor defined explicitly. _________________ PACKAGES & IMPORT Automatically imported: Java.lang Pachage with no name import static allowes to import static members import static java.lang.Math.PI; //или все целиком: import static java.lang.Math.*;
Comments
Post a Comment