类是由一群具有共性属性和方法的群体的抽象,它定义了对象将会有怎样的特征(属性)和行为(方法)。对象是由一组属性值和方法构成,是一个具体的实例。
一个类给出它的全部对象的一个统一的定义,而它的每个对象则是符合这种定义的一个实体。
类是对象的抽象,对象是类的具体实现。
类的创建
class是关键字,用于声明自定义类型
注意类名首字母大写
格式:
访问修饰符类型 class 类名{
数据类型 属性名1;
数据类型 属性名2;
返回值类型 方法名(){
方法体
}
}
对象的创建与使用
类名 对象名=new 类名(); //new为关键字,用于创建对象
对象名.属性名=值; //属性的赋值
对象名.方法名(); //调用对象的方法(若有返回值要被对应返回值类型接受)
对象数组
类名[ ] 数组名=new 类名[长度]; //创建对象数组,类型为引用类型,默认值为null,必须被初始化
数组名[下标]=new 类名(); //对象初始化 。需要先创建对象,才能访问对象属性
数组名[下标].属性=值; //给对象属性赋值
对象数组和创建数组相似,数据类型换成了类名
对象数组存储的就是这个类的对象,每个数组的元素就是一个对象
方法的定义
无返回值:
访问修饰符类型 void 方法名(){
方法体 //返回类型为void时没有返回值
}
有返回值:
访问修饰符类型 数据类型 方法名(){
方法体 //若不是void,表明有返回值,必须有return语句
return 返回值 //return的目的要把返回值类型对应的值返回到方法外部
}
有返回值的方法在调用时必须被对应返回值类型接受,否则相当于没有返回值
比方说Scanner中,数据类型 变量名=对象名.方法名();
方法的调用
方法之间允许相互调用,不需要知道方法的具体实现,实现重用,提高效率
一个类中的方法a( )要调用同一个类中的方法b( ),直接调用
一个类中的方法a( )要调用另一个类中的方法b( ),先创建类对象,然后使用“.”调用
成员变量与局部变量
直接在类中定义的变量叫做成员变量,它定义在方法的外部。它可以在声明时赋初始值。
局部变量就是定义在方法中的变量。
变量的类型分为:基本数据类型和引用数据类型
基本数据类型传递的是值,在方法中改变值不会影响外部的变量
引用数据类型传递的是地址,在方法中改变地址内的值,会影响到外部的变量
成员方法
带参数的方法
在方法名后面的小括号中有变量的就是带参方法,无变量就是无参方法
格式:
返回值类型 方法名(参数类型1 参数名1,参数类型2 参数名2){
方法体
}
对象名.方法名( 参数1,参数2)
调用时:形参和实参的类型一致,个数一致,顺序一致 ,名称可不一致
方法重载
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型或者个数
特点:在同一个类中、方法名相同、参数的列表不同(类型、数量、顺序)
方法的返回值不能作为判断方法之间是否构成重载的依据
使用:按需选择即可
优点:方法名相同,不需要编写多个名称,简化了类调用方法的代码
方法体可以根据需要来选择对应的代码,开发者根据参数列表的不同来区分方法
构造方法
当用类创建一个对象时会自动调用该类的构造方法,构造方法分为默认构造方法和带参数的构造方法,作用是创建对象(对象初始化)。
一旦有自定义构造方法,系统不再默认提供默认构造方法。所以一般情况下,如果自定义了有参构造,建议把无参构造提供出来
默认构造方法
public 类名(){
方法体
}
自定义构造方法
类定义码
pbulic 类名(参数类型 形参){
方法体 //可以在对象初始化的同时进行属性赋值
}
调用代码
类名 对象名=new 类名(实参)
构造方法重载
构造方法同样也可以重载,即在同一个类中可以定义多个重载的构造方法
this 关键字
1.使用this调用成员变量,解决成员变量和局部变量的同名冲突
2.使用this调用成员方法
this其实可以省略,因为同一个类下的方法可以直接调用
3.使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法的第一句
格式:this(实参1,实参2),注意参数类型,个数和顺序保持一致