Code in constructor with “void” not execute [close

2020-06-06 07:46发布

问题:

It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center.
Closed 6 years ago.

If i use so

class Test {
    public Test() {
        System.out.println("constructor");
    }
}

public class MainClass {
    public static void main(String[] args) {
        Test t1 = new Test();
        Test t2 = new Test();
    }
}

I get 2 outputs constructor constructor

But if I add void to constructor (public void Test()) - output is empty. Why is so strange ?

回答1:

It's not strange, it's its normal behaviour. Constructor does not have a return type

public Test() {
    System.out.println("constructor");
}

is a constructor, but

public void Test() {
    System.out.println("constructor");
}

is a simple method that you can call using t1.Test().

This page lists the differences between constructors and methods:

1) First difference between method vs constructor in Java is that name of constructor must be same with name of the Class but there is no such requirement for method in Java. methods can have any arbitrary name in Java.

2) Second difference between method and constructor in Java is that constructor doesn't have any return type but method has return type and return something unless its void.

3) Third difference between constructor and method in Java is that Constructors are chained and they are called in a particular order, there is no such facility for methods.

4) Unlike method, constructor, yet declared in class doesn't considered as member of Class. Constructors are not inherited by child classes but methods are inherited by child classes until they are made private. on which case they are only visible in class on which they are declared. Similarly private constructor means you can not create object of that class from outside, this is one of the technique used to implement Singleton pattern in Java.

5) Another difference between method and constructor in Java is that special keyword this and super is used to call constructor explicitly. no such thing for method, they have there own name which can be used to call them.



回答2:

Because if you add void to the constructor that is no longer a constructor. It's just a method that happens to have the same name as the class.

Then, you could ask "but how can I call the constructor if one doesn't exists?" Well, every class has implicit, no-args constructor.

Conclusion: constructor must not have a return type.



回答3:

Constructors don't have a return type .Methods have return type. If you add void() then it turns to a method . To invoke the method you need to call it .

t1.test();


回答4:

Its java language specification.

Docs saying

A class contains constructors that are invoked to create objects from the class blueprint. Constructor declarations look like method declarations—except that they use the name of the class and have no return type.



回答5:

When you write:

public Test() 
    {
        System.out.println("constructor");
    }

This is definitely a constructor. And, as you create first object of Test class by writing:

    Test t1 = new Test();

This would call your constructor for the first time, and the code you have written in print statement, that is, constructor would be printed on console. Remember, constructors are automatically called when you create an object of the class.

Second time you create object by writing:

    Test t2 = new Test();

This would call the same constructor, and print the same "constructor" on screen, but it would be second time.

So you get the answer as- constructor constructor

In the second case, when you write:

public void test()
    {
        System.out.println("constructor");
    }

your compiler would treat it as a method rather than a constructor.

Even if void does not return anything, it is a "return-type" and constructors can never have a return type, never. This does not mean that they do not return you anything, but they just do not have a return type.

So, a method is not called automatically when the object of the class is created. So, you should not expect same result.

Now, you get an empty output because compiler provides a dummy/default constructor to every class, even if you do not define it. And, this default constructor would be called everytime you create a object of the class, no matter if you call it explicitly or not!

a default constructor can be thought of written somewhere as:

test() {   }

so now you can imagine what happens when you create two objects, program would compile and run correctly, returning empty output to you!

I hope that helped you.



回答6:

Because constructors don't have a return type. What you create when you add a void return type is a method named Test() that returns nothing.

The compiler gives you a no-arg constructor, since you didn't write any, and that does nothing because it's not the method you created.



回答7:

A java constructor has the same name as the name of the class to which it belongs. Constructor’s syntax does not include a return type, since constructors never return a value.

 public Test() {
    System.out.println("constructor");
}


回答8:

If you add return type to Constructor then it will not be a constructor no longer. It is something like a method.