1、类和对象
类:具有相同特征(数据元素)和行为(功能)的对象的抽象。是描述一组具有共同属性和行为对象的基本模板。是对具有相同属性和相同方法的对象的定义。
对象:是世界中的实体,是人们要进行研究的任何事物,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
比如说动物,动物就是一个类,而具体的某个动物(猫,狗…)就是动物这个类的对象,像名字,年龄,这些就是对象的属性,吃饭,睡觉,这些就是对象的方法。总之类就是有相同特征的事物的集合,而对象就是类的一个具体实例。
面向对象的本质:以类的方式组织代码,以对象的形式封装数据。
2、对象在内存中的创建
- 定义宠物类
public class Pet {
//属性
public String name;
public int age;
//方法
public void speak(){
System.out.println("叫了一下");
}
}
- 创建对象
public class Demo02 {
public static void main(String[] args) {
//创建对象
Pet dog = new Pet();
//给成员属性赋值
dog.name = "旺财";
dog.age = 3;
//调用成员方法
dog.speak();
System.out.println(dog.name);
System.out.println(dog.age);
}
}
那么在进行这两步时,内存中是如何变化的呢?
这里"旺财"是常量,而3只是一个int类型的数据,因为"旺财"是字符串,String默认就是final修饰,也就是常量。
1.8之后字符串常量池和静态变量在堆中;运动时常量池在元空间中,元空间是堆的实现,也可以说是在堆中
创建dog对象后,其成员属性还没有赋值,所以为默认值。
到这里,dog对象在内存中已经加载完毕。那假如再来一个cat(猫)对象,那内存中又是如何变化的?
public class Demo02 {
public static void main(String[] args) {
//创建对象
Pet dog = new Pet();
//给成员属性赋值
dog.name = "旺财";
dog.age = 3;
//调用成员方法
dog.speak();
System.out.println(dog.name);
System.out.println(dog.age);
Pet cat = new Pet();
}
}
注意:静态方法区,放所有的static,这是和类一起加载的,导致所有的对象都可以使用它。
[外链图片转存中…(img-hPzWWQ2T-1663417153854)]
注意:静态方法区,放所有的static,这是和类一起加载的,导致所有的对象都可以使用它。
最后,阳光就在天上,祝大家前程似锦!