JAVA(杂记四) -- 类与对象

东西太多,先写在代码里了,以后有时间整理

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());
	}
}

猜你喜欢

转载自blog.csdn.net/love_irelia97/article/details/80531490