How do I use try-with-resources statement?

The try-with-resources statement is introduced in the Java 7. With this new statement we can simplify resource management in our program, it also known as ARM (Automatic Resource Management).

This statement is a try statement that declares one or more resources. After the program finish with the resource it must be closed. The try-with-resources ensures that each resource is closed and the end of the statement.

Any object that implements java.lang.AutoCloseable, which includes all objects which implement, can be used as a resource.

package org.kodejava.example.basic;


public class TryWithResourceExample {
    public static void main(String[] args) {
        try {
            TryWithResourceExample demo = new TryWithResourceExample();
        } catch (IOException e) {

    private void printStream(String fileName) throws IOException {
        char[] buffer = new char[1024];

        try (InputStream is = new FileInputStream(fileName);
             Reader reader = new BufferedReader(
                     new InputStreamReader(is, "UTF-8"))) {

            while ( != -1) {

How do I use the instanceof keyword?

To check whether an object is of a particular type (class or interface type) you can use instanceof operator. The instanceof operator is used only for object reference variable. x instanceof y can be read as x is-a y.

The instanceof returns true if the reference variable being tested is of the type being compared to. It will still return true if the object being compared is assignment compatible with the type on the right.

For interface type, an object is said to be of a particular interface type (meaning it will pass the instanceof test) if any of the object’s superclasses implement the interface.

package org.kodejava.example.fundamental;

public class InstanceofDemo {
    public static void main(String[] args) {
        Body body = new Body();
        Hand hand = new Hand();
        Nail nail = new Nail();
        Shoes shoe = new Shoes();

        if (body instanceof Man) {
            System.out.println("body is a Man");

        if (hand instanceof Man) {
            System.out.println("hand is a Man too");

        if (hand instanceof Body) {
            System.out.println("hand is a Body");

        // it should be return false
        if (hand instanceof Nail) {
            System.out.println("hand is a Nail");
        } else {
            System.out.println("hand is not a Nail");

        if (nail instanceof Man) {
            System.out.println("nail is a Man too");

        if (nail instanceof Hand) {
            System.out.println("nail is a Hand");
        if (nail instanceof Body) {
            System.out.println("nail is a Body too");

        // it should return false, cause Shoes is not implements Man
        if (shoe instanceof Man) {
            System.out.println("shoe is a Man");
        } else {
            System.out.println("shoe is not a Man");

        // compile error. cannot test against class in different
        // class hierarchies.
        //if (shoe instanceof Body) {



interface Man {

class Body implements Man {

// indirect implements Man
class Hand extends Body {

// indirect implements Man
class Nail extends Hand {

class Shoes {

The result of the code snippet above:

body is a Man
hand is a Man too
hand is a Body
hand is not a Nail
nail is a Man too
nail is a Hand
nail is a Body too
shoe is not a Man