面向对象(一)

类和对象

类是一个模板,它描述一类对象的行为和状态。对象是类的一个实例,有状态和行为。例如,一条狗是一个对象,它的状态有:颜色、名字、品种;行为有:摇尾巴、叫、吃等。类是一种数据结构,对象是一个类的实例,在Java中类、接口、数组是引用数组类型。

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

类和对象在内存中的布局

我们通过一段代码来分析类和对象在内存的分布,实例代码如下:

Person p = new Person();
p.name = "无涯子";//这里我们假定属性的访问修饰符为默认
p.age = 20;
System.out.println(p.name + " " + p.age);

首先执行第一行代码,首先将Person类的信息加载到内存中,然后在堆中开辟一个Person类的空间,并进行默认初始化,name为String所以name的默认值为null,age为int类型,所以默认值为0,然后将堆中创建Person对象的内存地址返回给Person对象引用p。

执行到第二句和第三句的时候,将对堆中对象的属性name和age进行赋值:

第四句就是执行输出语句。

栈:一般存放基本数据类型(局部变量)

堆:存放对象

方法区:常量池、类加载信息

属性

属性也可以称为成员变量,可以是任意类型,跟普通变量相比,属性有访问修饰符(public/private/protected/default),属性可以是任意的类型,不管是基本类型还是引用类型,与普通变量相比,成员变量没有赋值的时候有默认值,整型类型是0,浮点型是0.0,字符型是\u0000,布尔型是false,引用类型是null。

对象创建方式

Person p = new Person;//声明并初始化

Person p ;//声明
p = new Person();//初始化

成员方法调用机制

//主方法区
Person p = new Person();
int result = p.add(10,20);
System.out.println(result);
//Person类中方法
public int add(int num,int num2){
    return num + num2;
}

我们在main方法中执行主方法中三句代码,当执行主方法的时候会在栈中开辟一个main方法的一个独立栈区,执行第一句代码,会先加载Person信息,并在堆中开辟一个对象空间,并进行默认初始化,将堆中地址返回给对象引用p保存。执行第二句代码的时候,调用方法add的时候,会在栈中开辟一个新的独立空间,并将10,20传递给num,num2两个对象,在add执行完毕以后,将结果返回并赋值给result变量。然后将新开辟的栈空间销毁,执行下面的输出代码。

程序执行到方法的时候会开辟独立的栈空间,方法执行完或者遇到return语句时就会返回,返回到调用的地方,继续执行后面的代码,当主方法执行完成,程序就会退出。

posted @ 2021-09-21 20:14  无涯子wyz  阅读(43)  评论(0)    收藏  举报