Java——类和对象

目录

目录

一、类和对象

二、封装

三、就近原则和this关键字

四、构造方法

五.   三种情况的对象内存图

六、基本数据类型和引用数据类型

七、this的内存原理


一、类和对象

1. 类和对象是什么?

类:共同特征的描述(类比为手机的设计,属性有:品牌、价格等;功能:打电话、发短信等)

对象:具体的实例(类比为具体的产品,如华为)

二、封装

1. 面向对象三大特征

    封装、继承、多态。(该小节主要讲解封装)

2. 如何理解封装

    对象代表什么,就得封装对应的数据,并提供数据对应的行为。

什么意思呢?这里需要小伙伴们推翻原来的思维,重新思考,以便更加深入的理解封装的定义。这里举两个例子:

eg1:人画圆。思考一下,是人画的圆,还是圆自己把自己画出来的呢?

        按照原来的思维,不用想,那肯定是人画的啊!然而,封装与之相反。

        可以这样想,画圆需要什么呢?需要圆的半径,而在人中找不到圆的半径这个属性。画圆是依靠圆的属性——半径,而画出的圆。所以画圆这个方法应该放在圆的类中。

eg2:人开门。是人开的门,还是门自己打开的呢?

        可以这样想,人只是给了门一个推力,门是自己关上的。“开门”和“关门”这两个动作是门的状态,故应该将其封装在门的类中。

  ps:理解封装的概念非常重要,大家一定要理解透彻再进入下一步的学习。

 3. private

        若类中的成员变量不加任何修饰符,那么它会被外界赋值,此时会有个风险:传递的是非法参数,为了避免这个风险,java提供了private修饰词,保证了成员变量的安全性

        使用了private的变量,不能被外界访问到。

        如果需要对成员变量赋值,那么在同样的类中写set 和 get 方法,并在set方法中,对传入的参数进行过滤。

 加入set()和get()方法:

 三、就近原则和this关键字

1.成员变量和局部变量

   成员变量:在类下的变量。

   局部变量:在方法下的变量。

2. 就近原则

    内容:谁离我近,我就选谁。

该例中,sout(age)中age离method()方法中的age更近,所以输出age=10。

3. this关键字

     应用:当成员变量和局部变量同名时,将它们区分开来

此时sout(age),age用this关键字修饰,所以此时age指的是成员变量的age,输出结果age=0。

四、构造方法

1.构造方法的格式

public class Student{
    修饰符 类名(参数){
        方法体;
    }
}

  例:

public class Student{
    public Student(){
        方法体;
    }
}

  特点:①方法名和类名相同,大小写也要一致。

             ②没有返回值类型,void也不行。

             ③没有具体的返回值(不能由return带回数据)

2.执行时机

    1)创建对象的时候由虚拟机调用,不能手动调用构造方法。

    2)每创建一次对象,就会调用一次构造方法。

3.类型

     1)无参构造

public class Student {
    int sno;
    String sname;

    //无参构造
    public Student(){

    }
}

     2)带参构造

public class Student {
    int sno;
    String sname;

    //有参构造

    public int getSno() {
        return sno;
    }

    public void setSno(int sno) {
        this.sno = sno;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }
}

4.构造方法注意事项

①构造方法的定义

   a.如果没有定义构造方法,系统将会给出一个默认的无参数构造方法

   b.如果定义了构造方法,系统将不再提供默认的构造方法。

②构造方法的重载

   a.带参构造方法和无参构造方法,两者方法名相同,但参数不同,这叫做构造方法的重载。

③推荐的使用方式

   a.无论是否使用,都手动书写无参构造方法,和带全部参数的构造方法。

五.三种情况的对象内存图

1. 一个对象的内存图

2. 两个对象的内存图

3. 两个引用指向同一个对象

 六、基本数据类型和引用数据类型

从内存的角度去解释:

1. 基本数据类型:数据值存储在自己的空间中

                   特点:赋值给其他变量,赋的是自己的真实值。

   内存图:

           

【注】a在内存栈中的值是10,将a赋值给b,b的值也是10。

2. 引用数据类型:数据值存储在其他空间中,自己空间存储的是地址值

   内存图:

 七、this的内存原理

 【注】

   1.main方法进栈;

   2.Student s1:栈中写入 s1,类型为Student;

   3.new Student():堆中开辟一个空间,里面有name和age两个属性,该空间的地址值为001;

   4.=:将空间的地址值001赋值给变量s1,s1可以通过该地址找到空间;

   5.s1.setName("竹小玲"):方法setName进栈,参数为name,内容是竹小玲;

                                             调用者:s1,内容001;

                                             this:s1,内容001。

       this.name=name 可看成是:001.name=name,故堆中的name值改成 竹小玲。

   6.赋值完毕,setName方法执行完毕,出栈;

   7.main方法出栈。

好了,今天的分享就到此结束啦

希望对你有帮助  (๑•̀ㅂ•́)و✧

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值