学习内容:
  1.初始化
  2.清理
  1.初始化
  虽然自己的Java基础还是比较良好的..但是在解读编程思想的时候还是发现了许多的细节问题自己并没有完全的掌握.既然是研磨,那么应该更加的细致.
  i.构造方法的重载.
  首先说明一下,为什么构造方法需要重载.
  需要重载的一个重要原因是,因为我们的构造器只能有一个名字,也是和类名相同.但是如果我们需要通过不同的方式去构造一个对象的时候我们该如何是好?那么这里需要通过对构造器的重载来实现.这样需要多个构造器来实现.首先是需要一个默认的构造器,然后其他的构造器需要通过在重载构造器的方式来构造不同的构造器(针对不同的参数).
class Darker{
private String darker;
public Darker() {
// TODO Auto-generated constructor stub
System.out.println("Default Constructor: "+darker);
}
public Darker(String darker){
this.darker = darker;
System.out.println("Overload Constructor: "+darker);
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Darker darker = new Darker();
Darker darker2 = new Darker("darker");
}
}
  这样通过重载构造器.我们可以通过使用不同的方法对对象进行初始化.那么重载的方法.Java如何知道要走哪个方法去构造一个对象呢?其实不难理解,由于方法名称相同,那么无非是通过参数的不同来识别.甚至通过参数的顺序也能够调用不同的构造器.不过一般是不推荐这样使用的.
  ii.默认构造器.
  默认构造器被称为无参构造器,作用是创建一个默认的对象.如果我们的类中没有定义一个默认构造器,那么编译器会自动为我们创建一个默认的构造器.不难发现.我们在写一个class的时候,即使不书写默认构造器,我们仍然可以创建一个普通的对象.
class Darker{
public String getDarker() {
return darker;
}
public void setDarker(String darker) {
this.darker = darker;
}
private String darker;
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Darker darker = new Darker();
darker.setDarker("darker");
System.out.println(darker.getDarker());
}
}
/**
*OutPut
*darker
*/
  我们可以看到,我们即使不去定义一个默认构造器去创建对象仍然是没有任何问题的.因为编译器会自动为我们加上一个默认构造器.但是这里有一个陷阱..
package com.thinking.in.java;
class Darker{
private String darker;
public Darker(String darker){
this.darker = darker;
}
//    public Darker(){
//
//    }
public String getDarker() {
return darker;
}
public void setDarker(String darker) {
this.darker = darker;
}
}
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Darker darker = new Darker();
darker.setDarker("darker");
System.out.println(darker.getDarker());
}
}
  这个代码和上面的那个区别在于我们定义了一个有参构造器.但是正是由于这个定义,我们无法使用通过无参构造器去创建一个对象.Darker darker = new Darker(); 这句话连编译都无法通过.直接报错 The constructor Darker() is undefined .也是我们的无参构造器没有定义.这是什么原因呢?这里的问题取决于Java的机制.如果我们没有去书写任何一个构造器,那么Java会自动为我们添加上一个默认的构造器,我们可以直接构造对象.但是如果我们定义了一个构造器(注意:有参构造器).那么Java会明白:你已经定义了一个构造器了,所以你知道自己在做什么.只是忽略掉了默认构造器.这样Java不会为我们添加默认构造器了.前面一直在说有参,如果我们把默认构造器的注释拿掉,那么我们 Darker darker = new Darker()这句话不会出错了.