Java基础之:类与对象

Java基础之:类与对象

Java是面向对象的编程语言。

那么什么是对象呢? 什么又是类呢? 现实案例理解:

人类 与 小范 : 人类就是一个类,而小范就是这个类中的一个对象

狗 与 小白 : 狗就是一个类,而小白 就是这个类中的一个对象

那么,不管是小范 还是 小白 ,都会有一些特定的属性。比如小范的年龄,小白的体重...

 

为什么使用类与对象?

当基本数据类型不够用的时候,我们就自己声明一些类,来使用。

 

代码实现

类的声明: class 类名 { }

对象的声明 : 类名 对象名 = new 类名();

对象属性访问符: "." , 使用: 对象名.属性名

public class Test{
    public static void main(String[] args){
        //声明一个Person对象 p 
        Person p = new Person();
        //对象p 的属性赋值
        p.name = "小范";
        p.age = 20;
        
        //声明一个Dog对象 d
        Dog d = new Dog();
        //对象d 的属性赋值
        d.name = "小白";
        d.wide = 10;
    }
}
​
class Person{
    String name;
    int age;
}
class Dog{
    String name;
    int wide;
}

 

属性/成员变量

属性也叫做成员变量 , 而我们上面定义的name、age、wide 都是成员变量。

属性的定义: 访问修饰符 属性类型 属性名;

说明:

  1. 属性可以是基本数据类型,也可以是引用数据类型。例如 Person 中可以有一个属性是 Dog 类型的对象 d。

  2. 属性如果不进行赋值,则会有默认值。这里默认值的取值与数组中的默认值取值一样。

  3. 不同的对象是相互独立的,互相不影响的。一个对象对属性进行更改,对另一个对象不会有影响。例如:有两个人分别是 小黄 和 小范,如果小范体重增加了10kg,对小黄并没有影响。

  4. 属性有访问修饰符,它们按可访问范围分为:public>protected>默认(default)>private。

public class Test{
    public static void main(String[] args){
        //对象p1
        Person p1 = new Person();
        //对象p1 的属性赋值
        p1.name = "小范";
        p1.age = 20;
        
        //对象p2
        Person p2 = new Person();
        //对象p2 的属性赋值
        p2.name = "小黄";
        p2.age = 18;
        
        //改变 p1 的age属性与name属性 , p2不会受到影响
        p1.name = "小雨";
        p1.age = 19;
    }
}
​
class Person{
    String name;
    int age;
}

  

内存图理解

 

 

 

 

对象是引用类型的,所以对象和数组以及String字符串一样,存在赋值问题。例如

public class Test{
    public static void main(String[] args){
        //对象p1
        Person p1 = new Person();
        //对象p1 的属性赋值
        p1.name = "小范";
        p1.age = 20;
        
        Person p2 = p1;
        
        p2.age = 18; //这时 p1.age 也就等于 18
    }
}
​
class Person{
    String name;
    int age;
}

内存图理解

 

 

内存图说明:

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

2) 堆: 存放对象(Cat cat , 数组等)

3) 方法区:常量池(常量,比如字符串), 类加载信息

程序流程分析:

1) 先加载Person 类 , 只会加载一次

2) 在堆中,分配空间[地址],并进行默认初始化,比如 name=null age = 0

3) 把堆中地址,返回给 p1

4) 进行指定初始化 name = “小范” age = 20

5) 在栈空间中声明一个p2,将p1在栈空间中保存的堆地址复制给p2

6)p2.age 改变 堆空间保存的 age属性。

posted @ 2020-11-25 08:58  奋斗的小范同学  阅读(123)  评论(0编辑  收藏  举报