diff options
Diffstat (limited to 'java.html.markdown')
| -rw-r--r-- | java.html.markdown | 386 | 
1 files changed, 335 insertions, 51 deletions
| diff --git a/java.html.markdown b/java.html.markdown index 928eb39f..48e6ec75 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -5,6 +5,9 @@ contributors:      - ["Jakukyo Friel", "http://weakish.github.io"]      - ["Madison Dickson", "http://github.com/mix3d"]      - ["Simon Morgan", "http://sjm.io/"] +    - ["Zachary Ferguson", "http://github.com/zfergus2"] +    - ["Cameron Schermerhorn", "http://github.com/cschermerhorn"] +    - ["Rachel Stiyer", "https://github.com/rstiyer"]  filename: LearnJava.java  --- @@ -14,9 +17,11 @@ programming language.  ```java  // Single-line comments start with // +  /*  Multi-line comments look like this.  */ +  /**  JavaDoc comments look like this. Used to describe the Class or various  attributes of a Class. @@ -27,11 +32,12 @@ import java.util.ArrayList;  // Import all classes inside of java.security package  import java.security.*; -// Each .java file contains one outer-level public class, with the same name as -// the file. +// Each .java file contains one outer-level public class, with the same name +// as the file.  public class LearnJava { -    // A program must have a main method as an entry point. +    // In order to run a java program, it must have a main method as an entry  +    // point.      public static void main (String[] args) {          // Use System.out.println() to print lines. @@ -45,12 +51,36 @@ public class LearnJava {          System.out.print("Hello ");          System.out.print("World"); +        // Use System.out.printf() for easy formatted printing. +        System.out.printf("pi = %.5f", Math.PI); // => pi = 3.14159          /////////////////////////////////////// -        // Types & Variables +        // Variables          /////////////////////////////////////// +        /* +        *  Variable Declaration +        */          // Declare a variable using <type> <name> +        int fooInt; +        // Declare multiple variables of the same  +        // type <type> <name1>, <name2>, <name3> +        int fooInt1, fooInt2, fooInt3; + +        /* +        *  Variable Initialization +        */ + +        // Initialize a variable using <type> <name> = <val> +        int fooInt = 1; +        // Initialize multiple variables of same type with same  +        // value <type> <name1>, <name2>, <name3> = <val> +        int fooInt1, fooInt2, fooInt3; +        fooInt1 = fooInt2 = fooInt3 = 1; + +        /* +        *  Variable types +        */          // Byte - 8-bit signed two's complement integer          // (-128 <= byte <= 127)          byte fooByte = 100; @@ -72,11 +102,13 @@ public class LearnJava {          // Note: Java has no unsigned types.          // Float - Single-precision 32-bit IEEE 754 Floating Point +        // 2^-149 <= float <= (2-2^-23) * 2^127          float fooFloat = 234.5f; -        // f is used to denote that this variable value is of type float; +        // f or F is used to denote that this variable value is of type float;          // otherwise it is treated as double.          // Double - Double-precision 64-bit IEEE 754 Floating Point +        // 2^-1074 <= x <= (2-2^-52) * 2^1023          double fooDouble = 123.4;          // Boolean - true & false @@ -86,8 +118,38 @@ public class LearnJava {          // Char - A single 16-bit Unicode character          char fooChar = 'A'; -        // final variables can't be reassigned to another object. +        // final variables can't be reassigned to another object,          final int HOURS_I_WORK_PER_WEEK = 9001; +        // but they can be initialized later. +        final double E; +        E = 2.71828; + +        // BigInteger - Immutable arbitrary-precision integers +        // +        // BigInteger is a data type that allows programmers to manipulate +        // integers longer than 64-bits. Integers are stored as an array of +        // of bytes and are manipulated using functions built into BigInteger +        // +        // BigInteger can be initialized using an array of bytes or a string.         +        BigInteger fooBigInteger = new BigInteger(fooByteArray); + +        // BigDecimal - Immutable, arbitrary-precision signed decimal number +        // +        // A BigDecimal takes two parts: an arbitrary precision integer  +        // unscaled value and a 32-bit integer scale +        // +        // BigDecimal allows the programmer complete control over decimal +        // rounding. It is recommended to use BigDecimal with currency values +        // and where exact decimal precision is required. +        // +        // BigDecimal can be initialized with an int, long, double or String +        // or by initializing the unscaled value (BigInteger) and scale (int). +        BigDecimal fooBigDecimal = new BigDecimal(fooBigInteger, fooInt); +         +        // Be wary of the constructor that takes a float or double as +        // the inaccuracy of the float/double will be copied in BigDecimal. +        // Prefer the String constructor when you need an exact value. +        BigDecimal tenCents = new BigDecimal("0.1");          // Strings          String fooString = "My String Is Here!"; @@ -112,7 +174,7 @@ public class LearnJava {          // Another way to declare & initialize an array          int[] y = {9000, 1000, 1337};          String names[] = {"Bob", "John", "Fred", "Juan Pedro"}; -        boolean bools[] = new boolean[] {true, false, false}; +        boolean bools[] = {true, false, false};          // Indexing an array - Accessing an element          System.out.println("intArray @ 0: " + intArray[0]); @@ -121,14 +183,18 @@ public class LearnJava {          intArray[1] = 1;          System.out.println("intArray @ 1: " + intArray[1]); // => 1 -        // Others to check out +        // Other data types worth checking out          // ArrayLists - Like arrays except more functionality is offered, and          //              the size is mutable.          // LinkedLists - Implementation of doubly-linked list. All of the          //               operations perform as could be expected for a          //               doubly-linked list. -        // Maps - A set of objects that maps keys to values. A map cannot -        //        contain duplicate keys; each key can map to at most one value. +        // Maps - A set of objects that map keys to values. Map is +        //        an interface and therefore cannot be instantiated. +        //        The type of keys and values contained in a Map must +        //        be specified upon instantiation of the implementing +        //        class. Each key may map to only one corresponding value, +        //        and each key may appear only once (no duplicates).          // HashMaps - This class uses a hashtable to implement the Map          //            interface. This allows the execution time of basic          //            operations, such as get and insert element, to remain @@ -145,7 +211,8 @@ public class LearnJava {          System.out.println("1+2 = " + (i1 + i2)); // => 3          System.out.println("2-1 = " + (i2 - i1)); // => 1          System.out.println("2*1 = " + (i2 * i1)); // => 2 -        System.out.println("1/2 = " + (i1 / i2)); // => 0 (0.5 truncated down) +        System.out.println("1/2 = " + (i1 / i2)); // => 0 (int/int returns int) +        System.out.println("1/2 = " + (i1 / (double)i2)); // => 0.5          // Modulo          System.out.println("11%3 = "+(11 % 3)); // => 2 @@ -158,18 +225,23 @@ public class LearnJava {          System.out.println("2 <= 2? " + (2 <= 2)); // => true          System.out.println("2 >= 2? " + (2 >= 2)); // => true +        // Boolean operators +        System.out.println("3 > 2 && 2 > 3? " + ((3 > 2) && (2 > 3))); // => false +        System.out.println("3 > 2 || 2 > 3? " + ((3 > 2) || (2 > 3))); // => true +        System.out.println("!(3 == 2)? " + (!(3 == 2))); // => true +          // Bitwise operators!          /*          ~      Unary bitwise complement          <<     Signed left shift -        >>     Signed right shift -        >>>    Unsigned right shift +        >>     Signed/Arithmetic right shift +        >>>    Unsigned/Logical right shift          &      Bitwise AND          ^      Bitwise exclusive OR          |      Bitwise inclusive OR          */ -        // Incrementations +        // Increment operators          int i = 0;          System.out.println("\n->Inc/Dec-rementation");          // The ++ and -- operators increment and decrement by 1 respectively. @@ -187,7 +259,7 @@ public class LearnJava {          // If statements are c-like          int j = 10; -        if (j == 10){ +        if (j == 10) {              System.out.println("I get printed");          } else if (j > 10) {              System.out.println("I don't"); @@ -216,14 +288,24 @@ public class LearnJava {          System.out.println("fooDoWhile Value: " + fooDoWhile);          // For Loop -        int fooFor;          // for loop structure => for(<start_statement>; <conditional>; <step>) -        for (fooFor = 0; fooFor < 10; fooFor++) { +        for (int fooFor = 0; fooFor < 10; fooFor++) {              System.out.println(fooFor);              // Iterated 10 times, fooFor 0->9          }          System.out.println("fooFor Value: " + fooFor); - +         +        // Nested For Loop Exit with Label +        outer: +        for (int i = 0; i < 10; i++) { +          for (int j = 0; j < 10; j++) { +            if (i == 5 && j ==5) { +              break outer; +              // breaks out of outer loop instead of only the inner one +            } +          } +        } +                  // For Each Loop          // The for loop is also able to iterate over arrays as well as objects          // that implement the Iterable interface. @@ -231,7 +313,6 @@ public class LearnJava {          // for each loop structure => for (<object> : <iterable>)          // reads as: for each element in the iterable          // note: the object type must match the element type of the iterable. -          for (int bar : fooList) {              System.out.println(bar);              //Iterates 9 times and prints 1-9 on new lines @@ -255,6 +336,23 @@ public class LearnJava {                       break;          }          System.out.println("Switch Case Result: " + monthString); +         +        // Starting in Java 7 and above, switching Strings works like this: +        String myAnswer = "maybe"; +        switch(myAnswer) { +            case "yes": +                System.out.println("You answered yes."); +                break; +            case "no": +                System.out.println("You answered no."); +                break; +            case "maybe": +                System.out.println("You answered maybe."); +                break; +            default: +                System.out.println("You answered " + myAnswer); +                break; +        }          // Conditional Shorthand          // You can use the '?' operator for quick assignments or logic forks. @@ -264,7 +362,6 @@ public class LearnJava {          String bar = (foo < 10) ? "A" : "B";          System.out.println(bar); // Prints A, because the statement is true -          ////////////////////////////////////////          // Converting Data Types And Typecasting          //////////////////////////////////////// @@ -287,7 +384,6 @@ public class LearnJava {          // with some more intermediate concepts. Feel free to check it out here:          // http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html -          ///////////////////////////////////////          // Classes And Functions          /////////////////////////////////////// @@ -306,12 +402,36 @@ public class LearnJava {          // toString returns this Object's string representation.          System.out.println("trek info: " + trek.toString()); -    } // End main method -} // End LearnJava class +        // Double Brace Initialization +        // The Java Language has no syntax for how to create static Collections +        // in an easy way. Usually you end up in the following way: +        private static final Set<String> COUNTRIES = new HashSet<String>(); +        static { +           validCodes.add("DENMARK"); +           validCodes.add("SWEDEN"); +           validCodes.add("FINLAND"); +        } +        // But there's a nifty way to achieve the same thing in an +        // easier way, by using something that is called Double Brace +        // Initialization. +        private static final Set<String> COUNTRIES = new HashSet<String>() {{ +            add("DENMARK"); +            add("SWEDEN"); +            add("FINLAND"); +        }} + +        // The first brace is creating a new AnonymousInnerClass and the +        // second one declares an instance initializer block. This block +        // is called when the anonymous inner class is created. +        // This does not only work for Collections, it works for all +        // non-final classes. -// You can include other, non-public outer-level classes in a .java file +    } // End main method +} // End LearnJava class +// You can include other, non-public outer-level classes in a .java file, +// but it is not good practice. Instead split classes into separate files.  // Class Declaration Syntax:  // <public/private/protected> class <class name> { @@ -326,16 +446,27 @@ class Bicycle {      private int speed;  // Private: Only accessible from within the class      protected int gear; // Protected: Accessible from the class and subclasses      String name; // default: Only accessible from within this package +    static String className; // Static class variable + +    // Static block  +    // Java has no implementation of static constructors, but +    // has a static block that can be used to initialize class variables  +    // (static variables).  +    // This block will be called when the class is loaded. +    static { +        className = "Bicycle"; +    }      // Constructors are a way of creating classes      // This is a constructor      public Bicycle() { +        // You can also call another constructor: +        // this(1, 50, 5, "Bontrager");          gear = 1;          cadence = 50;          speed = 5;          name = "Bontrager";      } -      // This is a constructor that takes arguments      public Bicycle(int startCadence, int startSpeed, int startGear,          String name) { @@ -345,13 +476,13 @@ class Bicycle {          this.name = name;      } -    // Function Syntax: +    // Method Syntax:      // <public/private/protected> <return type> <function name>(<args>)      // Java classes often implement getters and setters for their fields      // Method declaration syntax: -    // <scope> <return type> <method name>(<args>) +    // <access modifier> <return type> <method name>(<args>)      public int getCadence() {          return cadence;      } @@ -360,29 +491,24 @@ class Bicycle {      public void setCadence(int newValue) {          cadence = newValue;      } -      public void setGear(int newValue) {          gear = newValue;      } -      public void speedUp(int increment) {          speed += increment;      } -      public void slowDown(int decrement) {          speed -= decrement;      } -      public void setName(String newName) {          name = newName;      } -      public String getName() {          return name;      }      //Method to display the attribute values of this Object. -    @Override +    @Override // Inherited from the Object class.      public String toString() {          return "gear: " + gear + " cadence: " + cadence + " speed: " + speed +              " name: " + name; @@ -394,7 +520,7 @@ class PennyFarthing extends Bicycle {      // (Penny Farthings are those bicycles with the big front wheel.      // They have no gears.) -    public PennyFarthing(int startCadence, int startSpeed){ +    public PennyFarthing(int startCadence, int startSpeed) {          // Call the parent constructor with super          super(startCadence, startSpeed, 0, "PennyFarthing");      } @@ -417,26 +543,25 @@ class PennyFarthing extends Bicycle {  // Example - Food:  public interface Edible { -	public void eat(); // Any class that implements this interface, must +    public void eat(); // Any class that implements this interface, must                         // implement this method.  }  public interface Digestible { -	public void digest(); +    public void digest();  } -  // We can now create a class that implements both of these interfaces. -public class Fruit implements Edible, Digestible { +public class Fruit implements Edible, Digestible {        @Override -	public void eat() { -		// ... -	} +    public void eat() { +        // ... +    }      @Override -	public void digest() { -		// ... -	} +    public void digest() { +        // ... +    }  }  // In Java, you can extend only one class, but you can implement many @@ -444,13 +569,173 @@ public class Fruit implements Edible, Digestible {  public class ExampleClass extends ExampleClassParent implements InterfaceOne,      InterfaceTwo {      @Override -	public void InterfaceOneMethod() { -	} +    public void InterfaceOneMethod() { +    } + +    @Override +    public void InterfaceTwoMethod() { +    } + +} + +// Abstract Classes + +// Abstract Class declaration syntax +// <access-level> abstract <abstract-class-name> extends <super-abstract-classes> { +//     // Constants and variables +//     // Method declarations +// } + +// Marking a class as abstract means that it contains abstract methods that +// must be defined in a child class. Similar to interfaces, abstract classes +// cannot be instantiated, but instead must be extended and the abstract +// methods defined. Different from interfaces, abstract classes can contain a +// concrete and abstract methods. Methods in an interface cannot have a body, +// mixture of unless the method is static, and variables are final by default, +// unlike an abstract class. Also abstract classes CAN have the "main" method. +public abstract class Animal +{ +    public abstract void makeSound(); + +    // Method can have a body +    public void eat() +    { +        System.out.println("I am an animal and I am Eating.");   +        // Note: We can access private variable here. +        age = 30; +    } + +    // No need to initialize, however in an interface +    // a variable is implicitly final and hence has +    // to be initialized. +    protected int age; + +    public void printAge() +    { +        System.out.println(age);   +    } + +    // Abstract classes can have main function. +    public static void main(String[] args) +    { +        System.out.println("I am abstract"); +    } +} + +class Dog extends Animal +{ +    // Note still have to override the abstract methods in the +    // abstract class. +    @Override +    public void makeSound() +    { +        System.out.println("Bark"); +        // age = 30;	==> ERROR!	age is private to Animal +    } + +    // NOTE: You will get an error if you used the +    // @Override annotation here, since java doesn't allow +    // overriding of static methods. +    // What is happening here is called METHOD HIDING. +    // Check out this SO post: http://stackoverflow.com/questions/16313649/ +    public static void main(String[] args) +    { +        Dog pluto = new Dog(); +        pluto.makeSound(); +        pluto.eat(); +        pluto.printAge(); +    } +} +// Final Classes + +// Final Class declaration syntax +// <access-level> final <final-class-name> { +//     // Constants and variables +//     // Method declarations +// } + +// Final classes are classes that cannot be inherited from and are therefore a +// final child. In a way, final classes are the opposite of abstract classes +// because abstract classes must be extended, but final classes cannot be +// extended. +public final class SaberToothedCat extends Animal +{ +    // Note still have to override the abstract methods in the +    // abstract class.      @Override -	public void InterfaceTwoMethod() { -	} +    public void makeSound() +    { +        System.out.println("Roar"); +    } +} + +// Final Methods +public abstract class Mammal() +{ +    // Final Method Syntax: +    // <access modifier> final <return type> <function name>(<args>) + +    // Final methods, like, final classes cannot be overridden by a child +    // class, and are therefore the final implementation of the method. +    public final boolean isWarmBlooded() +    { +        return true; +    } +} + +// Enum Type +// +// An enum type is a special data type that enables for a variable to be a set +// of predefined constants. The variable must be equal to one of the values +// that have been predefined for it. Because they are constants, the names of +// an enum type's fields are in uppercase letters. In the Java programming +// language, you define an enum type by using the enum keyword. For example, +// you would specify a days-of-the-week enum type as: +public enum Day { +    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, +    THURSDAY, FRIDAY, SATURDAY   } + +// We can use our enum Day like that: +public class EnumTest { +    // Variable Enum +    Day day; +     +    public EnumTest(Day day) { +        this.day = day; +    } +     +    public void tellItLikeItIs() { +        switch (day) { +            case MONDAY: +                System.out.println("Mondays are bad."); +                break; +            case FRIDAY: +                System.out.println("Fridays are better."); +                break;    +            case SATURDAY:  +            case SUNDAY: +                System.out.println("Weekends are best."); +                break;      +            default: +                System.out.println("Midweek days are so-so."); +                break; +        } +    } +     +    public static void main(String[] args) { +        EnumTest firstDay = new EnumTest(Day.MONDAY); +        firstDay.tellItLikeItIs(); // => Mondays are bad. +        EnumTest thirdDay = new EnumTest(Day.WEDNESDAY); +        thirdDay.tellItLikeItIs(); // => Midweek days are so-so. +    } +} + +// Enum types are much more powerful than we show above.  +// The enum body can include methods and other fields. +// You can se more at https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html +  ```  ## Further Reading @@ -474,7 +759,7 @@ The links provided here below are just to get an understanding of the topic, fee  * [Generics](http://docs.oracle.com/javase/tutorial/java/generics/index.html) -* [Java Code Conventions](http://www.oracle.com/technetwork/java/codeconv-138413.html) +* [Java Code Conventions](http://www.oracle.com/technetwork/java/codeconvtoc-136057.html)  **Online Practice and Tutorials** @@ -482,7 +767,6 @@ The links provided here below are just to get an understanding of the topic, fee  * [Codingbat.com](http://codingbat.com/java) -  **Books**:  * [Head First Java](http://www.headfirstlabs.com/books/hfjava/) @@ -491,4 +775,4 @@ The links provided here below are just to get an understanding of the topic, fee  * [Objects First with Java](http://www.amazon.com/Objects-First-Java-Practical-Introduction/dp/0132492660) -* [Java The Complete Reference](http://www.amazon.com/gp/product/0071606300) +* [Java The Complete Reference](http://www.amazon.com/gp/product/0071606300)
\ No newline at end of file | 
