Java 是一门面向对象的编程语言,以前听过这样一句话:一切皆对象。可见,对象在 Java 语言中是非常非常重要。那么,Java 中的对象到底是怎么回事儿呢?
在 Java 中,对象通常包括实例变量和方法两种属性。
实例变量是对象本身已知的事物,它代表对象的一种状态(数据),并且同一个类型的多个对象都独立地拥有这些状态。从这个角度来看,我们也可以把对象看作是类的一个实例。
方法就是对象可以执行的动作。通常我们在构造一个类时,我们除了要初始化类的状态,我们还要构造出可以操作这种状态的方法。
举个例子:
public class DogTestDriver {
public static void main(String[] args) {
Dog dog = new Dog(); // 这里通过狗类 new 出了一个对象 dog
dog.size = 40; // 已知的大小为 40,size 就是 dog 这个 dog 对象其中一个实例变量
dog.bark(); // bark 表示狗“吠”的动作,也就是 dog 这个对象的方法
}
// 编写一个狗类
static class Dog {
int size;
String breed;
String name;
void bark () {
System.out.println("Ruff! Ruff!");
}
}
}
需要注意的是,虽说 Java 中一切皆对象,但是几乎所有对象都是通过某个类的模型构造出来的。也就是说,类和对象是不可分割的,不过类和对象还是有区别的。
那么,类和对象究竟有什么不同呢?
类不是对象,类是用来构造对象的。当我们通过类 new 出该类的一个实例(对象)时,类就需要告诉虚拟机要如何创建我这个类的对象。我们可以将类视为一张设计图纸,在创建对象时,虚拟机不是时按照图纸的规定把实物做出来而已。
举个例子,当我们有一个按钮类,我们就可以通过这个按钮类创建出很多大小、颜色、形状各不相同的按钮。
我们有必要了解的是,程序代码都是 main() 方法中是不合适的。简单的测试用例可能无伤大雅,但是一旦程序复杂起来,那么势必是需要让对象和对象之间相互交互的。在这种需要对象间交互的情形,要是再把所有代码都放在 main() 方法中,程序的任何一点小改动都需要重新测试整套代码,要是代码量很大,这个过程将是灾难性的。
实际上,程序都放在 main() 方法中不是面向对象编程的思想,而 Java 语言是面向对象的语言。所以,我们在使用 Java 进行编程时,拥有面向对象编程的思想是异常重要的。
以我现在的理解,我能够想到的就是,无论什么时候编写 Java 程序,我们就刻意将所有东西对象化。比如,桌子是对象、电影是对象、狗是对象、一本书是对象...然后再去考虑这些对象都有哪些已知的状态,比如,桌子是方的、电影时长 120 min、狗毛是黄色的...除此之外,还要考虑这些对象都能够干什么,就像上面那个 dog 对象,这个 dog 对象就能 bark (吠)。
关于创建对象的知识 tips
所有对象的创建都发生在堆内存(关于内存模型,后面我们找机会详细聊下)中,并且这个堆是可回收垃圾的对内存。Java 的垃圾回收机制也是我们后面需要熟悉的,总的来说,Java 会根据对象的大小来分配堆内存空间。比如说,拥有 15 个实例变量的对象所获分配的空间就可能比只拥有 2 个实例变量的对象所获空间大。Java 对象是被使用完成后,Java 的垃圾回收机制会自动帮助我们清理内存。
大体上是这样的,当某个对象被 Java 虚拟机察觉到不会再被使用了,这时 Java 虚拟机会将这个对象标记为是可回收的。一旦内存紧张,垃圾收集器就会开始工作,清理垃圾,以便腾出内存空间投入再使用。
总结一下:
1、Java 是面向对象的程序语言,面向对象编程思想是非常重要的
2、真正的 Java 程序都是对象间的交互
3、面向对象设计拓展程序功能无需改动之前已经测试好的代码
4、所有的 Java 程序都定义在类中,类是对象的设计图纸
5、对象都有实力变量(状态)和方法(可执行动作)两种属性
这次只是一个简单的介绍,如果觉得对你有帮助到,记得点个赞再走哟~