构造器的返回值?构造器有什么作用?

1、构造器为什么不能用void修饰?

简单地说,这是java的语法规定。构造器不能定义返回值类型声明,也不能使用void定义构造器没有返回值。如果为构造器定义了返回值类型,或使用void定义构造器没有返回值,编译时不会报错,但java会把这个所谓的构造器当成方法来处理。

// JDK 8
public class Constructor {

    public static void main(String[] args) {
        Constructor c = new Constructor();
        System.out.println(c.Constructor());
    }

    public Constructor() {
        System.out.println("this is constructor!");
    }
    // This method has a constructor name
    public int Constructor() {
        System.out.println("this is method!");
        return 520;
    }
    // This method has a constructor name
    public void Constructor() {
         System.out.println("this is method!");
         return ;
    }
}

输出:

this is constructor!
this is method!
520

2、构造器有返回值吗?

实际上,类的构造器有返回值,返回的是该类的实例,因此类的构造器返回值类型是当前类,因此无需定义返回值类型。但注意:不能在构造器里显示使用return来返回当前类的对象,因为构造器的返回值是隐式的。只写return;不会报错。

// JDK 8
public class Constructor {

    public static void main(String[] args) {
        Constructor c = new Constructor();
    }

    public Constructor() {
        System.out.println("this is constructor!");
        return this; // Void methods cannot return a value
     // return;  // 不会报错
    }
}

3、构造器是创建java对象的途径,是不是说构造器完全负责创建java对象?

答:不是!构造器是创建java对象的重要途径,通过new关键字调用构造器时,构造器也确实返回了该类的对象,但这个对象并不是完全由构造器负责创建的。实际上,当程序员调用构造器时,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,这个对象已经产生了——这些操作都在构造器执行之前就完成了。也就是说,当系统开始执行构造器的执行体之前,系统已经创建了一个对象,只是这个对象还不能被外部程序访问,只能在该构造器中通过this来引用它。当构造器的执行体结束后,这对象作为构造器的返回值返回,通常还会赋给另一个引用类型的变量,从而让外部程序可以访问该对象。

自己总结:之所以会存在系统提供的空构造器,是因为在执行构造器之前对象已经存在,但是不能直接返给程序,需要借助中间体拿到这个对象的地址,而这个中间体刚好就是构造器,所以空构造器只是完成最重要的事,就是拿到这个对象的地址。而非空构造器刚好可以给该对象初始化。

4、static、final、synchronized、native可否修饰构造器?

static不能修饰构造器:static方法只能访问static变量,类中全部变量设为static?

final不能修饰构造器:final方法可以继承但不能重写,构造器不能被继承。

synchronized不能修饰构造器:没有实际的需要把构造器定义成同步的,因为它将会在构造的时候锁住该对象,直到所有的构造器完成它们的工作,这个构造的过程对其它线程来说,通常是不可访问的。

native不能修饰构造器:没有本地的构造器是任意一种语言的设计选择,这样会使得在创建对象的过程中JVM实现很容易去校验父类的构造器是否总是被正确地调用了。
(本地化的方法情况特别复杂,所以JVM调用起来非常麻烦,需要考虑很多种情况,没有native关键字的情况下,JVM实现起来比较容易。)

原文地址:https://www.cnblogs.com/datamining-bio/p/13067776.html