java – Does my class of employees create an immutable object? that is, once the values ​​are assigned, it can not be changed

I've created an object used for it to be immutable.

the implementation is as follows,

package com.immutable.ex01;

import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public final class Employee implements Cloneable, Externalizable {
total final private age;
private final channel name;
Private final list companies;
Private end date date dob;

public Employee (whole age, channel name, list companies, Date dob) {
this.age = age;
this.name = name;
this.companies = companies;
this.dob = dob;
}

public Integer getAge () {
return this.age;
}

public String getName () {
return this.name;
}

public Date getDob () {
Calendar cal = Calendar.getInstance ();
cal.setTime (this.dob);
returns cal.getTime ();
}

public list getCompanies () {
listing clone = new ArrayList(this.companies.size ());
for (String companyName: this.companies) {
clone.add (companyName);
}
return the clone;
}

@Override
public String toString () {
StringBuffer strb = new StringBuffer ();
strb.append ("AGE"). append ("") .append (this.age)
.append (", NAME") .append (this.name)
.append (", DOB") .append (this.getDateString ())
.append (", TREATED ENTERPRISES");
for (String companyName: this.companies) {
strb.append (companyName) .append (",");
}

strb.deleteCharAt (strb.length () - 1);
returns strb.toString ();
}

@Override
public object clone () throws CloneNotSupportedException {
launch the new CloneNotSupportedException ("Can not be cloned");
}

@Override
public void writeExternal (ObjectOutput out) throws IOException {
throw new IOException ("This operation is not supported");
}

@Override
public void readExternal (ObjectInput in) throws the IOException {
throw new IOException ("This operation is not supported");
}

private String getDateString () {
String date = null;
DateFormat df = null;
try {
df = new SimpleDateFormat ("dd MMM yyyy");
date = df.format (this.dob);
} catch (Exception e) {
e.printStackTrace ();
}
return date;
}
}

My main course

package com.immutable.ex01;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

Public class MainTest01 {
public static void main (String [] args) {
Employee emp = null;
listing companyList = null;
Date date = null;
try {
companyList = new ArrayList();
companyList.add ("IBM");
companyList.add ("Google");
companyList.add ("Norton");
companyList.add ("Seable");
companyList.add ("Nekki");
date = toDate ("October 28, 1981");
emp = new Employee (23, "John Molkovich", companyList, date);

date = emp.getDob ();

date = new Date ();

companyList = emp.getCompanies ();
companyList.add ("Toyo Corp");
System.out.println (emp);
} catch (Exception e) {
e.printStackTrace ();
}
}


date toDate static private (String dateString) throws an exception {
Date d = null;
DateFormat df = new SimpleDateFormat ("dd MMM yyyy");
d = df.parse (dateString);
return d;
}
}

Please review my code and check if I have reached immutability for my class of employee.