东西太多,先写在代码里了,以后有时间整理
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()); } }