learnxinyminutes-docs/java.html.markdown
Prashanth Babu 8245d1dda3 Fixed few mistakes. Added few missing features.
1. Added JavaDoc comments.
2. Mentioned and used tab character by giving an example on escape
character for Tab.
3. Fixed the condition evaluation to true or false instead of 1 or 0.
4. Added switch case statement example for Strings.
5. Added default access level modifier to the Java class.
6. Added Java Tutorial trail to links for further research.
7. Added link for OOP Concepts for Java and have put all the
corresponding links as a children to this.
8. Fixed various other statements for consistency.
2013-07-07 14:38:43 +05:30

14 KiB

language contributors filename
java
Jake Prather
http://github.com/JakeHP
LearnJava.java

Java is a general-purpose, concurrent, class-based, object-oriented computer programming language. Read more here.

// 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.
*/

// Import ArrayList class inside of the java.util package
import java.util.ArrayList;
// Import all classes inside of java.security package
import java.security.*;

// Each .java file contains one public class, with the same name as the file.
public class LearnJava {

    // A program must have a main method as an entry point
    public static void main (String[] args) {

        // Use System.out.println to print lines
        System.out.println("Hello World!");
        System.out.println(
            "Integer: " + 10 +
            " Double: " + 3.14 +
            " Boolean: " + true);

        // To print without a newline, use System.out.print
        System.out.print("Hello ");
        System.out.print("World");


        ///////////////////////////////////////
        // Types & Variables
        ///////////////////////////////////////

        // Declare a variable using <type> <name> [
        // Byte - 8-bit signed two's complement integer
        // (-128 <= byte <= 127)
        byte fooByte = 100;

        // Short - 16-bit signed two's complement integer
        // (-32,768 <= short <= 32,767)
        short fooShort = 10000;

        // Integer - 32-bit signed two's complement integer
        // (-2,147,483,648 <= int <= 2,147,483,647)
        int fooInt = 1;

        // Long - 64-bit signed two's complement integer
        // (-9,223,372,036,854,775,808 <= long <= 9,223,372,036,854,775,807)
        long fooLong = 100000L; // L is used to denote that this variable value is of type Long; else it is treated as integer by default.

        // Note: Java has no unsigned types

        // Float - Single-precision 32-bit IEEE 754 Floating Point
        float fooFloat = 234.5f; // f is used to denote that this variable value is of type float; else it is treated as double. 

        // Double - Double-precision 64-bit IEEE 754 Floating Point
        double fooDouble = 123.4;

        // Boolean - true & false
        boolean fooBoolean = true;
        boolean barBoolean = false;

        // Char - A single 16-bit Unicode character
        char fooChar = 'A';

        // Use final to make a variable immutable
        final int HOURS_I_WORK_PER_WEEK = 9001;

        // Strings
        String fooString = "My String Is Here!";

        // \n is an escaped character that starts a new line
        String barString = "Printing on a new line?\nNo Problem!";
        // \t is an escaped character that adds a tab character
        String bazString = "Do you want to add a tab?\tNo Problem!";
        System.out.println(fooString);
        System.out.println(barString);
        System.out.println(bazString);

        // Arrays
        //The array size must be decided upon declaration
        //The format for declaring an array is follows:
        //<datatype> [] <var name> = new <datatype>[<array size>];
        int [] intArray = new int[10];
        String [] stringArray = new String[1];
        boolean [] booleanArray = new boolean[100];

        // Another way to declare & initialize an array
        int [] y = {9000, 1000, 1337};

        // Indexing an array - Accessing an element
        System.out.println("intArray @ 0: " + intArray[0]);

        // Arrays are zero-indexed and mutable.
        intArray[1] = 1;
        System.out.println("intArray @ 1: " + intArray[1]); // => 1

        // Others to check out
        // ArrayLists - Like arrays except more functionality is offered,
        //             and the size is mutable
        // LinkedLists
        // Maps
        // HashMaps

        ///////////////////////////////////////
        // Operators
        ///////////////////////////////////////
        System.out.println("\n->Operators");

        int i1 = 1, i2 = 2; // Shorthand for multiple declarations

        // Arithmetic is straightforward
        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)

        // Modulo
        System.out.println("11%3 = "+(11 % 3)); // => 2

        // Comparison operators
        System.out.println("3 == 2? " + (3 == 2)); // => false
        System.out.println("3 != 2? " + (3 != 2)); // => true
        System.out.println("3 > 2? " + (3 > 2)); // => true
        System.out.println("3 < 2? " + (3 < 2)); // => false
        System.out.println("2 <= 2? " + (2 <= 2)); // => true
        System.out.println("2 >= 2? " + (2 >= 2)); // => true

        // Bitwise operators!
        /*
        ~       Unary bitwise complement
        <<      Signed left shift
        >>      Signed right shift
        >>>     Unsigned right shift
        &       Bitwise AND
        ^       Bitwise exclusive OR
        |       Bitwise inclusive OR
        [Java Bitwise Operators](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html)
        */

        // Incrementations
        int i = 0;
        System.out.println("\n->Inc/Dec-rementation");
        System.out.println(i++); //i = 1. Post-Incrementation
        System.out.println(++i); //i = 2. Pre-Incrementation
        System.out.println(i--); //i = 1. Post-Decrementation
        System.out.println(--i); //i = 0. Pre-Decrementation

        ///////////////////////////////////////
        // Control Structures
        ///////////////////////////////////////
        System.out.println("\n->Control Structures");

