零基础Java:第七讲(类的方法)

261 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

类的成员之二:方法

  • 类的成员之二:方法

    • 语法格式

      • 说明

        • 修饰符:public、private、protected等;
        • 返回类型:return语句传递返回值。没有返回类型:void。
    • 举例
    • 对象的创建和使用

      • 如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。
    • 什么是 方法(函数)?

      • 方法是类或对象行为特征的抽象,也称为函数;
      • Java里的方法不能独立存在,所有的方法必须定义在类里。
    • 方法的调用

      • 方法只有被调用才会被执行
      • 方法调用的过程
      • 注意

        • 没有具体返回值的情况,返回类型用关键字void表示,那么该函数中的return如果在最后一行可以不写;
        • 定义方法时,方法的结果应该返回给调用者,交由调用者处理;
        • 方法中只能调用方法,不能在方法内部定义方法;
        • 同一个类中,所有的方法可以直接相互调用,不用new去实例化对象。
    • 对象的产生

      • 当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型,如上面的Person和数组。
      • 匿名对象

        • 不定义对象的句柄,直接调用对象的方法称为匿名对象。如:new Person().shout();\
        • 使用情况:

          • 对一个对象只需要进行一次方法的调用
          • 经常将匿名对象作为实参传递给一个方法调用
    • 提示

      • 类的访问机制

        • 在一个类中的访问机制:类中的方法直接访问类中的成员变量。(例外:static方法访问非static的成员变量,编译不通过)
        • 在不同的类中的访问机制:先创建一个要访问类的对象,再用对象访问类中定义的成员\
    • 面向对象思想“落地”法则(一)

      • 关注于类的设计,即设计类的成员:属性、方法
      • 类的实例化,即创建类的对象(比如:Person p=new Person();)
      • 通过“对象.属性”、“对象.方法”执行
    • 方法的重载(overload)

      • 概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
      • 练习1
      • 练习2
    • 体会可变个数的形参 在不知道想要给方法传递多少个参数(姓名、年龄、地址、电话……)时使用。

      • 下面采用数组形参来定义方法。注:如果没有参数,就要定义一个空数组或者是null
      • 采用可变个数形参来定义方法。注:如果没有参数,可以不填;...代表可以传递0到多个参数。
      • 说明:

        • 可变形参:方法参数部分指定类型的参数个数是可变多个
        • 声明方式:方法名(参数的类型名...参数名)
        • 可变参数方法的使用与方法参数部分使用数组是一致的
        • 方法的参数部分有可变形参,需要放在参数声明的最后,例如(int a,String... args),String... args必须放最后
    • 方法的参数传递

      • 方法,必须有其类或者对象调用才有意义

        • 形参:方法声明的参数
        • 实参:方法调用时实际传给形参的参数值
      • java的实参值如何传入方法

        • java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响
        • 方法的参数传递之基本数据类型 总之:基本数据类型在参数传递过程中,就是把实参的值复制到形参上
        • 方法的参数传递之引用对象 在这个例子中,ds和ds1操作实际上是同一个对象,这个对象就是在堆内存中地址是BE2500上保存的对象。
      • 总结

        • 如果方法的形参是基本数据类型,那么实参(实际的数据)向形参传递参数时,就是直接传递值,把实参的值复制给形参;
        • 如果方法的形参是对象,那么实参(实际的对象)向形参传递参数时,这个值是实参在栈内存中的值,也就是引用对象在堆内存中的地址;
        • 基本数据类型都是保存在栈内存中,引用对象在栈内存中保存的是引用对象的地址,那么方法的参数传递是传递值(是变量在栈内存中的值)。
    • 软件包

      • 概念

        • 管理大型软件系统:将语义近似的类组织到包中;
        • 解决类名冲突问题;
        • 类似于文件夹概念,包可以包含类和子包。
      • 关键字——package

        • package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包;
        • 用“.”来指明包的层次;例如:com包下面的cn包里的test包:com.cn.test
        • 包通常用小写单词,类首字母通常大写。
      • 关键字——import

        • 为使用定义在不同包中的java类,需用import语句来引入指定包层次下所需的类或全部类(.*),import语句告诉编译器到哪里去寻找类。
        • 语法格式:import 包名[.子包名].<类名|*>

          • 方式一
          • 方式二
          • 方式三
      • JDK中主要包

        • java.lang——包含一些java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能
        • java.net——包含执行与网络相关的操作的类和接口
        • java.io——包含能提供多种输入/输出功能的类
        • java.util——包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
        • java.text——包含一些java格式化相关的类
        • java.sql——包含了java进行jdbc数据库编程的相关类/接口
        • java.awt——包含了构成抽象窗口工具集(adstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)
        • java.applet——包含applet运行所需的一些类
      • 注意:

        • 如果是调用同一个包下面不同类,import可以省略
    • 面向对象特征之一:封装和隐藏

      • 使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据错误、混乱或安全性问题。
      • 信息的封装和隐藏

        • java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()方法实现对该属性的操作,以实现以下目的:\

          • 隐藏一个类中不需要对外提供的实现细节;
          • 使用者只能通过事先制定好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
          • 便于修改,增强代码的可维护性。
    • 四种访问权限修饰符

      • Java权限修饰符public、protected、private置于类的成员(属性和方法)定义前,用来限定对象对该类成员的访问权限。
      • 对于class的权限修饰只可以用public和default(缺省);

        • public类可以在任意地方访问
        • default类只可以被同一个包内部的类访问
    • 练习