Java 类、对象和方法

  • 类的基础知识
  • 如何创建对象
  • 引用变量和赋值
  • 方法
  • 返回值
  • 实参与形参
  • 构造函数
  • 垃圾回收机制
  • this关键字


类的基础知识

类是定义对象形式的模板,指定了数据以及操作数据的代码。

Java中使用类的规范来构造对象,而对象是类的实例。

类是逻辑抽象的,只有类的实例——对象才是内存中的物理表示。

类一般都包含方法和变量,通过class创建类。

这是简单的Rectangle类,包含了方法和变量:

class Rectangle{
	public Rectangle(double length, double width) {
		this.length = length;
		this.width = width;
	}
	private double length;
	private double width;
	public double getArea() {
		return length * width;
	}
	public void show() {
		System.out.println("length = " + length + " width = " + width);
	}
}

对于Rectangle类我们可以写一个程序来使用:

//This is a simple class
public class ClassTest {
	public static void main(String[] args) {
		Rectangle r = new Rectangle(1,1);
		r.show();
	}
}

class Rectangle{
	public Rectangle(double length, double width) {
		this.length = length;
		this.width = width;
	}
	private double length;
	private double width;
	public double getArea() {
		return length * width;
	}
	public void show() {
		System.out.println("length = " + length + " width = " + width);
	}
}

输出结果如下:

length = 1.0 width = 1.0

保存这个文件的文件名应该是ClassTest.java。因为main()方法在名为ClassTest类中。

如何创建对象

Rectangle r = new Rectangle(1,1);

这段代码的含义是:先声明一个名为r的Rectangle类型的变量,它现在只是一个可以引用对象的变量,而没有指明什么对象,再new一个实例对象,并将引用赋给r。

new运算符为对象动态分配内存(即运行时分配),并返回一个对它的引用。
该引用是由new分配的对象在内存中的地址。

引用变量和赋值

在赋值运算中,对象引用赋值与基本类型变量赋值的工作方式不同,从以下例子中将能看出:

将Rectangle类进行改进:

class Rectangle{
	public Rectangle(double length, double width) {
		this.length = length;
		this.width = width;
	}
	private double length;
	private double width;
	public void setLength(double length) {
		this.length = length;
	}
	public void setWidth(double width) {
		this.width = width;
	}
	public double getArea() {
		return length * width;
	}
	public void show() {
		System.out.println("length = " + length + " width = " + width);
	}
}

此时使用ClassTest.java程序来验证:

//This is a simple class
public class ClassTest {
	public static void main(String[] args) {
		Rectangle r = new Rectangle(1,1);
		r.show();
		Rectangle r1 = r;
		r1.setLength(2);
		r.show();
		r1.show();
	}
}

class Rectangle{
	public Rectangle(double length, double width) {
		this.length = length;
		this.width = width;
	}
	private double length;
	private double width;
	public void setLength(double length) {
		this.length = length;
	}
	public void setWidth(double width) {
		this.width = width;
	}
	public double getArea() {
		return length * width;
	}
	public void show() {
		System.out.println("length = " + length + " width = " + width);
	}
}

输出结果如下:

length = 1.0 width = 1.0
length = 2.0 width = 1.0
length = 2.0 width = 1.0

此时的r和r1都指向同一个对象,从而导致输出结果相同。

方法

这些都属于改进Rectangle类的方法:

public Rectangle(double length, double width) {
	this.length = length;
	this.width = width;
}
public void setLength(double length) {
	this.length = length;
}
public void setWidth(double width) {
	this.width = width;
}
public double getArea() {
	return length * width;
}
public void show() {
	System.out.println("length = " + length + " width = " + width);
}

通过方法,就可以操作类中的数据,在程序中,也主要通过类的方法来与类进行交互。

返回值

引起方法返回的条件有两个:

  1. 遇到方法的右花括号
  2. 执行return语句

在以下几个方法中都有它们的返回:

public void setLength(double length) {
	this.length = length;
}
public void setWidth(double width) {
	this.width = width;
}
public double getArea() {
	return length * width;
}
public void show() {
	System.out.println("length = " + length + " width = " + width);
}

然而返回值的种类有两种:无返回值和有返回值。

当遇到return语句,使得方法返回时,有两种形式:

  1. 使用void方法,也就是无返回值,则是使用‘“return;”进行返回。
  2. 有返回值时,使用“return value;”返回其值。其返回的数据类型也必须和返回类型兼容。

实参与形参

实参:向方法传递的值称为实参。
形参:在方法中接受实参的变量称为形参。

public void setLength(double length) {		//传递给length的值为实参,length作为方法的形参。
	this.length = length;
}

一个方法可以有多个形参,在声明的时候只需用逗号隔开即可,形参的类型可相互不同。

public int myMeth(int a, double b, char c){
	//...
}

构造函数

构造函数是在创建对象得时初始化对象,它的名称与类名相同,语法与方法相似,且没有显式的返回类型。

例如:

public Rectangle(double length, double width) {
	this.length = length;
	this.width = width;
}

所有类都具有自己的构造函数,如果没有显式的定义出来,Java自动为类提供一个默认的构造函数来初始化所有的成员变量,其默认值为0、null和false,一旦自己定义了构造函数,将不会使用默认的构造函数。

垃圾回收机制

Java的垃圾回收系统会自动回收无用对象,主要工作方式是:当不存在对某对象的任何引用时,该对象就被认定没有存在的必要了,它所占用的内存就要被释放。

垃圾回收只是在程序执行的过程中偶然发生,满足两个条件将运行:

  1. 有对象要回收
  2. 需要回收这些对象

this关键字

当调用一个方法时,会向它自动传递一个隐式实参,它是对调用对象(即调用方法的对象)的一个引用,这个引用叫做this。

private double length;
private double width;
public Rectangle(double length, double width) {
	this.length = length;
	this.width = width;
}
public void setLength(double length) {
	this.length = length;
}
public void setWidth(double width) {
	this.width = width;
}

this的主要用途:当发生局部变量名隐藏实例变量时,通过this引用它,得到隐藏实例变量的访问权。