[Java笔记]day10
day10
review
-
什么是重载?
两同一不同
:同一个类、相同方法名;参数列表不同 -
如何确定调用的方法?
方法名 --> 参数列表
-
Java方法中参数传递机制的具体实现?
- 基本数据类型:数据值
- 引用数据类型:地址值(地址值中包含变量的数据类型)
- return的使用
- 结束方法
- 针对有返回值的方法,还可以返回数据
- 内存结构
- 栈:局部变量
- 堆:new出来的结构(对象(非static的成员变量)、数组)
- 变量
- 局部变量:方法内、方法形参、构造器内、构造器形参、代码块内
- 成员变量:类的一对
{}
中
封装性
-
引入
当我们创建一个类后,我们可以通过
对象.属性
的方式对对对象进行赋值,这里的赋值操作要收到属性的数据类型
和存储范围
的制约,除此之外,没有其他条件的制约。但在实际问题中,我们往往要给属性赋值增加额外的限制条件,但这个条件不能再属性声明时体现,因此只能通过方法
进行限制条件的添加。同时我们需要避免用户再使用对象.属性
的方式进行赋值,则需要将属性声明为private
上述问题即体现了封装性。 -
封装性的体现之一
将类的属性
xxx
私有化(private
),同时提供公共(public
)的方法来获取(getXxx
)和设置(setXxx
)此属性的值。
其他封装性的体现
- 不对外暴露的私有方法
- 单例模式
- 权限修饰符
封装性的体现需要权限修饰符配合
- Java规定的四种权限(从小到大):
private
、缺省
、protected
、public
- 4种权限可以用来修饰类及类的内部结构
- 4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类
- 修饰类只能使用:
public
、缺省
-
总结
Java提供四种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时可见性的大小
构造器(Constructor)
- 作用
- 创建对象
- 初始化对象的属性
- 说明
- 如果没有显式地定义类的构造器,则系统默认提供一个空参的构造器
- 定义格式:
权限修饰符 类名(形参列表) {初始化语句}
(构造器与类同名) - 一个类中的多个构造器,蔽词构成重载
- 一旦显式地定义了类的构造器,系统就不再提供默认的空参构造器
- 一个类中,至少有一个构造器,这个构造器可以是默认的,也可以时自定义的
- 默认的空参构造器的权限修饰符与类的权限修饰符相同
属性的赋值过程
-
可以赋值的位置
①默认初始化
②显式初始化
③构造器初始化
④通过对象.方法
或对象.属性
赋值- 以上操作的先后顺序: ① --> ② --> ③ --> ④
- 其中①、②、③只执行一次
JavaBean
- JavaBean是一种Java语言写成的可重用组件
- 标准
- 类是公共的
- 有一个无参的公共的构造器
- 属性,且有对应的get、set方法
this
-
this可以用来修饰属性、方法、构造器
-
this修饰属性和方法/构造器时,可以理解为:
当前对象
或当前正在创建的对象
- 在类的方法/构造器中,可以使用
this.属性
或this.方法
来调用当前对象/正在创建的对象的属性和方法,但通常情况下我们选择省略this
- 特别地,当方法/构造器的形参和类的属性同名时,我们必须显式地使用
this.变量
的方式,表明此变量是属性
而非形参
- 在类的方法/构造器中,可以使用
-
this调用构造器
- 在类的构造器中,我们可以使用
this(形参列表)
的方式,调用本类中指定的其他
构造器 - 构造器不能用
this(形参列表)
的方式调用自己 - 如果一个类中有
n
个构造器,则最多有n-1
个构造器使用了this(形参列表)
,防止成环 -
this(形参列表)
必须声明在当前构造器的首行,换言之,构造器内部最多只能声明一次this(形参列表)
用来调用其他构造器
- 在类的构造器中,我们可以使用
package
- 为了更好的实现项目中的类的管理,提供**包(package)**的概念
- 使用
package
声明类或者接口所属的包,声明在源文件的首行 - 包名,属于
标识符
,要遵循标识符的命名规则和命名规范,并且要见名知意
- 每
.
一次代表一层文件目录
同一个包下,不能定义同名的类、接口;不同的包下可以.
import
- 在源文件中,显式地使用
import
结构指定包下类、接口 - 声明位置:声明在包的声明和类的声明之间
- 如果需要导入多个结构,则并列写出即可
- 可以使用
xxx.*
的方式表示可以导入xxx
包下的所有结构 - 如果使用的类或接口是
java.lang
包下的,则使用时无需导入,可以省略import
- 如果使用的类或接口时本包下定义的,则可以省略
import
结构 - 在源文件中,如果使用了不同包下的同名的类,则需要以
全类名
的方式显示 - 使用
xxx.*
的方式,表明可以调用xxx
包下的所有结构,但是对于xxx
的子包下的结构,在使用时仍需要显式地import
-
import.static
导入指定类或接口中的静态结构(属性或方法,import
的落脚点是类或者接口)