        // If statements are c-like
        int j = 10;
        if (j == 10){ // Evaluates to true only if value of j is equal to 10. 
            System.out.println("In this case, I get executed and I print this since j is equal to 10.");
        } else if (i > 10) { // Evaluates to true only if value of j is greater than 10.
            System.out.println("I never run if j = 10; I will run only if j is greater than 10");
        } else { // If none of the above if-conditions match, then control will fall back to else-condition; In this case, if value of j is less than 10.
            System.out.println("I also never run if j = 10; I will run only if j is less than 10");
        }

        // While loop
        int fooWhile = 0;
        while(fooWhile < 100)
        {
            //System.out.println(fooWhile);
            //Increment the counter
            //Iterated 99 times, fooWhile 0->99
            fooWhile++;
        }
        System.out.println("fooWhile Value: " + fooWhile);

        // Do While Loop
        int fooDoWhile = 0;
        do
        {
            //System.out.println(fooDoWhile);
            //Increment the counter
            //Iterated 99 times, fooDoWhile 0->99
            fooDoWhile++;
        }while(fooDoWhile < 100);
        System.out.println("fooDoWhile Value: " + fooDoWhile);

        // For Loop
        int fooFor;
        //for loop structure => for(<start_statement>; <conditional>; <step>)
        for(fooFor=0; fooFor<10; fooFor++){
            //System.out.println(fooFor);
            //Iterated 10 times, fooFor 0->9
        }
        System.out.println("fooFor Value: " + fooFor);

        // Switch Case
        //A switch works with the byte, short, char, and int primitive data types. 
        //It also works with enumerated types (discussed in Enum Types), the String class, and a few special classes that wrap certain primitive types: Character, Byte, Short, and Integer.
        int month = 3;
        String monthString;
        switch (month){
            case 1:  
                    monthString = "January";
                    break;
            case 2: 
                    monthString = "February";
                    break;
            case 3:  
                    monthString = "March";
                    break;
            default: //The default section handles all values that are not explicitly handled by one of the case sections. 
                    monthString = "Some other month";
                    break;
        }
        System.out.println("Switch Case Result: " + monthString);
        
        // Effective JDK 7.0, Strings can be used for case-matching in Switch statement.
        final String dayOfWeek = "Friday";
        switch (dayOfWeek) {
             case "Monday":
                 System.out.println("Aargh!! Start of the work week!");
                 break;
             case "Tuesday":
             case "Wednesday":
             case "Thursday":
                 System.out.println("Midweek");
                 break;
             case "Friday":
                 System.out.println("Awesome! End of work week");
                 break;
             case "Saturday":
             case "Sunday":
                 System.out.println("Weekend");
                 break;
             default:
                 System.out.println("There is no such weekday, at least on our planet.");
         }


        ///////////////////////////////////////
        // Converting Data Types And Typcasting
        ///////////////////////////////////////

        // Converting data

        // Convert String To Integer
        Integer.parseInt("123");//returns an integer version of "123"

        // Convert Integer To String
        Integer.toString(123);//returns a string version of 123

        // For other conversions check out the following classes:
        // Double
        // Long
        // String

        // Typecasting
        // You can also cast java objects, there's a lot of details and
        // deals 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
        ///////////////////////////////////////

        System.out.println("\n->Classes & Functions");

        // (definition of the Bicycle class follows)

        // Use new to instantiate a class
        Bicycle trek = new Bicycle();

        // Call object methods
        trek.speedUp(3); // Should always use setter and getter methods to access the attributes of a class
        trek.setCadence(100);

        // toString is a convention to display the attribute values of this Object.
        // Has to be overridden in the POJO (Plain Old Java Objects) to see the actual values else internal representation of the address will be displayed.  
        System.out.println("trek info: " + trek.toString());

    } // End main method
} // End LearnJava class


// You can include other, non-public classes in a .java file


// Class Declaration Syntax:
// <public/private/protected> class <class name>{
//    //data fields, constructors, functions all inside.
//    //functions are called as methods in Java.
// }

class Bicycle {

    // Bicycle's Fields/Variables
    public int cadence; // Public: Can be accessed from anywhere
    private int speed;  // Private: Only accessible from within the class
    protected int gear; // Protected: Accessible from the class and all the subclasses
    String name; // default: Only accessible from within this package

    // Constructors are a way of creating classes
    // This is a default constructor
    public Bicycle() {
        gear = 1;
        cadence = 50;
        speed = 5;
        name = "Bontrager";
    }

    // This is a specified constructor (it contains arguments)
    public Bicycle(int startCadence, int startSpeed, int startGear, String name) {
        this.gear = startGear;
        this.cadence = startCadence;
        this.speed = startSpeed;
        this.name = name;
    }

    // Function 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>)
    public int getCadence() {
        return cadence;
    }

    // void methods require no return statement
    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(int newName) {
        name = newName;
    }

    public String getName() {
        return name;
    }

    //Method to display the attribute values of this Object.
    @Override
    public String toString() {
        return "gear: " + gear +
                " cadence: " + cadence +
                " speed: " + speed +
                " name: " + name;
    }
} // end class Bicycle

// PennyFarthing is a subclass of Bicycle
class PennyFarthing extends Bicycle {
    // (Penny Farthings are those bicycles with the big front wheel.
    // They have no gears.)

    public PennyFarthing(int startCadence, int startSpeed){
        // Call the parent constructor with super
        super(startCadence, startSpeed, 0, "PennyFarthing");
    }

    // You should mark a method you're overriding with an @annotation
    // To learn more about what annotations are and their purpose
    // check this out: http://docs.oracle.com/javase/tutorial/java/annotations/
    @Override
    public void setGear(int gear) {
        gear = 0;
    }

}

Further Reading

The links provided here below are just to get an understanding of the topic, feel free to Google and find specific examples.

Other Topics To Research: