东西太多,先写在代码里了,以后有时间整理
public class Main
{
public static void main(String[] args)
{
Employee e1 = new Employee("lyy", 3800.0);
// 此处的e1等同于C++指针,new出来的对象返回的是一个引用
Employee e2 = e1;
// JAVA没有默认的复制构造函数
// 因此上一行的作用是e1和e2指向同一对象
e1 = null;
// 可将对象变量设置为null,此时若调用方法将会出错
e1 = new Employee("qwe", 2400.0);
// 不能使用 e1.Employee("asf", 10000.0); 来构造新对象
// 构造器只能在初始化时使用,不能作为方法调用
System.out.println(e1.getId()); // 1002
System.out.println(e2.getId()); // 1002
System.out.println(Employee.getNum()); // 2
}
}
// JAVA中方法、实例域的声明和定义均在类中完成
// JAVA不能为类重载运算符
class Employee
{
// 静态域
// 只在该类第一次加载时初始化
private static int nextId = 0;
// 实例域
// 可以在实例域声明时初始化,也可由构造器初始化,也可由初始化块进行初始化
// 若都不进行初始化,则实例域自动初始化为0、null或false
private String name = "";
private double salary = 0;
private final int id;
// 初始化块,首先运行,之后才会执行构造器
// 不是必须的
{
nextId++;
id = 1000+nextId;
}
// 构造器
// JAVA没有列表初始化
public Employee(String aname, double asalary)
{
name = aname;
salary = asalary;
}
// 构造器和方法均可以重载,要求名字相同,参数列表不同,而与返回类型无关
// JAVA可以在构造器中调用另一个构造器(c++不行)
public Employee()
{
this("nameless", 3500.0);
}
// 域访问器
// JAVA不提供const或者final后缀保证实例域不被更改
// 注意,不要直接返回实例域中可变对象(如类的实例)的引用
// 若该引用又使用域更改器( Setxx() ),则破坏了其封装性
// 应使用clone方法
public String getName() { return name; }
public double getSalary() { return salary; }
public int getId() { return id; }
//这类静态方法可以直接使用类名访问,即Employee.getNum()
public static int getNum() { return nextId; }
public static void swap(Employee e1, Employee e2)
{
/**
* 该方法试图交换2个引用,但是不会生效
* 因为传入的参数相当于是C++的指针的拷贝
* 对指针指向的区域修改是有效的
* 但是对拷贝的指针做修改并不会影响到实参
*/
Employee tmp = e1;
e1 = e2;
e2 = tmp;
// 由此可见,JAVA对对象采用的是“按值传递”
// 即方法无法更改基本数据类型
// 但方法可以改变对象参数的状态,而无法使对象引用一个新对象
}
// 域更改器
// 这里的aname和asalary称为显式参数
// 而这里的name和salary称为隐式参数,相等于this.name和this.salary
public void setName(String aname) { name = aname; }
public void setSalary(double asalary){ salary = asalary; }
// 自定义类中也可有一个静态main方法,一般用於单元测试
// Eclipse测试方法,右键类名,运行方式-JAVA应用程序,找到该类
public static void main(String[] args)
{
Employee e1 = new Employee("skw", 4300.0);
System.out.println(e1.getId());
System.out.println(Employee.getNum());
}
}