类与对象的概述

类与对象的概述

把一类事物的特性提取出来 =》形成类(属性,行为)=》对象是类的具体化(具体事物)

如:把猫的特性提取出来 ===》形成猫类 ===》对象是(如大白猫,就是具体的一只猫)

注意:从猫类到对象,就是创建一个对象或称为实例化一个对象或称为把类实例化

类与对象的区别和联系

  1. 类是抽象的,概念的,代表一类事物,比如人类,猫类等,即它是数据类型(引用数据类型)
  2. 对象是具体的,实际的,代表一个具体的事物,即是实例
  3. 类是对象的模板,对象是类的一个个体,对应一个实例

快速入门代码

public class Object01 {
    public static void main(String[] args) {
        //入门代码:使用OOP面向对象解决
        //实例化一只猫【创建一只猫对象】
        //如: new Cat();创建一只猫,创建的对象空间(数据)才是真正的对象
        //Cat cat1 = new Cat();把创建的猫赋给cat1,cat1代表就是一个对象,也就是对象的引用
        //cat1是对象(对象引用)
        Cat cat1 = new Cat();
        cat1.age=18;
        cat1.name="海康";
        cat1.color="白色";

        System.out.println(cat1.name+"\t"+cat1.age+"\t"+cat1.color);

    }
}

class  Cat {

    public int age;//年龄
    public String name;//名字
    public String color;//颜色
}

JVM的内存中对象存在形式
在这里插入图片描述

**属性(属性可称为成员变量或字段)**是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,字符串,数组)

注意:字符串是在方法区的常量池中存储的

只要有数据就一定有地址

注意事项和细节说明

  1. 属性的定义语法同变量,示例:访问修饰符(public proctected 默认 private) 属性类型 属性名
  2. 属性的定义类型可以是任意类型,包含基本类型或引用类型
  3. 属性如果不赋值,有默认值,规则和数组一致。具体说:int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null
public class Object02_属性的注意事项 {
    public static void main(String[] args) {

        //new Person();是创建一个对象,在堆中
        //person1是对象的引用(就是对象名称,代表一个对象)

        Person person1 = new Person();
        System.out.println("个人信息如下:");
        //在没有赋值时,有默认值:int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null
        System.out.println(person1.age+"\t"+person1.name+"\t"
                +person1.salary+"\t" +person1.isPass);

        /*
        * 返回值:
        *   个人信息如下:
        *   0  null   0.0    false
        * */

    }
}

class Person{
    //四个属性
    public int age;
    public String name;
    public double salary;
    public boolean isPass;
}

如果创建对象

  1. 先声明再创建

    Cat  cat;//声明对象cat
    cat = new Cat();//创建
    
  2. 直接创建

    Cat cat = new Cat();
    

如何访问属性

基本语法:

对象名.属性名

如:

cat.name cat.age cat.color

类和对象的内存分配机制(重点必须掌握)

我们定义一个(Person)(字段field有:名字,年龄)

Person p1 = new person();
p1.age=10;
p1.name="小明";
Person p2 = p1;//同时让P2也指向P1
System.Out.println(p2.age);

请问:p2.age究竟是多少?并画出内存图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSDpPhFM-1641823165321)(E:\Typora笔记\java笔记\img\Inkedimage-20220109132319800_LI.jpg)]

类创建的顺序:

1.加载Person类信息(主要是1.属性信息,2.方法信息),不论创建多少次对象,加载类信息只加载一次

2.在堆中创建一个对象(就是开辟一块内存空间)并对象属性的值进行默认处理

3.将堆的地址赋给p1(也就是0X0011)

4.通过地址找到堆中的属性进行赋值

5.如果属性是引用数据类型,则会在常量池中开辟空间存放数据,并将地址赋给堆中的属性

JAVA内存的结构分析

  1. 栈:一般存放基本数据类型(局部变量)
  2. 堆:存放对象(Cat cat,数组等)
  3. 方法区:常量池(常量,比如字符串),类加载信息

JAVA创建对象的流程简单分析

Person  p  =  new Person();
p.name="haikang";
p.age=10;

步骤:
    1.先加载Person类信息(属性和方法信息,只会加载一次)
    2.在堆中分配空间,进行默认被始化(int 0short 0, byte 0, long 0, float 0.0,double 0.0char \u0000,boolean falseString  null3.把堆中地址赋给p,p就指向该对象
    4.进行指定初始化,如p.name="haikang",p.age=10

练习:并分析画出内存布局图,进行分析

分析一段代码,会输出什么信息

Person  p  =  new Person();
a.age=10;
a.name="小明";
Person b;
b=a;

System.Out.println(b.name);//小明
b.age=200;
b.null;
System.Out.print(a.age);//200
System.Out.print(b.age);//抛出异常

在这里插入图片描述

注意:由于b=null,再输出b.age时,由于b没有指向对象,直接抛出异常NullPointerException

public class Object03 {
    public static void main(String[] args) {
        Person a = new Person();
        a.name="小明";
        a.age=10;
        Person b;
        b=a;
        System.out.println(b.name);
        b.age=200;
        b=null;
        System.out.println(a.age);
        System.out.println(b.age);

        /**
         * 返回值:
         * 小明
         * 200
         * Exception in thread "main" java.lang.NullPointerException
         */
    }
}
class Person{
    public int age;
    public String name;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值