Java 类与对象

类与对象

类与对象的关系

  • 类是一种抽象的数据类型,它是对某一些事物整体描述/定义,但是并不能代表某一个具体的事物。

  • 就比如:

    • 老虎、狮子对应的类是动物类,因为老虎和狮子都是动物,而动物中包含了老虎和狮子,也就是说老虎和狮子是动物类的实例(也就是对象)
    • 奔驰、宝马、奥迪这些对应的类就是汽车类
  • 类是用来描述/定义某一类具体的事物应该具备的特点和行为

  • 对象是抽象概念的具体实例

    • 上述的老虎,狮子都是动物类的实例,另外也还可以有猴子、斑马等实例
  • 能够体现出特点,展现出功能的是具体的实例,而不是一个抽象的概念

创建与初始化对象

  • 使用new关键字创建对象
//学生类
public class Student {

    //属性:字段
    String name;
    int age;

    //方法
    public void say(){
        System.out.println(this.name+"是学生!");//this指代当前类
    }
}


//一个项目中应该只有一个main方法,用于启动程序
public class Application {

    public static void main(String[] args) {

        //类:抽象的,需要实例化
        //类实例化之后,会返回一个对象
        //下述的xiaohuang、daming都是Student类的具体实例
        //此时xiaohuang、daming为对象名
        Student xiaohuang = new Student();
        Student daming = new Student();

        //对象里封装了姓名、年龄等属性
        //给对象的属性赋值,若不赋值,则为默认初始值
        xiaohuang.name = "小黄";
        xiaohuang.age = 5;

        daming.name = "大明";
        daming.age = 5;

        System.out.println(xiaohuang.name);
        System.out.println(xiaohuang.age);

        System.out.println(daming.name);
        System.out.println(daming.age);

    }
}
  • 使用new关键字的时候,除了分配内存空间之外,还会给 创建好的对象 进行默认的初始化 以及类中构造器的调用。

构造器

  • 类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的。并且构造器有以下两个特点:
    • 必须和类的名字相同
    • 必须没有返回类型,也不能写void

通过对编译后的.class文件查看:

  • 类中即使什么都不写,也会存在一个方法

public class Person {
    
    String name;

    public Person() {//无参构造
        this.name = "huang";//初始化对象的属性名字
    }

    public Person(String name) {//有参构造
        this.name = name;
    }
}

作用

  • new 的本质就是在调用构造器(构造方法)
  • 构造器(构造方法)可以初始化对象的属性

注意:定义有参构造之后,无参构造就会消失,如果想使用无参构造,必须显示的定义一个无参构造

可以利用 Alt+Insert 快速定义构造器!!!

创建对象内存分析

分析图:

​ 类在方法区就像一个模板。当 Pet dog = new Pet() 时,会将 dog(引用变量名) 置于栈中,用于指代新生成的对象。计算机收到 new Pet() 指令后,会在堆中找到这个 Pet类 ,以此作为一个模板,复制类中的属性(若未初始化或者利用变量名为其赋值,则为 null 或0)和方法给新生成的对象,储存于堆中。而 0x0001则为这个新生成的对象存储在堆中的地址。当调用这个对象时,计算机就会根据这个地址,找到这个对象储存的地方并读取里面的内容进行调用。

类与对象小结

  • 类与对象

    • 类是一个模板:抽象的,对象是一个具体的实例
  • 方法

    • 定义、调用
  • 对象的引用

    • 引用类型:基本类型(8)
    • 对象是通过引用变量名来操作的:栈---->堆(通过对变量名的引用来操作对象)
  • 属性:字段Field 成员变量

    • 默认初始化:
      • 数字: 0 0.0
      • char: u0000
      • boolean:false
      • 引用: null
  • 对象的创建和使用

    • 必须使用new 关键字创造对象,构造器
    • 对象的属性
    • 对象的方法
  • 类:

    • 静态的属性 属性
    • 动态的方法 方法
posted @ 2023-04-24 14:56  远帆启航  阅读(32)  评论(0)    收藏  举报