进阶段学习的主要是类的特性及构成,类是一种数据类型!
类的构成:
1.为了简便,以后对“自定义新的数据类型” -> "定义类"
2.详细研究如何定义一个类。
2.1 一个类由三部分组成。这三个部分并不是全部必须的。
在编写类之前,要先设计类:数据(用成员变量来表示),和对这些数据的操作(就会用成员方法来表示)。
class 类名{
//1.成员变量
//3.构造器(构造方法) -> 其中一个主要作用,是对成员变量进行初始化
//2.成员方法->用来操作本类中的成员变量/或者象一个普通的方法(函数)一样
}
2.2 成员变量。
也叫“字段”。它的定义和一般变量是一样的。
成员变量也叫“实例变量”,如果不明确赋值的话,会自带一个默认值。
成员变量:遵循标识符命名规则;驼峰命名法,首字母小写;望文生义
2.3 成员方法。
语法格式:
void|数据类型 方法名称(参数列表){
//方法体
}
2.3.1 方法命名:遵循标识符的命名规则;驼峰命名法,首字母小写;望文生义。方法的命名:动词+名词
2.3.2 方法名称后面,必须紧跟一对小括号。小括号内,可以有参数(有1个或多个。如果有多个的话,称为参数列表,用逗号分隔),也可以没有参数。
2.3.3 方法名称前,要指定该方法返回数据类型(即可以是原始数据类型,也可以是自定义的数据类型,也可以数组)。
如果该方法的代码调用后,不要求有返回值,那么,必须使用void关键字指明。
如果该方法的代码调用后,有返回值,那么,在方法体内(花括号内),必须要有"return 返回数据"语句,并且返回数据的类型,要和方法名前指定的数据类型保持一致。
2.3.4 对方法的调用:通过方法名称(后跟小括号)的方式调用。
2.3.4 方法声明中的参数,为局部变量。局部变量和成员变量的区别:
局部变量的生命周期(变量的作用域),仅限于从它声明开始,到所在方法结束。
2.3.5 参数传递中的“值传递”和“引用传递”
2.3.6 当一个类中,有多个同名的方法、但方法签名不同时,称为“方法重载”。
--什么是“方法签名”? 方法签名=方法名称+参数数量和类型/顺序
--这种情况,又叫“动态方法调用”
2.3.7 可变参数:参数的数量是可变的。
1)可变参数,必须是位于参数列表中最后一个。
2)可变数量:0、1或多个。
3)可变参数,是作为数组进行处理的。
2.4 变量的作用域
2.4.1 在一个类中,有三个地方可以定义变量(三种变量):类的字段部分(成员变量)、方法的参数变量(局部变量)、方法内声明的变量(局部变量)
2.4.2 如果局部变量和成员变量同名的情况下,局部变量屏蔽成员变量
2.4.3 局部变量,它的作用域范围,是从声明它的地方开始,到方法的结束
2.4.4 成员变量定义的位置不关紧,它的作用域范围总是在整个类内部
2.4.5 所以,好的做法是,尽可能的不要让局部变量与成员变量同名。
2.5 this关键字
但是,有的时候,局部变量又最好是和成员变量同名。
在局部变量屏蔽成员变量的情况下,如果想要绕开这种屏蔽,能访问到成员变量,需要使用this关键字。
2.6 属性
实际上,属性不是字段。只有提供了get方法的字段,才称为属性。
2.7 构造器
2.7.1 构造器,也叫构造方法。其名称必须和类名相同,后跟方法的小括号,再后跟方法体花括号
2.7.2 构造方法也可以重载
2.7.3 构造器的主要作用:对成员变量进行初始化、加载资源、......
2.7.4 构造器的使用:在创建类的实例对象时,使用new运行符,调用构造器,来创建实例,申请空间
通过构造实例对象时,传递的构造器参数,来对成员变量进行初始化
2.7.5 通过this关键字调用同一对象中的其它构造器
2.7.6 如果在定义类时,不明确指定一个构造器,那么编译器在编译时,会自动地添加一个空的默认的构造器。
但是,一旦你指定了一个构造器,那么,编译器就不会再插入默认构造器了。