本文已参与「新人创作礼」活动,一起开启掘金创作之路。
类的成员之二:方法
-
类的成员之二:方法
-
语法格式
-
说明
- 修饰符:public、private、protected等;
- 返回类型:return语句传递返回值。没有返回类型:void。
-
- 举例
-
对象的创建和使用
- 如果创建了一个类的多个对象,对于类中定义的属性,每个对象都拥有各自的一套副本,且互不干扰。
-
什么是 方法(函数)?
- 方法是类或对象行为特征的抽象,也称为函数;
- Java里的方法不能独立存在,所有的方法必须定义在类里。
-
方法的调用
- 方法只有被调用才会被执行
- 方法调用的过程
-
注意
- 没有具体返回值的情况,返回类型用关键字void表示,那么该函数中的return如果在最后一行可以不写;
- 定义方法时,方法的结果应该返回给调用者,交由调用者处理;
- 方法中只能调用方法,不能在方法内部定义方法;
- 同一个类中,所有的方法可以直接相互调用,不用new去实例化对象。
-
对象的产生
- 当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型,如上面的Person和数组。
-
匿名对象
- 不定义对象的句柄,直接调用对象的方法称为匿名对象。如:new Person().shout();\
-
使用情况:
- 对一个对象只需要进行一次方法的调用
- 经常将匿名对象作为实参传递给一个方法调用
- 当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值。除了基本数据类型之外的变量类型都是引用类型,如上面的Person和数组。
-
提示
-
类的访问机制
- 在一个类中的访问机制:类中的方法直接访问类中的成员变量。(例外:static方法访问非static的成员变量,编译不通过)
- 在不同的类中的访问机制:先创建一个要访问类的对象,再用对象访问类中定义的成员\
-
-
面向对象思想“落地”法则(一)
- 关注于类的设计,即设计类的成员:属性、方法
- 类的实例化,即创建类的对象(比如:Person p=new Person();)
- 通过“对象.属性”、“对象.方法”执行
-
方法的重载(overload)
- 概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
- 练习1
- 练习2
- 概念:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
-
体会可变个数的形参 在不知道想要给方法传递多少个参数(姓名、年龄、地址、电话……)时使用。
- 下面采用数组形参来定义方法。注:如果没有参数,就要定义一个空数组或者是null
- 采用可变个数形参来定义方法。注:如果没有参数,可以不填;...代表可以传递0到多个参数。
-
说明:
- 可变形参:方法参数部分指定类型的参数个数是可变多个
- 声明方式:方法名(参数的类型名...参数名)
- 可变参数方法的使用与方法参数部分使用数组是一致的
- 方法的参数部分有可变形参,需要放在参数声明的最后,例如(int a,String... args),String... args必须放最后
- 下面采用数组形参来定义方法。注:如果没有参数,就要定义一个空数组或者是null
-
方法的参数传递
-
方法,必须有其类或者对象调用才有意义
- 形参:方法声明的参数
- 实参:方法调用时实际传给形参的参数值
-
java的实参值如何传入方法
- java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响
- 方法的参数传递之基本数据类型
总之:基本数据类型在参数传递过程中,就是把实参的值复制到形参上
- 方法的参数传递之引用对象
在这个例子中,ds和ds1操作实际上是同一个对象,这个对象就是在堆内存中地址是BE2500上保存的对象。
- java里方法的参数传递方式只有一种:值传递。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响
-
总结
- 如果方法的形参是基本数据类型,那么实参(实际的数据)向形参传递参数时,就是直接传递值,把实参的值复制给形参;
- 如果方法的形参是对象,那么实参(实际的对象)向形参传递参数时,这个值是实参在栈内存中的值,也就是引用对象在堆内存中的地址;
- 基本数据类型都是保存在栈内存中,引用对象在栈内存中保存的是引用对象的地址,那么方法的参数传递是传递值(是变量在栈内存中的值)。
-
-
软件包
-
概念
- 管理大型软件系统:将语义近似的类组织到包中;
- 解决类名冲突问题;
- 类似于文件夹概念,包可以包含类和子包。
-
关键字——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类只可以被同一个包内部的类访问
- Java权限修饰符public、protected、private置于类的成员(属性和方法)定义前,用来限定对象对该类成员的访问权限。
- 练习
-