构造器用于初始化对象,同时jvm会为该对象分配内存空间,不接受任何参数的构造器叫作默认构造器或者无参构造器,构造器没有返回值,这里有一个面试题
String str=new String("content");
当String的构造器运行后,jvm会给str分配一部分的内存空间,并且str指向堆区的content,然后str得到的值并不是构造器所返回的,而是new动作的结果,构造器完成初始化后就结束了
一个简单的面试题:
创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器初始化的String域,这两种有何区别?
package section.five; /** * Created by mac on 2017/7/16. */ public class ExerciseTwo { String str1 = "hello"; String str2 = null; String str3 = str2; public ExerciseTwo(String str2){ this.str2 = str2; } }package section.five; /** * Created by mac on 2017/7/16. */ public class Main { public static void main(String[] args){ ExerciseTwo exerciseTwo = new ExerciseTwo("world"); System.out.println("str1: "+exerciseTwo.str1); System.out.println("str2: "+exerciseTwo.str2); System.out.println("str3: "+exerciseTwo.str3); } }
输出结果可得:
str1: hello str2: world str3: null
在定义时就被初始化了的String域在实例化的时候引用str1被赋值了一次,而另一个str2第一次被赋值为null,第二次通过构造器赋值为world,所以被赋值了两次java中的重载具有以下几个特点:
1.方法名相同 2.参数列表不同(若参数列表的类型相同但是参数列表的顺序不同也属于重载) 3.返回值可以相同也可以不同举个例子:int show(); 和void show();两个方法不能构成重载,所谓的重载是指方法名和参数列表,两者合称为方法签名
int show(int a,String b);和int show(String a,int b)构成重载,因为两个方法的参数列表的顺序不同
