diff options
Diffstat (limited to 'java.html.markdown')
| -rw-r--r-- | java.html.markdown | 193 | 
1 files changed, 168 insertions, 25 deletions
diff --git a/java.html.markdown b/java.html.markdown index ba602d2e..50629ce1 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -6,6 +6,8 @@ contributors:      - ["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  --- @@ -95,11 +97,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 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 @@ -114,7 +118,40 @@ public class LearnJava {          // 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!"; @@ -138,7 +175,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]); @@ -153,8 +190,12 @@ public class LearnJava {          // 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 @@ -171,8 +212,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*1.0))); // => 0.5 +        System.out.println("1/2 = " + (i1 / i2)); // => 0 (int/int returns an int) +        System.out.println("1/2 = " + (i1 / (double)i2)); // => 0.5          // Modulo          System.out.println("11%3 = "+(11 % 3)); // => 2 @@ -219,7 +260,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"); @@ -254,7 +295,18 @@ public class LearnJava {              // 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. @@ -286,6 +338,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. @@ -348,19 +417,19 @@ public class LearnJava {             validCodes.add("FINLAND");          } -        // But there's a nifty way to achive the same thing in an +        // 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 = HashSet<String>() {{ +        private static final Set<String> COUNTRIES = new HashSet<String>() {{              add("DENMARK");              add("SWEDEN");              add("FINLAND");          }} -        // The first brace is creating an new AnonymousInnerClass and the -        // second one declares and instance initializer block. This block -        // is called with the anonymous inner class is created. +        // 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. @@ -368,8 +437,8 @@ public class LearnJava {  } // End LearnJava class -// You can include other, non-public outer-level classes in a .java file,  -// but it is good practice. Instead split classes into separate files. +// 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: @@ -386,10 +455,21 @@ class Bicycle {      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:  +        // You can also call another constructor:          // this(1, 50, 5, "Bontrager");          gear = 1;          cadence = 50; @@ -455,7 +535,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");      } @@ -489,6 +569,7 @@ public interface Digestible {  // We can now create a class that implements both of these interfaces.  public class Fruit implements Edible, Digestible { +        @Override      public void eat() {          // ... @@ -504,6 +585,7 @@ public class Fruit implements Edible, Digestible {  // interfaces. For example:  public class ExampleClass extends ExampleClassParent implements InterfaceOne,      InterfaceTwo { +      @Override      public void InterfaceOneMethod() {      } @@ -511,6 +593,7 @@ public class ExampleClass extends ExampleClassParent implements InterfaceOne,      @Override      public void InterfaceTwoMethod() {      } +  }  // Abstract Classes @@ -522,10 +605,10 @@ public class ExampleClass extends ExampleClassParent implements InterfaceOne,  // }  // 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  +// 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 mixture of -// concrete and abstract methods. Methods in an interface cannot have a body,  +// concrete and abstract methods. Methods in an interface cannot have a body,  // unless the method is static, and variables are final by default, unlike an  // abstract class. Also abstract classes CAN have the "main" method. @@ -541,7 +624,7 @@ public abstract class Animal          age = 30;      } -    // No need to initialize, however in an interface  +    // No need to initialize, however in an interface      // a variable is implicitly final and hence has      // to be initialized.      protected int age; @@ -569,7 +652,7 @@ class Dog extends Animal          // age = 30;	==> ERROR!	age is private to Animal      } -    // NOTE: You will get an error if you used the  +    // 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. @@ -583,7 +666,7 @@ class Dog extends Animal      }  } -// Final Classes  +// Final Classes  // Final Class declaration syntax  // <access-level> final <final-class-name> { @@ -592,8 +675,8 @@ class Dog extends Animal  // }  // 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  +// 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  { @@ -619,6 +702,66 @@ public abstract class Mammal()          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 @@ -642,7 +785,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**  | 
