如果你现实中没有对象,至少你在java世界里会有茫茫多的对象,听起来是不是很激动呢?
对象
对象是类的一个实例,有状态和行为。
我们所在的世界,周围的一切事物都是对象,车、人、狗等等。这些对象都有自己的状态和行为。
我们用一只猫来举例,它的状态有:名字、品种、颜色,行为由:跑,叫,睡觉。
软件的对象也有状态和行为。软件对象的状态称为属性,行为通过方法体现。
那么什么是面向对象?
关注现实存在的事物的各方面的信息,从对象的角度出发,根据事物的特征进行程序设计
类
类是一个模子,确定对象将会拥有的特性(属性)和行为(方法)
类的特点:
- 类是对象的类型
- 具有相同属性和方法的一组对象的集合
对象是类的实例表现
属性
对象具有的静态特征。对象“有什么”。
方法
对象具有的各种动态行为。对象“能做什么”。
变量
一个类中可以包含以下类型变量:
局部变量
在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都在方法中,方法结束后,变量就会自动销毁
成员变量
成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问
类变量
类变量也声明在类中,方法体之外,但必须声明为static类型
类和对象的关系
类是抽象的概念,仅仅是模板
对象是一个你能看得见,摸得着的具体实体
类是对象的类型
对象是特定类型的数据
对象实例化
实例化对象的过程可以分为两部分:
- 声明对象 Cat one
- 实例化对象 new Cat()
- Cat one = new Cat();//类名 对象名 = new 构造方法();
声明对象,就是在内存的栈区域开辟一块空间,此时这个空间里的值是空的
实例化对象,在内存的堆区域开辟一块空间,完成初始化操作

经过赋值操作,我们将堆空间中的地址,传递到了栈当中的内存空间里。此后,我们就可以通过对象名去调用对象的属性和方法了。

每次 new 对象就会产生新的实例化方法
- Cat one = new Cat();
- Cat two = new Cat();

多个对象也可以指向同一块实例化空间
- Cat one = new Cat();
- Cat two = one;

对象实例化
对象必须被实例化之后才能使用
对象间的引用传递,实际上传递的是堆内存空间的使用权
构造方法
- 构造方法与类同名且没有返回值
- 只能在对象实例化的时候调用
- 一个类可以有多个构造方法—构造方法重载
- 当没有指定构造方法时,系统会自动调用无参的构造方法
- 当有指定构造方法,无论是有参、无参的构造方法,都不会自动调用无参的构造方法。
- 构造方法不可被重写
this 关键字
this: 当前对象的默认引用
this 的使用
- 调用成员属性,解决成员属性和局部变量同名冲突
1 | String name; |
- 调用成员方法
1 | public void run(){ |
- 调用重载的构造方法
1 | public Cat(){ |
源文件声明规则
当在一个源文件中定义多个类,并且还有 import 语句和 package 语句时,要特别注意这些规则
- 一个源文件中只能有一个 public 类
- 一个源文件可以有多个非public类
- 源文件的名称应该和 public 类的类名保持一致。例如:源文件中 public 类的类名是 Employee,那么源文件应该命名为 Employee.java
- 如果一个类定义在某个包中,那么 package 语句应该在源文件的首行
- 如果源文件包含 import 语句,那么应该放在 package 语句和类定义之间。如果没有 package 语句,那么import 语句应该在源文件中最前面
- import 语句和 package 语句对源文件中定义的所有类都有效。在同一源文件中,不能给不同的类不同的包声明