From f2a5bc8a91ab7da393a1c8548956d6e858bf2c11 Mon Sep 17 00:00:00 2001 From: Sean Nam Date: Tue, 3 Jan 2017 00:48:44 -0800 Subject: Updated Java (en-us) to include Input using Scanner and System.in --- java.html.markdown | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 12de0c73..9bb036cd 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -10,6 +10,7 @@ contributors: - ["Rachel Stiyer", "https://github.com/rstiyer"] - ["Michael Dähnert", "https://github.com/JaXt0r"] - ["Rob Rose", "https://github.com/RobRoseKnows"] + - ["Sean Nam", "https://github.com/seannam"] filename: LearnJava.java --- @@ -51,6 +52,14 @@ public class LearnJava { // point. public static void main (String[] args) { + /////////////////////////////////////// + // Input/Output + /////////////////////////////////////// + + /* + * Ouput + */ + // Use System.out.println() to print lines. System.out.println("Hello World!"); System.out.println( @@ -65,6 +74,32 @@ public class LearnJava { // Use System.out.printf() for easy formatted printing. System.out.printf("pi = %.5f", Math.PI); // => pi = 3.14159 + /* + * Input + */ + + // use Scanner to read input + // must import java.util.Scanner; + Scanner scanner = new Scanner(System.in); + + // read string input + String name = scanner.next(); + + // read byte input + byte numByte = scanner.nextByte(); + + // read int input + int numInt = scanner.nextInt(); + + // read long input + float numFloat - scanner.nextFloat(); + + // read double input + double numDouble = scanner.nextDouble(); + + // read boolean input + boolean bool = scanner.nextBoolean(); + /////////////////////////////////////// // Variables /////////////////////////////////////// -- cgit v1.2.3 From 3bfb74042f1bb682e729fc79d017cdbb3c8024ba Mon Sep 17 00:00:00 2001 From: Sean Nam Date: Wed, 8 Feb 2017 23:36:49 -0800 Subject: Changed indentation to 4 spaces --- java.html.markdown | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 9bb036cd..c92c09dc 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -52,13 +52,13 @@ public class LearnJava { // point. public static void main (String[] args) { - /////////////////////////////////////// - // Input/Output - /////////////////////////////////////// + /////////////////////////////////////// + // Input/Output + /////////////////////////////////////// - /* - * Ouput - */ + /* + * Ouput + */ // Use System.out.println() to print lines. System.out.println("Hello World!"); -- cgit v1.2.3 From 52ff8f41e4ef9de074081b5ef22c5dfa4dd86f0a Mon Sep 17 00:00:00 2001 From: Sean Nam Date: Wed, 8 Feb 2017 23:39:49 -0800 Subject: Changed more indentation to 4 spaces --- java.html.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index c92c09dc..7f224e17 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -75,8 +75,8 @@ public class LearnJava { System.out.printf("pi = %.5f", Math.PI); // => pi = 3.14159 /* - * Input - */ + * Input + */ // use Scanner to read input // must import java.util.Scanner; -- cgit v1.2.3 From e800bf6f3dca32ded6d70c9fb468f5cbc373ee0b Mon Sep 17 00:00:00 2001 From: Andrew Gallasch Date: Fri, 10 Feb 2017 01:53:20 +1030 Subject: Remove duplicate int declarations (#2521) Duplicate declarations break the build --- java.html.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 12de0c73..772dc25d 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -83,11 +83,11 @@ public class LearnJava { */ // Initialize a variable using = - int fooInt = 1; + int barInt = 1; // Initialize multiple variables of same type with same // value , , = - int fooInt1, fooInt2, fooInt3; - fooInt1 = fooInt2 = fooInt3 = 1; + int barInt1, barInt2, barInt3; + barInt1 = barInt2 = barInt3 = 1; /* * Variable types -- cgit v1.2.3 From 2c2c6e7b15b2dc248ff5c397e235f5c94823c567 Mon Sep 17 00:00:00 2001 From: Sean Nam Date: Sun, 12 Mar 2017 15:26:04 -0700 Subject: Fixed indentation in the java file --- java.html.markdown | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index f28e953a..a7060317 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -56,9 +56,9 @@ public class LearnJava { // Input/Output /////////////////////////////////////// - /* - * Ouput - */ + /* + * Ouput + */ // Use System.out.println() to print lines. System.out.println("Hello World!"); @@ -75,8 +75,8 @@ public class LearnJava { System.out.printf("pi = %.5f", Math.PI); // => pi = 3.14159 /* - * Input - */ + * Input + */ // use Scanner to read input // must import java.util.Scanner; -- cgit v1.2.3 From e48049b7922b80829fd13636a5f7e49b60ce76e2 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 23 Mar 2017 11:58:16 -0700 Subject: Replace tabs with 4 spaces in java --- java.html.markdown | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index a7060317..3ec938ef 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -30,13 +30,13 @@ Multi-line comments look like this. * attributes of a Class. * Main attributes: * - * @author Name (and contact information such as email) of author(s). - * @version Current version of the program. - * @since When this part of the program was first added. - * @param For describing the different parameters for a method. - * @return For describing what the method returns. + * @author Name (and contact information such as email) of author(s). + * @version Current version of the program. + * @since When this part of the program was first added. + * @param For describing the different parameters for a method. + * @return For describing what the method returns. * @deprecated For showing the code is outdated or shouldn't be used. - * @see Links to another part of documentation. + * @see Links to another part of documentation. */ // Import ArrayList class inside of the java.util package @@ -56,9 +56,9 @@ public class LearnJava { // Input/Output /////////////////////////////////////// - /* - * Ouput - */ + /* + * Ouput + */ // Use System.out.println() to print lines. System.out.println("Hello World!"); @@ -78,27 +78,27 @@ public class LearnJava { * Input */ - // use Scanner to read input - // must import java.util.Scanner; - Scanner scanner = new Scanner(System.in); + // use Scanner to read input + // must import java.util.Scanner; + Scanner scanner = new Scanner(System.in); - // read string input - String name = scanner.next(); + // read string input + String name = scanner.next(); - // read byte input - byte numByte = scanner.nextByte(); + // read byte input + byte numByte = scanner.nextByte(); - // read int input - int numInt = scanner.nextInt(); + // read int input + int numInt = scanner.nextInt(); - // read long input - float numFloat - scanner.nextFloat(); + // read long input + float numFloat - scanner.nextFloat(); - // read double input - double numDouble = scanner.nextDouble(); + // read double input + double numDouble = scanner.nextDouble(); - // read boolean input - boolean bool = scanner.nextBoolean(); + // read boolean input + boolean bool = scanner.nextBoolean(); /////////////////////////////////////// // Variables @@ -752,7 +752,7 @@ class Dog extends Animal public void makeSound() { System.out.println("Bark"); - // age = 30; ==> ERROR! age is private to Animal + // age = 30; ==> ERROR! age is private to Animal } // NOTE: You will get an error if you used the -- cgit v1.2.3 From 064cbde932f135b37ddb615733a0d0e1940e78a9 Mon Sep 17 00:00:00 2001 From: Felipe Cury Date: Thu, 18 May 2017 07:40:42 -0300 Subject: [java/en-us] Fix typo (#2708) --- java.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 3ec938ef..4a3e6312 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -451,7 +451,7 @@ public class LearnJava { // Try-with-resources (Java 7+) // Try-catch-finally statements work as expected in Java but in Java 7+ // the try-with-resources statement is also available. Try-with-resources - // simplifies try-catch-finally statements be closing resources + // simplifies try-catch-finally statements by closing resources // automatically. // In order to use a try-with-resources, include a an instance of a class -- cgit v1.2.3 From bb1d9c2a9e098d11ccc1f6dadcf46400997d1cbb Mon Sep 17 00:00:00 2001 From: Yerkebulan Tulibergenov Date: Wed, 31 May 2017 00:58:51 -0700 Subject: [Java/en]Fix small typo in Java English tutorial (#2743) --- java.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 4a3e6312..356ca5f1 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -92,7 +92,7 @@ public class LearnJava { int numInt = scanner.nextInt(); // read long input - float numFloat - scanner.nextFloat(); + float numFloat = scanner.nextFloat(); // read double input double numDouble = scanner.nextDouble(); -- cgit v1.2.3 From 846abc4d9a6764c63fccd245b917b92f71cf00ce Mon Sep 17 00:00:00 2001 From: Kidhanis De Jesus Date: Thu, 8 Jun 2017 13:29:56 -0400 Subject: [en/java] Modify the Animal abstract class (#2751) * Fix word order in class documentation * Change access level modifier of age variable The comment inside eat() mentions that the variable is private. Furthermore, there would be no error if the variable were used inside Dog given the current access level. --- java.html.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 356ca5f1..174177c1 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -712,8 +712,8 @@ public class ExampleClass extends ExampleClassParent implements InterfaceOne, // 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, +// mixture of 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. public abstract class Animal { @@ -730,7 +730,7 @@ public abstract class Animal // No need to initialize, however in an interface // a variable is implicitly final and hence has // to be initialized. - protected int age; + private int age; public void printAge() { -- cgit v1.2.3 From fc58f4d120a3bd529605ac7a637eae1422c27812 Mon Sep 17 00:00:00 2001 From: Mathieu Gemard Date: Sun, 18 Jun 2017 14:26:36 +0200 Subject: [java/en] typo (#2763) --- java.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 174177c1..e8c15234 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -454,7 +454,7 @@ public class LearnJava { // simplifies try-catch-finally statements by closing resources // automatically. - // In order to use a try-with-resources, include a an instance of a class + // In order to use a try-with-resources, include an instance of a class // in the try statement. The class must implement java.lang.AutoCloseable. try(BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) { // You can attempt to do something that could throw an exception. -- cgit v1.2.3 From 4a359c303fa261c21aa51b4a29927da751139511 Mon Sep 17 00:00:00 2001 From: Mathieu Gemard Date: Sun, 9 Jul 2017 18:39:21 +0200 Subject: [java/en] few changes (#2788) --- java.html.markdown | 121 ++++++++++++++++++++++++----------------------------- 1 file changed, 55 insertions(+), 66 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index e8c15234..9c60eabc 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -48,9 +48,9 @@ import java.security.*; // as the file. public class LearnJava { - // In order to run a java program, it must have a main method as an entry + // In order to run a java program, it must have a main method as an entry // point. - public static void main (String[] args) { + public static void main(String[] args) { /////////////////////////////////////// // Input/Output @@ -109,7 +109,7 @@ public class LearnJava { */ // Declare a variable using int fooInt; - // Declare multiple variables of the same + // Declare multiple variables of the same // type , , int fooInt1, fooInt2, fooInt3; @@ -119,8 +119,9 @@ public class LearnJava { // Initialize a variable using = int barInt = 1; - // Initialize multiple variables of same type with same - // value , , = + // Initialize multiple variables of same type with same + // value , , + // = = = int barInt1, barInt2, barInt3; barInt1 = barInt2 = barInt3 = 1; @@ -130,7 +131,7 @@ public class LearnJava { // Byte - 8-bit signed two's complement integer // (-128 <= byte <= 127) byte fooByte = 100; - + // If you would like to interpret a byte as an unsigned integer // then this simple operation can help int unsignedIntLessThan256 = 0xff & fooByte; @@ -184,12 +185,12 @@ public class LearnJava { // 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 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 + // 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 @@ -199,7 +200,7 @@ public class LearnJava { // 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. @@ -231,13 +232,13 @@ public class LearnJava { builderConcatenated.append("You "); builderConcatenated.append("can use "); builderConcatenated.append("the StringBuilder class."); - System.out.println(builderConcatenated.toString()); // only now is the string built + System.out.println(builderConcatenated.toString()); // only now is the string built // Output: You can use the StringBuilder class. - + // StringBuilder is efficient when the fully constructed String is not required until the end of some processing. StringBuilder stringBuilder = new StringBuilder(); String inefficientString = ""; - for(int i = 0 ; i < 10; i++){ + for (int i = 0 ; i < 10; i++) { stringBuilder.append(i).append(" "); inefficientString += i + " "; } @@ -246,12 +247,12 @@ public class LearnJava { // inefficientString requires a lot more work to produce, as it generates a String on every loop iteration. // Simple concatenation with + is compiled to a StringBuilder and toString() // Avoid string concatenation in loops. - + // #3 - with String formatter // Another alternative way to create strings. Fast and readable. String.format("%s may prefer %s.", "Or you", "String.format()"); // Output: Or you may prefer String.format(). - + // Arrays // The array size must be decided upon instantiation // The following formats work for declaring an array @@ -387,7 +388,7 @@ 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++) { @@ -398,7 +399,7 @@ public class LearnJava { } } } - + // For Each Loop // The for loop is also able to iterate over arrays as well as objects // that implement the Iterable interface. @@ -416,6 +417,7 @@ public class LearnJava { // It also works with enumerated types (discussed in Enum Types), the // String class, and a few special classes that wrap primitive types: // Character, Byte, Short, and Integer. + // Starting in Java 7 and above, we can also use the String type. int month = 3; String monthString; switch (month) { @@ -429,38 +431,21 @@ 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; - } - - + + // Try-with-resources (Java 7+) // Try-catch-finally statements work as expected in Java but in Java 7+ // the try-with-resources statement is also available. Try-with-resources // simplifies try-catch-finally statements by closing resources // automatically. - + // In order to use a try-with-resources, include an instance of a class // in the try statement. The class must implement java.lang.AutoCloseable. - try(BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) { + try (BufferedReader br = new BufferedReader(new FileReader("foo.txt"))) { // You can attempt to do something that could throw an exception. System.out.println(br.readLine()); // In Java 7, the resource will always be closed, even if it throws - // an Exception. + // an Exception. } catch (Exception ex) { //The resource will be closed before the catch statement executes. System.out.println("readLine() failed."); @@ -470,8 +455,8 @@ public class LearnJava { // a finally statement might not be called. // To learn more: // https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html - - + + // Conditional Shorthand // You can use the '?' operator for quick assignments or logic forks. // Reads as "If (statement) is true, use , otherwise, use @@ -481,7 +466,7 @@ public class LearnJava { System.out.println(bar); // Prints A, because the statement is true //////////////////////////////////////// - // Converting Data Types And Typecasting + // Converting Data Types //////////////////////////////////////// // Converting data @@ -497,11 +482,6 @@ public class LearnJava { // 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: - // https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html - /////////////////////////////////////// // Classes And Functions /////////////////////////////////////// @@ -566,10 +546,10 @@ class Bicycle { String name; // default: Only accessible from within this package static String className; // Static class variable - // Static block + // Static block // Java has no implementation of static constructors, but - // has a static block that can be used to initialize class variables - // (static variables). + // 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"; @@ -652,6 +632,14 @@ class PennyFarthing extends Bicycle { } } +// Object casting +// Since the PennyFarthing class is extending the Bicycle class, we can say +// a PennyFarthing is a Bicycle and write : +// Bicycle bicycle = new PennyFarthing(); +// This is called object casting where an object is taken for another one. There +// are lots of details and deals with some more intermediate concepts here: +// https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html + // Interfaces // Interface declaration syntax // interface extends { @@ -667,10 +655,10 @@ public interface Edible { public interface Digestible { public void digest(); - // In Java 8, interfaces can have default method. - // public void digest() { - // System.out.println("digesting ..."); - // } + // Since Java 8, interfaces can have default method. + public void defaultMethod() { + System.out.println("Hi from default method ..."); + } } // We can now create a class that implements both of these interfaces. @@ -703,14 +691,15 @@ public class ExampleClass extends ExampleClassParent implements InterfaceOne, // Abstract Classes // Abstract Class declaration syntax -// abstract extends { +// abstract class extends +// { // // 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 +// Marking a class as abstract means that it contains at least one abstract +// method 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 // mixture of concrete and abstract methods. Methods in an interface cannot // have a body, unless the method is static, and variables are final by default, @@ -734,7 +723,7 @@ public abstract class Animal public void printAge() { - System.out.println(age); + System.out.println(age); } // Abstract classes can have main function. @@ -816,18 +805,18 @@ public abstract class Mammal() // you would specify a days-of-the-week enum type as: public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, - THURSDAY, FRIDAY, SATURDAY + 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: @@ -835,17 +824,17 @@ public class EnumTest { break; case FRIDAY: System.out.println("Fridays are better."); - break; - case SATURDAY: + break; + case SATURDAY: case SUNDAY: System.out.println("Weekends are best."); - break; + 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. @@ -854,7 +843,7 @@ public class EnumTest { } } -// Enum types are much more powerful than we show above. +// Enum types are much more powerful than we show above. // The enum body can include methods and other fields. // You can see more at https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html -- cgit v1.2.3 From e9bb96aaa1d404509bb935ba1b95d34b5e74fd6c Mon Sep 17 00:00:00 2001 From: Mathieu Gemard Date: Tue, 11 Jul 2017 11:08:23 +0200 Subject: [java/en] adding an exemple to ternary operator ?: (#2794) We could think we always had to use = with ?: --- java.html.markdown | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 9c60eabc..a27a68ca 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -463,7 +463,11 @@ public class LearnJava { // " int foo = 5; String bar = (foo < 10) ? "A" : "B"; - System.out.println(bar); // Prints A, because the statement is true + System.out.println("bar : " + bar); // Prints "bar : A", because the + // statement is true. + // Or simply + System.out.println("bar : " + (foo < 10 ? "A" : "B")); + //////////////////////////////////////// // Converting Data Types -- cgit v1.2.3 From 985d23a52b76593a120adff5381c2df3a80fe298 Mon Sep 17 00:00:00 2001 From: HairyFotr Date: Wed, 23 Aug 2017 10:14:39 +0200 Subject: Fix a bunch of typos --- java.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index a27a68ca..fa1ff3d1 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -57,7 +57,7 @@ public class LearnJava { /////////////////////////////////////// /* - * Ouput + * Output */ // Use System.out.println() to print lines. -- cgit v1.2.3 From 7559305fb74cc9750a1d45ea24803257d27a8c88 Mon Sep 17 00:00:00 2001 From: Sridhar Easwaran Date: Thu, 5 Oct 2017 14:40:34 +0530 Subject: added use of break keyword & new tutorial link --- java.html.markdown | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index fa1ff3d1..d1ce2233 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -418,6 +418,8 @@ public class LearnJava { // String class, and a few special classes that wrap primitive types: // Character, Byte, Short, and Integer. // Starting in Java 7 and above, we can also use the String type. + // Note: Do remember that, not adding "break" at end any particular case ends up in + // executing the very next case(given it satisfies the condition provided) as well. int month = 3; String monthString; switch (month) { @@ -886,6 +888,8 @@ The links provided here below are just to get an understanding of the topic, fee * [Codingbat.com](http://codingbat.com/java) +* [Codewars - Java Katas](https://www.codewars.com/?language=java) + **Books**: * [Head First Java](http://www.headfirstlabs.com/books/hfjava/) -- cgit v1.2.3 From 8bccfb8be287e8f85129a45abb046a3f27b1e0dd Mon Sep 17 00:00:00 2001 From: Toby Sullivan Date: Thu, 5 Oct 2017 12:19:40 -0700 Subject: Add default keyword --- java.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index fa1ff3d1..a8c2523c 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -660,7 +660,7 @@ public interface Edible { public interface Digestible { public void digest(); // Since Java 8, interfaces can have default method. - public void defaultMethod() { + public default void defaultMethod() { System.out.println("Hi from default method ..."); } } -- cgit v1.2.3 From 56a82546e9196a94a0085eae0abd0578702a578f Mon Sep 17 00:00:00 2001 From: Andrew Gallasch Date: Sat, 28 Oct 2017 15:36:34 +1030 Subject: Improve comment about final modifier --- java.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 7b59b085..73e4bd2e 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -173,7 +173,7 @@ 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, final int HOURS_I_WORK_PER_WEEK = 9001; // but they can be initialized later. final double E; -- cgit v1.2.3 From 32090679c2a6a79933fa94f36a7dcddd22a20897 Mon Sep 17 00:00:00 2001 From: Andrew Gallasch Date: Sat, 28 Oct 2017 16:09:07 +1030 Subject: Improve comments on abstract classes --- java.html.markdown | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 73e4bd2e..621d500c 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -703,15 +703,21 @@ public class ExampleClass extends ExampleClassParent implements InterfaceOne, // // Method declarations // } -// Marking a class as abstract means that it contains at least one abstract -// method 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 -// mixture of 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. +// Abstract Classes cannot be instantiated. +// Abstract classes may define abstract methods. +// Abstract methods have no body and are marked abstract +// Non-abstract child classes must @Override all abstract methods +// from their super-classes. +// Abstract classes can be useful when combining repetitive logic +// with customised behavior, but as Abstract classes require +// inheritance, they violate "Composition over inheritance" +// so consider other approaches using composition. +// https://en.wikipedia.org/wiki/Composition_over_inheritance + public abstract class Animal { + private int age; + public abstract void makeSound(); // Method can have a body @@ -722,17 +728,12 @@ public abstract class Animal age = 30; } - // No need to initialize, however in an interface - // a variable is implicitly final and hence has - // to be initialized. - private int age; - public void printAge() { System.out.println(age); } - // Abstract classes can have main function. + // Abstract classes can have main method. public static void main(String[] args) { System.out.println("I am abstract"); -- cgit v1.2.3 From d1ed7e02da50f3e03e517175b1ff866332c049f2 Mon Sep 17 00:00:00 2001 From: Andrew Gallasch Date: Mon, 30 Oct 2017 23:55:40 +1030 Subject: Improve TreeMap documentation --- java.html.markdown | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 621d500c..36d56625 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -280,7 +280,7 @@ 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 map keys to values. Map is + // Maps - A mapping of key Objects to value Objects. 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 @@ -289,10 +289,16 @@ public class LearnJava { // 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 - // constant even for large sets. - // TreeMap - This class is a sorted tree structure. It implements a red - // black tree and sorts the entries based on the key value or - // the comparator provided while creating the object + // constant-amortized even for large sets. + // TreeMap - A Map that is sorted by its keys. Each modification + // maintains the sorting defined by either a Comparator + // supplied at instantiation, or comparisons of each Object + // if they implement the Comparable interface. + // Failure of keys to implement Comparable combined with failure to + // supply a Comparator will throw ClassCastExceptions. + // Insertion and removal operations take O(log(n)) time + // so avoid using this data structure unless you are taking + // advantage of the sorting. /////////////////////////////////////// // Operators -- cgit v1.2.3 From 833c7bea6ced906d32e4029e704d1a2a831c9b05 Mon Sep 17 00:00:00 2001 From: Andrew Gallasch Date: Mon, 30 Oct 2017 23:58:22 +1030 Subject: Improve arithmetic output --- java.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 36d56625..dd875c16 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -312,7 +312,7 @@ public class LearnJava { System.out.println("2-1 = " + (i2 - i1)); // => 1 System.out.println("2*1 = " + (i2 * i1)); // => 2 System.out.println("1/2 = " + (i1 / i2)); // => 0 (int/int returns int) - System.out.println("1/2 = " + (i1 / (double)i2)); // => 0.5 + System.out.println("1/2.0 = " + (i1 / (double)i2)); // => 0.5 // Modulo System.out.println("11%3 = "+(11 % 3)); // => 2 -- cgit v1.2.3 From 2abfabae15fc8ee0ce2bdd7b61d65ff1c0375cc1 Mon Sep 17 00:00:00 2001 From: stanislaslegendre Date: Wed, 28 Feb 2018 08:53:14 +0100 Subject: removing false statement about classes (#3039) --- java.html.markdown | 2 -- 1 file changed, 2 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index dd875c16..ab2be4a2 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -44,8 +44,6 @@ 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. public class LearnJava { // In order to run a java program, it must have a main method as an entry -- cgit v1.2.3 From a80844cac53e372b0f8b423dca90151d5adb0417 Mon Sep 17 00:00:00 2001 From: "Shawn M. Hanes" Date: Wed, 11 Apr 2018 17:55:04 -0400 Subject: [Java/en] Added Lambdas section. --- java.html.markdown | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index ab2be4a2..18a3b21a 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -11,6 +11,7 @@ contributors: - ["Michael Dähnert", "https://github.com/JaXt0r"] - ["Rob Rose", "https://github.com/RobRoseKnows"] - ["Sean Nam", "https://github.com/seannam"] + - ["Shawn M. Hanes", "https://github.com/smhanes15"] filename: LearnJava.java --- @@ -858,6 +859,108 @@ public class EnumTest { // The enum body can include methods and other fields. // You can see more at https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html +// Getting Started with Lambda Expressions +// +// New to Java version 8 are lambda expressions. Lambdas are more commonly found +// in functional programming languages, which means they are methods which can +// be created without belonging to a class, passed around as if it were itself +// an object, and executed on demand. +// +// Final note, lambdas must implement a functional interface. A functional +// interface is one which has only a single abstract method declared. It can +// have any number of default methods. Lambda expressions can be used as an +// instance of that functional interface. Any interface meeting the requirements +// is treated as a functional interface. You can read more about interfaces +// above. +// +import java.util.Map; +import java.util.HashMap; +import java.util.function.*; +import java.security.SecureRandom; + +public class Lambdas { + public static void main(String[] args) { + // Lambda declaration syntax: + // -> + + // We will use this hashmap in our examples below. + Map planets = new HashMap<>(); + planets.put("Mercury", "87.969"); + planets.put("Venus", "224.7"); + planets.put("Earth", "365.2564"); + planets.put("Mars", "687"); + planets.put("Jupiter", "4,332.59"); + planets.put("Saturn", "10,759"); + planets.put("Uranus", "30,688.5"); + planets.put("Neptune", "60,182"); + + // Lambda with zero parameters using the Supplier functional interface + // from java.util.function.Supplier. The actual lambda expression is + // what comes after numPlanets =. + Supplier numPlanets = () -> Integer.toString(planets.size()); + System.out.format("Number of Planets: %s\n\n", numPlanets.get()); + + // Lambda with one parameter and using the Consumer functional interface + // from java.util.function.Consumer. This is because planets is a Map, + // which implements both Collection and Iterable. The forEach used here, + // found in Iterable, applies the lambda expression to each member of + // the Collection. The default implementation of forEach behaves as if: + /* + for (T t : this) + action.accept(t); + */ + + // The actual lambda expression is the parameter passed to forEach. + planets.keySet().forEach((p) -> System.out.format("%s\n", p)); + + // If you are only passing a single argument, then the above can also be + // written as (note absent parentheses around p): + planets.keySet().forEach(p -> System.out.format("%s\n", p)); + + // Tracing the above, we see that planets is a HashMap, keySet() returns + // a Set of its keys, forEach applies each element as the lambda + // expression of: (parameter p) -> System.out.format("%s\n", p). Each + // time, the element is said to be "consumed" and the statement(s) + // referred to in the lambda body is applied. Remember the lambda body + // is what comes after the ->. + + // The above without use of lambdas would look more traditionally like: + for (String planet : planets.keySet()) { + System.out.format("%s\n", planet); + } + + // This example differs from the above in that a different forEach + // implementation is used: the forEach found in the HashMap class + // implementing the Map interface. This forEach accepts a BiConsumer, + // which generically speaking is a fancy way of saying it handles + // the Set of each Key -> Value pairs. This default implementation + // behaves as if: + /* + for (Map.Entry entry : map.entrySet()) + action.accept(entry.getKey(), entry.getValue()); + */ + + // The actual lambda expression is the parameter passed to forEach. + String orbits = "%s orbits the Sun in %s Earth days.\n"; + planets.forEach((K, V) -> System.out.format(orbits, K, V)); + + // The above without use of lambdas would look more traditionally like: + for (String planet : planets.keySet()) { + System.out.format(orbits, planet, planets.get(planet)); + } + + // Or, if following more closely the specification provided by the + // default implementation: + for (Map.Entry planet : planets.entrySet()) { + System.out.format(orbits, planet.getKey(), planet.getValue()); + } + + // These examples cover only the very basic use of lambdas. It might not + // seem like much or even very useful, but remember that a lambda can be + // created as an object that can later be passed as parameters to other + // methods. + } +} ``` ## Further Reading -- cgit v1.2.3 From cc0329efbb5fb9330e6c79a40f8dd2967bda5931 Mon Sep 17 00:00:00 2001 From: "Shawn M. Hanes" Date: Wed, 11 Apr 2018 18:12:59 -0400 Subject: [Java/en] Added Lambdas section. --- java.html.markdown | 164 ++++++++++++++++++++++++++--------------------------- 1 file changed, 82 insertions(+), 82 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index 18a3b21a..ca0b04c2 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -11,7 +11,7 @@ contributors: - ["Michael Dähnert", "https://github.com/JaXt0r"] - ["Rob Rose", "https://github.com/RobRoseKnows"] - ["Sean Nam", "https://github.com/seannam"] - - ["Shawn M. Hanes", "https://github.com/smhanes15"] + - ["Shawn M. Hanes", "https://github.com/smhanes15"] filename: LearnJava.java --- @@ -879,87 +879,87 @@ import java.util.function.*; import java.security.SecureRandom; public class Lambdas { - public static void main(String[] args) { - // Lambda declaration syntax: - // -> - - // We will use this hashmap in our examples below. - Map planets = new HashMap<>(); - planets.put("Mercury", "87.969"); - planets.put("Venus", "224.7"); - planets.put("Earth", "365.2564"); - planets.put("Mars", "687"); - planets.put("Jupiter", "4,332.59"); - planets.put("Saturn", "10,759"); - planets.put("Uranus", "30,688.5"); - planets.put("Neptune", "60,182"); - - // Lambda with zero parameters using the Supplier functional interface - // from java.util.function.Supplier. The actual lambda expression is - // what comes after numPlanets =. - Supplier numPlanets = () -> Integer.toString(planets.size()); - System.out.format("Number of Planets: %s\n\n", numPlanets.get()); - - // Lambda with one parameter and using the Consumer functional interface - // from java.util.function.Consumer. This is because planets is a Map, - // which implements both Collection and Iterable. The forEach used here, - // found in Iterable, applies the lambda expression to each member of - // the Collection. The default implementation of forEach behaves as if: - /* - for (T t : this) - action.accept(t); - */ - - // The actual lambda expression is the parameter passed to forEach. - planets.keySet().forEach((p) -> System.out.format("%s\n", p)); - - // If you are only passing a single argument, then the above can also be - // written as (note absent parentheses around p): - planets.keySet().forEach(p -> System.out.format("%s\n", p)); - - // Tracing the above, we see that planets is a HashMap, keySet() returns - // a Set of its keys, forEach applies each element as the lambda - // expression of: (parameter p) -> System.out.format("%s\n", p). Each - // time, the element is said to be "consumed" and the statement(s) - // referred to in the lambda body is applied. Remember the lambda body - // is what comes after the ->. - - // The above without use of lambdas would look more traditionally like: - for (String planet : planets.keySet()) { - System.out.format("%s\n", planet); - } - - // This example differs from the above in that a different forEach - // implementation is used: the forEach found in the HashMap class - // implementing the Map interface. This forEach accepts a BiConsumer, - // which generically speaking is a fancy way of saying it handles - // the Set of each Key -> Value pairs. This default implementation - // behaves as if: - /* - for (Map.Entry entry : map.entrySet()) - action.accept(entry.getKey(), entry.getValue()); - */ - - // The actual lambda expression is the parameter passed to forEach. - String orbits = "%s orbits the Sun in %s Earth days.\n"; - planets.forEach((K, V) -> System.out.format(orbits, K, V)); - - // The above without use of lambdas would look more traditionally like: - for (String planet : planets.keySet()) { - System.out.format(orbits, planet, planets.get(planet)); - } - - // Or, if following more closely the specification provided by the - // default implementation: - for (Map.Entry planet : planets.entrySet()) { - System.out.format(orbits, planet.getKey(), planet.getValue()); - } - - // These examples cover only the very basic use of lambdas. It might not - // seem like much or even very useful, but remember that a lambda can be - // created as an object that can later be passed as parameters to other - // methods. - } + public static void main(String[] args) { + // Lambda declaration syntax: + // -> + + // We will use this hashmap in our examples below. + Map planets = new HashMap<>(); + planets.put("Mercury", "87.969"); + planets.put("Venus", "224.7"); + planets.put("Earth", "365.2564"); + planets.put("Mars", "687"); + planets.put("Jupiter", "4,332.59"); + planets.put("Saturn", "10,759"); + planets.put("Uranus", "30,688.5"); + planets.put("Neptune", "60,182"); + + // Lambda with zero parameters using the Supplier functional interface + // from java.util.function.Supplier. The actual lambda expression is + // what comes after numPlanets =. + Supplier numPlanets = () -> Integer.toString(planets.size()); + System.out.format("Number of Planets: %s\n\n", numPlanets.get()); + + // Lambda with one parameter and using the Consumer functional interface + // from java.util.function.Consumer. This is because planets is a Map, + // which implements both Collection and Iterable. The forEach used here, + // found in Iterable, applies the lambda expression to each member of + // the Collection. The default implementation of forEach behaves as if: + /* + for (T t : this) + action.accept(t); + */ + + // The actual lambda expression is the parameter passed to forEach. + planets.keySet().forEach((p) -> System.out.format("%s\n", p)); + + // If you are only passing a single argument, then the above can also be + // written as (note absent parentheses around p): + planets.keySet().forEach(p -> System.out.format("%s\n", p)); + + // Tracing the above, we see that planets is a HashMap, keySet() returns + // a Set of its keys, forEach applies each element as the lambda + // expression of: (parameter p) -> System.out.format("%s\n", p). Each + // time, the element is said to be "consumed" and the statement(s) + // referred to in the lambda body is applied. Remember the lambda body + // is what comes after the ->. + + // The above without use of lambdas would look more traditionally like: + for (String planet : planets.keySet()) { + System.out.format("%s\n", planet); + } + + // This example differs from the above in that a different forEach + // implementation is used: the forEach found in the HashMap class + // implementing the Map interface. This forEach accepts a BiConsumer, + // which generically speaking is a fancy way of saying it handles + // the Set of each Key -> Value pairs. This default implementation + // behaves as if: + /* + for (Map.Entry entry : map.entrySet()) + action.accept(entry.getKey(), entry.getValue()); + */ + + // The actual lambda expression is the parameter passed to forEach. + String orbits = "%s orbits the Sun in %s Earth days.\n"; + planets.forEach((K, V) -> System.out.format(orbits, K, V)); + + // The above without use of lambdas would look more traditionally like: + for (String planet : planets.keySet()) { + System.out.format(orbits, planet, planets.get(planet)); + } + + // Or, if following more closely the specification provided by the + // default implementation: + for (Map.Entry planet : planets.entrySet()) { + System.out.format(orbits, planet.getKey(), planet.getValue()); + } + + // These examples cover only the very basic use of lambdas. It might not + // seem like much or even very useful, but remember that a lambda can be + // created as an object that can later be passed as parameters to other + // methods. + } } ``` -- cgit v1.2.3 From 8a8dd005bf68b5565bba0f5e4da573bcb9c92951 Mon Sep 17 00:00:00 2001 From: Apoorv Choubey Date: Sat, 12 Oct 2019 20:47:18 +0530 Subject: add Java resource --- java.html.markdown | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index ca0b04c2..4f45a268 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -289,7 +289,7 @@ public class LearnJava { // interface. This allows the execution time of basic // operations, such as get and insert element, to remain // constant-amortized even for large sets. - // TreeMap - A Map that is sorted by its keys. Each modification + // TreeMap - A Map that is sorted by its keys. Each modification // maintains the sorting defined by either a Comparator // supplied at instantiation, or comparisons of each Object // if they implement the Comparable interface. @@ -470,11 +470,11 @@ public class LearnJava { // " int foo = 5; String bar = (foo < 10) ? "A" : "B"; - System.out.println("bar : " + bar); // Prints "bar : A", because the + System.out.println("bar : " + bar); // Prints "bar : A", because the // statement is true. // Or simply System.out.println("bar : " + (foo < 10 ? "A" : "B")); - + //////////////////////////////////////// // Converting Data Types @@ -918,7 +918,7 @@ public class Lambdas { planets.keySet().forEach(p -> System.out.format("%s\n", p)); // Tracing the above, we see that planets is a HashMap, keySet() returns - // a Set of its keys, forEach applies each element as the lambda + // a Set of its keys, forEach applies each element as the lambda // expression of: (parameter p) -> System.out.format("%s\n", p). Each // time, the element is said to be "consumed" and the statement(s) // referred to in the lambda body is applied. Remember the lambda body @@ -998,6 +998,8 @@ The links provided here below are just to get an understanding of the topic, fee * [Codewars - Java Katas](https://www.codewars.com/?language=java) +* [University of Helsinki - Object-Oriented programming with Java](http://moocfi.github.io/courses/2013/programming-part-1/) + **Books**: * [Head First Java](http://www.headfirstlabs.com/books/hfjava/) -- cgit v1.2.3 From 05872fc6316d7c6d8cc821a7bb4a74b306d9ce5f Mon Sep 17 00:00:00 2001 From: Vy Hong Date: Tue, 22 Oct 2019 08:35:34 -0700 Subject: Update comment in Java doWhile loop --- java.html.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java.html.markdown') diff --git a/java.html.markdown b/java.html.markdown index ca0b04c2..aa8923ab 100644 --- a/java.html.markdown +++ b/java.html.markdown @@ -381,7 +381,7 @@ public class LearnJava { do { System.out.println(fooDoWhile); // Increment the counter - // Iterated 99 times, fooDoWhile 0->99 + // Iterated 100 times, fooDoWhile 0->99 fooDoWhile++; } while(fooDoWhile < 100); System.out.println("fooDoWhile Value: " + fooDoWhile); -- cgit v1.2.3