对象的行为
1.在对象的方法定义的时候,方法的声明部分(方法签名),不要写static
2.方法的调用仍然满足“方法调用栈”的特性,先进后出。
这里的栈指的是方法调用和结束的顺序是满足数据结构中“栈”的概念 --- 先进后出。
3. 方法结束的方式:
3-1、正常结束 -- 不管带不带返回值,只要是这个方法正常执行,直到遇到方法的
结束"}" 或 “return” 语句,都是正常结束的。
3-2、异常结束 -- 方法在执行过程中发生了问题,执行不下去了,被强制结束。
但不管是正常结束还是异常结束,方法的流程都是返回到方法调用处。
4. 方法的签名:
访问修饰符 可选修饰符 返回类型 方法名(参数列表)
访问修饰 --- 肯定要有,不写也有默认,默认不是public,是一种独立情况
返回类型 --- 可以返回任意数据类型: 基本数据类型、String、自定义类型、
数组类型均可。 返回也是返回“值”,只不过基本数据类型的值就是数据值本身,
而引用数据类型的值就是它的引用。
如果没有返回,那么也要写一个void
方法名
参数列表 -- 指的是形参列表,语法就是变量声明的语法
5. 重载方法 -- 一个类可以拥有多个同名的方法,要求是参数列表不同,
包括:参数个数、参数的类型、参数的顺序,跟参数名无关。
构造器 -- 构造方法 -- Constructor
基本知识点
构造器是在类定义当中除属性和行为之外的第三种内容。
引入:当我们产生对象的时候,书写了如下代码
new 类名();
其中new是一个关键字,而后面的"类名()"的形式 非常像再调用一个方法。
只是特殊之处在哪里呢?
1. 这个方法的名字就是类名;
2. 我们没有给这个方法传参。但是Scanner在new的时候是可以传参的。
因此 new 后面接的就是一个方法的调用指令。
这个方法就是“构造方法”。
构造方法的作用:
1、产生对象;
2、通过接受外部参数,对对象的属性进行初始化。
构造方法的语法特殊性:
1. 程序员可以在类当中不定义构造方法, 那么Java会给我们自动生成一个
“公共的无参的”构造方法,保证我们的基本使用;
2. 如果我们要自定义构造方法,那么需要注意
2-1、构造方法的名字必须和类名保持一致;
2-2、构造方法没有返回类型,连void都没有;
2-3、构造方法的访问修饰符和参数列表可以根据具体问题域具体设计。
3. 一旦自定义了构造方法,那么Java将不再给我们生成那个默认的“公共无参”构造;
构造方法的执行步骤:
一旦new了一个构造方法,它的执行步骤如下:
首先,在内存的堆当中划分了对象存放的空间,这个空间多大呢?
依赖于我们给这个类定义了多少内容。
然后,在该空间划分属性,并对属性进行初始化;
最后,执行程序员在构造方法当中所书写的代码。
其中,头两件事情是构造方法自己做的,我们无需用代码表达,
我们只需要书写第三个步骤的内容即可。
相关知识点 -- this()
this() -- 用来让一个构造方法可以共享另一个构造方法的代码
语法特殊性:
1、this()只能写在构造方法里面;
2、this()只能写在构造方法的第一句;这也导致一个构造只能共享一次其他构造的代码;
3、如果一个类里面有多个构造方法,this()是依赖于它的参数去匹配到底调用的是哪个构造方法;
4、构造方法不允许递归调用,不能用this()访问自己。
属性的访问器和修改器 -- getter/setter
所谓的public,指的是公共,那么就意味着在外部的使用者是可以在任意
位置对类的内容做任意操作的。
在实际问题域当中,对象身上的属性其实很少有public修饰的,因为用
public修饰不仅仅意味着外部的其他对象可以访问这个属性,同时也意味着
外部的其他对象可以任意修改属性。
通常只有常量属性,我们愿意设计为public,为什么?反正外部也修改不了,
只能获取值。
修改器(setter方法)和访问器(getter方法)
其作用就是为了能够让外部使用我们在类当中被设计为private的这些属性。
语法:
访问器
public 被访问的属性的类型get被访问的属性名(){
return 被访问的属性;
}
修改器
public void set被访问的属性名(属性类型 属性名){
this.属性名 = 属性名;
}
主要体现在以下三点:
1、我们能够通过为某个private属性 单独提供get方法 或 set方法,让
这个属性对外部而言是“只读”的,或“只写”的;这是把属性设计为public
做不到的。
2、如果我们直接把属性设置为public,外部可以对这个属性赋任意数据
值(只要满足类型匹配,但不能考虑有效性匹配),除非外部每一次赋值的时
候都去做判断;而如果设计为private属性,然后提供set方法,那么外部只
能通过set方法给该属性赋值,而我们可以在set内部通过代码进行有效性验证。
这样把验证有效数据的控制权掌握在一个地方,而不是散在每一次赋值的地方。
3、不直接暴露我们类内部对数据的存放形式,比如 学生类身上的生日属性,
在类内部其实设计为年月日三个int,但由于是私有的,外部看不到,只能看到
我统一提供的一个叫做getBirthday的方法,获取最终结果。
Java标准类
Java标准类,又名“Java Bean”,也被叫做“Bean类”。
JavaBean类是SUN公司在95年的“技术白皮书”当中提出,只有满足这些规范的
类才能称之为“JavaBean”。Java是一门工程学的编程语言,它最大的特点就是建
立庞大的项目,所以标准是很重要的。
所有的框架/工具,几乎都要求书写Java标准类,不满足要求的根本不能在这
些框架和工具当中运行起来。
Java标准类的规范如下:
1、必须提供公共无参构造;
2、必须为私有属性提供符合命名规范的get/set方法;
3、应该实现Serializable接口