面向对象讲解1

目录

 

构造方法

构造方法和set方法的比较

 创建对象的详细过程

 静态

静态变量的特点

静态方法的注意事项

静态变量和非静态变量的比较     

静态代码块


构造方法

 概述

  1:   用于给成员变量赋值的方法

  2:格式

       public 类名(形式参数){    

        给成员变量赋值       

} 

3:说明

  1:构造函数没有返回值类型,连void也没有。

   2:构造函数的方法名必须和类名一样,连大小写都要一样。

 4:调用的情况

    1:在创建对象的时候,由虚拟机自动调用,自动为创建的对象进行赋值,一个对象只能调用一次。

     2:不能显示的调用构造方法,否则会编译错误。

  5:注意方法

    1:如果没有手动定义任何的构造方法,系统会默认提供一个空参构造

    2:一旦手动提供了任何构造方法,系统就不在提供任意的构造方法。

   3:一般来说,需要手动提供有参和空参构造,形成构造方法的重载:

       特此说明:方法的重载:是指具有一类相同功能的方法。重载的特点:必须在同一类中,方法名性相同,与方法的返回值类型无关,对于形参:形参的个数,形参的类型,形参的顺序需要不一样。

构造方法和set方法的比较

   1:相同点:都是给成员变量赋值

   2:不同点:

      1:调用的时机:构造方法是创建对象时由jvm自动调用的;set方法是对象创建完成之后调用的

       2:调用的主体:构造方法是jvm自动调用的;set方法是对象名手动调用的。

       3:调用次数:构造方法在对象的初始化时只能有jvm自动调用一次;set方法可以调用多次。

 创建对象的详细过程

    1:成员变量的初始化:

         默认的初始化赋值:创建一个对象后,由构造函数对所创的对象进行赋值,此时构造函数内部会对对象进行赋值。

         显示的初始化赋值:调用set方法对对象进行赋值

         构造方法初始化赋值:调用相对应的构造函数,在参数里边对对象进行赋值。

    2:详细过程

         将要创建的对象所属的类型,加载到方法区

         在栈内存中,创建该对象的引用,用来存储该类对象再堆中的地址

         在堆中,开辟空间,创建对象。(注意所有的new操作都会在内存中开辟一块空间)

         默认初始化

         显示初始化

         构造方法初始化

         将对象的地址赋值给栈内训的引用

 静态

     概述:

           1:没有静态的情况:

                  相同的数据,需要在每个对象中都存储一次,浪费内存空间;将来不好维护(每个对象都需要修改)

            2:有静态的情况:

                  将相同的数据,存储在这个类的字节码对象中的静态区,可以被所有类对象共享,节省了内存空间,将来也好维护(只需要修改一次)

             3:静态变量的解释:

                  非静态变量,随着对象的不同,可以有不同的变量值,因此成为动态的。

                  静态变量,随着对象的不同,无法不同的变量值,认为是静止不变的,所以称为讲台变量.

静态变量的特点

    1:使用static关键字

          既可以修饰成员变量,也可以修饰成员方法,也可以修饰成员内部类

     2:随着类的加载而加载

          加载:在内存中华开辟空间,并且赋值

     3:优先于对象而存在

     4:被该类所有的对象共享

     5:可以使用类名直接访问

            类名.静态变量名

            类名.静态方法名

静态方法的注意事项

    1:静态方法不能访问非静态的变量

     静态方法,可以在创建对象之前,直接被类名调用;非静态变量,在对象创建之后才存在;如果静态方法可以访问非静态的变量,就是相当于在对象创建之前,就能访问对象创建之后的数据

    2:静态方法不能访问非静态方法

     非静态方法可以访问非静态变量,也可以访问静态变量。如果静态方法可以访问非静态变量的关键字,相当于在创建对象之前就要访问创建对象之后的数据了。

   3:静态方法不访问this,super等关键字

     this,super都表示对象创建之后某部分数据的引用,如果静态方法可以访问this,super等关键字,相当于在对象创建之前就要访问对象创建之后的数据。

   总结:总之,在一个类中,在静态方法里边,不能调用该类的非静态方法,不能调用该类的非静态成员变量。在非静态方法中,可以调用该类的静态方法,也可以调用该类的静态常量。

静态变量和非静态变量的比较     

   1:相同点    都是成员变量

   2:不同点

       概念不同:

                   静态变量属于类,成为类变量

                   非静态变量属于对象,称为对象变量,实例变量

       内存位置不同:

                    静态变量属于类,和类的字节码在一起,在方法区的类的字节码中的静态区

                    非静态变量属于对象,和对象在一起,在堆内存的对象中

         声明周期不同:

                     静态变量属于类的加载而加载,随着类的消失而消失

                      非静态变量属于对象,随着对象的创建而存在,随着对象被当做垃圾回收而消失

          代码访问的方式不同:

                      静态变量既可以使用对象名访问,也可直接使用类名访问。

                       非静态变量只能使用对象名访问

静态代码块

     1:用于给静态成员变量赋值,用于执行只执行一次的代码

     2:位置 

             类中方法外

     3:格式

          static{

           各种语句;         

           }

      4:执行时机:

      随着类的加载而执行,由于类只加载一次,所以也只能执行一次。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值