类和对象概述
类(Class)和对象(Object)是面向对象的核心概念。
1)什么是类
- 类是创建对象的蓝图或模板,它定义了一组属性(也称为字段或变量)和方法(函数),这些属性和方法共同描述了一个对象的状态和行为。
- 类是抽象的,它不占用内存空间,直到您创建了一个对象实例。
- 类可以看作是现实世界中某些具有共同特征的事物的模型。
2)什么是对象
- 对象是类的一个具体实例,它使用类中定义的模板创建。
- 对象是具体的,它在计算机内存中占用空间,并且有一个明确的生命周期。
- 每个对象都可以拥有不同的属性值,即使它们属于同一个类。
- 对象也称为实例(Instance),因为它是类的一个实例化。
比喻
- 类:想象成汽车的设计图纸或计划。它详细描述了汽车应有的外观、性能和功能,但它本身不是一个实体,不能开动。
- 对象:则是根据这个设计图纸实际制造出来的汽车。每一辆汽车都是设计图纸的具体实现,是可触摸、可驾驶的实体。
类最基本的两个成员
属性:该类事物的状态信息。对应类中的成员变量
成员变量 <=> 属性 <=> Field
行为:该类事物要做什么操作,或者基于事物的状态能做什么。对应类中的成员方法
(成员)方法 <=> 函数 <=> Method
类的定义
类的定义使用关键字:class。格式如下:
[修饰符] class 类名{
属性声明;
方法声明;
}
示例:
public class Person{
// 声明属性age
int age ;
// 声明方法showAge()
public void eat() {
System.out.println("人吃饭");
}
}
创建对象,使用关键字:new
// 方式1:给创建的对象命名
// 把创建的对象用一个引用数据类型的变量保存起来,这样就可以反复使用这个对象了
类名 对象名 = new 类名();
// 方式2:
new 类名()//也称为匿名对象
示例:
class PersonTest{
public static void main(String[] args){
//创建Person类的对象
Person per = new Person();
//创建Dog类的对象
Dog dog = new Dog();
}
}
对象调用属性或方法
1)对象是类的一个实例,必然具备该类事物的属性和行为(即方法)。
2)使用"对象名.属性" 或 "对象名.方法"的方式访问对象成员(包括属性和方法)
举例:
//声明Animal类
public class Animal { //动物类// 声明属性
public int legs;
public void eat() {
System.out.println("Eating.");
}
public void move() {
System.out.println("Move.");
}
}
//声明测试类
public class AnimalTest {
public static void main(String args[]) {
// 创建对象
Animal name = new Animal();
name.legs = 4; // 访问属性
System.out.println(name.legs);
name.eat(); // 访问方法
name.move(); // 访问方法
}
}
匿名对象 (anonymous object)
我们也可以不定义对象的句柄,而直接调用这个对象的方法。这样的对象叫做匿名对象。
如:new Person().shout();
使用情况
1)如果一个对象只需要进行一次方法调用,那么就可以使用匿名对象。
2)我们经常将匿名对象作为实参传递给一个方法调用。
内存解析:
堆(Heap):
此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。
这一点在Java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配。
栈(Stack):
是指虚拟机栈。虚拟机栈用于存储局部变量等。
局部变量表存放了编译期可知长度的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型,它不等同于对象本身,是对象在堆内存的首地址)。 方法执行完,自动释放。
方法区(Method Area):
用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
构造器
构造器(或构造方法)
Constructor 构造器
1)构造器是类的一个特殊方法
2)用于创建类的对象
3)初始化对象的信息
格式
权限修饰符 类名(形参列表){}
示例
Person(){
定义属性
}
Person(String name){
this.name = name;
}
调用
Person person = new Person( ); // 无参构造器 Person()
this 关键字:
1)this
是一个指向当前对象的引用
2)可以连环调用
一个构造器可以通过 this(参数列表)
调用同一类中的另一个构造器
说明
this( ) 语句必须放在构造器中的第一行
super 关键字:
1)super
是指向当前对象的父类(即超类)的引用
使用说明:
- 如果没显示的定义类的构造器,则系统默认提供一个空参的构造器。
- 一旦我们显示的定义了类的构造器后,系统不再提供默认的空参构造器。
- 一个类中定义的多个构造器,彼此构成重载
- 一份类中,至少会有一个构造器
属性赋值的先后顺序
- 默认初始化
- 显示初始化
- 构造器初始化
- 通过“对象.方法”或“对象.属性”的方法赋值
JavaBean
所谓JavaBean,是指符合如下标准的Java类
1)类是公共的
2)有一个无参的公共构造器
3)访问属性的get、set方法
JavaBean示例
public class UserBean {
// 定义属性
private String name;
private int age;
// 无参构造器
public UserBean() {
}
// Getter 方法
public String getName() {
return name;
}
// Setter 方法
public void setName(String name) {
this.name = name;
}
// Getter 方法
public int getAge() {
return age;
}
// Setter 方法
public void setAge(int age) {
this.age = age;
}
}