第二章、类和对象
对象
对象和类的关系:类是创建对象的蓝图或原型。我们可以定义一个类,对真实对象的状态和行为建模
说明:可以触碰的为物理对象(重量,三维尺度,体积);不存在上述三种逻辑的伪逻辑事务(创意,计划,电子文档)
JAVA语言有哪些特征:封装、集成、多态、并发
定义变量或返回值的类型时:字符串用String、数值用int、当所写的类想被其他类调用的时候就可以用public(修饰)
关系:关联(组合、聚合)、依赖(使用)、继承、泛化、实现
静态状态/动态行为
1、静态状态【属性】:
语法格式:访问级别修饰符 特性修饰符 数据类型 属性名称 = 初始值
[数据类型和属性名称是必须要有的]
命名规范:
大坨峰:首字母都大写
小驼峰:第一个字母全小写,第二个首字母大写
静态属性/常量:字母全大写,词与词之间用 _ 分割
2、动态行为【方法】
语法格式:
访问级别修饰符 特性修饰符 返回值类型 方法名称(形式参数列表) {
方法体}
属性
解释:对象数据的描述
1、语法格式:
[访问权限修饰符] [修饰符] 数据类型 属性名 [=初值];
static 或 static final修饰符 修饰属性
属性的命名首字母小写(小驼峰)
特殊属性:常量 和 类属性
常量:属性名如果多个单词组成,则全用大写,并且用 _ 分割
常量的修饰符用两个字符修饰【static final】
类属性:修饰符用static
初始值必须是字面量
例如:【3.14...., ‘A’】
2、静态特征:
1、外部特征:视觉、听觉、触觉、味觉、嗅觉
2、内部状态
3、组成结构
3、行为:功能、效果、职责
构造器
1、语法:
[访问权限修饰符] 类名(形式参数列表) {方法体}
类名必须和类的名称(文件名)同名
2、与方法的区别:
——无返回值,连void都没有
——名称:方法是由自己定义,方法名最好不跟类名一样;构造器和类同名,如果类是public,那么三名统一(方法名称、类名、文件名)
——作用不一样:方法是执行一段代码;构造器是用来创建对象并初始化属性
——修饰符:方法可以使用,包括 static、final、abstract;构造器则不能使用,包括 static、final、abstract
3、构造器间的差别:
无参构造器:只有在该类没有声明任何构造方法的时候,才是默认存在的
4、构造方法重载:
在一个类中,如果有多个同名但是不同参的方法则可使用方法重载
创建一个构造器的快捷方式:
第一部:ALT+SHIFT+S
第二部:点击 Generate Constructor using Fields...
5、方法分类:
1、静态方法:有static的为静态方法;类方法、属于类;
静态方法的调用:类.方法名称【直接使用类调用】
2、非静态方法:没有static的为非静态方法;实例方法、属于对象的;
非静态方法的调用:对象.方法名称【先new一个对象再调用】
在使用构造器需要初始值设定:shift + alt + s
方法
对象的行为;(可以做的事情)
1、语法:
【访问权限修饰符】【修饰符】返回值数据类型 方法名(形式参数){
执行语句;
return 返回值;
}
2、形式参数:
有参方法
无参方法
3、return:
return;直接结束方法
return+值;结束并返回值
4、特性修饰符:
static / static final
有static final则表示有返回值方法
5、返回值数据类型:
1、有返回值方法:静态方法,类方法,属于类;int,return【直接结束方法】
2、无返回值方法:非静态方法,实例方法,属于对象的;void, return+值【结束并返回值】
6、方法重载:
数量不同,类型不同,顺序不同,和返回值类型无关。
1、概念:
在一个JAVA类中,如果有多个同名但是不同参数的方法,该情形就被称之为方法重载
2、调用方法:
静态调用方法:类名.方法名
不可将功能完全不一样的方法进行重载!
原则:方法名相同、参数不同【数量不同、类型不同、顺序不同】同一作用域
方法重载跟方法的返回值类型没有任何关系。也就是说,只有返回值不同的方法不能构成重载
7、静态/非静态方法:
静态方法:使用static属于静态方法;属于类的
非静态方法:实例方法;属于对象的;只要没有使用static都是属于对象的
对象
1、构造方法:
调用无参数的构造方法:
类名 对象名 = new 该类的构造方法()
调用有参数的构造方法:
类名 对象名 = new 该类的构造方法(参数1,参数2)
2、调用:
调用属性:对象.方法
【赋值,取值】
调用方法:对象.方法
3、调试程序时用来查看各属性的值(打印):
第一步:SHIFT+ALT+S
第二步:Generate toString()...
块/初始化器
块在类中声明,类似一个没有方法声明的方块体
1、静态块:
类加载时被调用一次,仅一次,与是否创建对象无关
解释:永远被第一个执行;并且只执行一次;在第一次创建对象时就可执行
静态块属于静态成员
语法格式:
static{
//任何符号语法的java代码
}
2、实例块:
每次调用构造方法前自动调用
语法格式:
{
//任何符合语法的JAVA代码
}
实例块属于非静态成员
非静态成员可以共享静态成员
内部类/嵌套类
1、成员内部类:
成员内部类可以共享外部类的成员【外部的无法调用,但是内部可以调用外部的;例:报警器和房屋的塌陷关系】
调用的方法:要先建立一个外部的,然后在外部的基础上再构建一个内部的
例:OuterA.Inner inner=new OuterA().new Inner();
这里原本要调用Inner(),但是需要先构建OuterA()的这样的一个外部
相当于我需要一个内脏,但是前提是有这样的一个人的建立,不然那都是空想
2、静态内部类型:
调用是需要加父类(外部类)
子子孙孙全部要写进去,并且有关键词static
3、匿名内部类:
一大段代码直接 new ,继承实现,唯独没有名字
4、局部内部类:
仅在方法体内进行【在下面创建内部类】
new时调用一个类
5、其中既有内部类又有内部接口
6、内部类、内部接口[class、interface]
7、非静态成员[private],超出该类体就无法调用
类的声明
语法格式:
【访问权限修饰符】 【修饰符】class 类名{
类体
}
1、访问修饰符:
protected、private只能作为内部类,即只能在 public 或 default 的内部;即类体
public
protected
default【不写访问修饰符时默认 default ,即直接不写即可】
private
2、修饰符:
final
synchronized【在类中不能使用】
abstract
支持的基础概念
特征:多态、继承、封装
抽象、类、对象、实例、方法、重载