Javaday06(封装、值传递、可变参数、递归、构造方法) 一、封装 二、对象实例化 三、属性调用 四、类的方法 五、方法的特点  六、Java中的参数只有值传递!!! 七、可变参数 八、递归调用 九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系) 十、构造方法 十一、构造方法重载  十二、this

      一个类该暴露什么,不该暴露什么,由类的设计者根据需求设计决定的。private属性用户不能直接访问,如果设计者提供相应的接口方法,那么用户可以通过该接口方法访问。

  封装使得对代码的修改更加容易,将代码分成了一个个相对独立的单元,对代码的访问控制更加严格,日后对代码的修改*度提高。

  能很好的使用别人的类,而不必关心其内部逻辑是如何实现的,让软件协同开发的难度大大降低。

  对象的状态并不能完全描述一个对象,每个对象都有一个唯一的身份。例如,在一个订单处理系统中,任何两个订单都存在着不同之处,即使所订购的货物完全相同

  一般情况下,对象的标识可以由内存地址确定(在非序列化等情况下),可以依据次确定对象的哈希值

二、对象实例化

  对象是典型的引用数据类型,在初始化的时候需要new运算符从堆中分配内存空间,语法:

    类名 引用名 = new 类名();

  使用已经定义好的类,创建该类对象的过程称作“实例化”。

  new是“为新建对象开辟内存空间”的运算符:它以类为模板,开辟内存空间并实例化一个对象,返回一个该对象的引用(即该对象所在的内存地址)。

  

  Java有一个垃圾回收机制,用来监视那些new创建的对象,如果该对象不再被引用,那么垃圾回收机制就会自动将其进行回收,释放内存空间,以便其他新对象的使用。

三、属性调用

  Java中类的对象被实例化之后,就可以访问其成员(属性,方法)。

  使用运算符(.)来访问成员,其语法是:

    对象名.成员名

    例如:student.age = 18;

四、类的方法

  成员方法是类中进行数据处理,实现相关功能的函数。

  方法决定了一个对象能够接受什么样的消息,方法的基本组成:  

      【访问控制】【方法修饰】 返回类型  方法名称(参数1,参数2,…) {

             …(statements;)    //方法体:方法的内容

       }

       返回类型可以是任意的Java数据类型,当一个方法不需要返回值时,返回类型为void

    Java中的方法只能作为类的一部分来创建

五、方法的特点

 定义方法可以将功能代码进行封装。

  便于该功能进行复用。

  方法只有被调用才会被执行。

  方法的出现提高代码的复用性。

  方法若没有返回值,则用关键字void表示,那么该方法中的return语句如果在最后一行可以省略不写。

  方法中可以调用方法,不可以在方法内部定义方法。

  定义方法时,方法的结果应返回给调用者,交由调用者来处理

  return的用法包括两方面:

    •   代表“已经做完,离开此方法”
    •   如果此方法产生了一个值,这个值要放在return语句后面
    •   可以定义方法返回任意想要的类型,如果不想返回任何值,可以指示此方法返回void(空)

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

 六、Java中的参数只有值传递!!!

  传统印象中基本数据类型和字符串传递时是值传递,其他对象在传参时是引用传递的思想是错误的

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

            Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

  

      那么如果参数是基本数据类型会是什么情况呢?  参数是字符串类型又该是怎样的呢?

   由于基本类型都在自己独立的空间中操作,所以实参上不会因为形参的变化而变化。字符串类型是不可变的,所以在形参内都会创建一个新的字符串,与实参不同,所以形参的变化不会影响到实参的变化。

七、可变参数

  Java1.5之后添加了可变参数特性,适用于参数个数不确定,类型确定的情况。

  Java可变参数:

    Java把可变参数当做数组处理,必须置于最后一位,参数列表中只支持有一个可变参数。

   格式:

    Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

八、递归调用

    在程序设计过程中,方法直接或间接调用自身的方法叫做递归调用。

    递归要点:

      每次递归调用都要使问题简单化。

      当递归到达某一种程度后能够得到一个已知解以结束递归调用。

       Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

         Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)

   在一个类中,允许出现多个方法名称相同的方法,参数列表不相同(个数不同,类型不同,顺序不同)

    参数类型不同:

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

    参数个数不同

Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

    顺序不同:

Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

    以下不构成方法的重载:

    Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

       Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

十、构造方法

  在创建对象的同时,对对象进行初始化的方法叫做构造方法。

  

    【访问权限修饰符】类名(参数列表){

      方法体

    } 

  特点:

    1.构造方法与类名相同,注意:普通方法也可以和类名一致,但是不推荐

    2.没有返回值,不能写void

    3.主要作用就是完成新建对象的初始化工作。

    4.一般不推荐显示直接调用,而是使用new来调用,(显示调用必须使用this或者super,不能直接使用方法名调用!!)

    5.创建一个类的对象时,系统自动调用该类的构造方法,为新建对象进行初始化操作。

    6.每个对象在创建时都必须执行构造方法,而且只能执行一次

    7.如果构造方法调用失败,那么对象创建也是失败的

    8.如果没有写构造方法时,系统会默认添加一个无参构造方法

    9.如果写了有参构造方法,那么系统默认的无参构造方法就会失效,需要自己手动添加

             Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

    普通方法可以调用多次,但是构造方法只会在创建对象的时候由jvm来调用,不能手动调用。

           Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

十一、构造方法重载

  构造方法是一种特殊的构造方法,也可以进行重载。

  构造方法的重载是指同一个类中存在着若干个具有不同参数列表的构造方法。根据new创建对象时的参数个数来判别使用哪一个构造方法创建对象。

    

     Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

 十二、this

  this作为自身的引用(指向调用该方法的对象自身)。

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

   对于构造方法而言,this还有一个特殊作用:在构造方法中调用本类的其他构造方法。如果出现这种情况,那么构造方法中的this必须是第一条语句。

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

       Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

    

    将this用于传递本对象引用句柄的用法也很常见

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this

   内存分析:

  Javaday06(封装、值传递、可变参数、递归、构造方法)
一、封装
二、对象实例化
三、属性调用
四、类的方法
五、方法的特点
 六、Java中的参数只有值传递!!!
七、可变参数
八、递归调用
九、方法重载(方法重载只与参数列表和方法名有关,与其他均无关系)
十、构造方法
十一、构造方法重载
 十二、this