面向对象的特征:封装和隐藏
一、问题引入:菜鸟教程 Java封装性
二、封装性的体现:
封装性的体现:①我们将类的属性Xxx私有化(private),同时,提供公共的(public)方法来获取(getXxx)和设置(setXxx)此属性的值。②不对外暴露的私有的方法。③单例模式(将构造器私有化)④如果不希望类在包外被调用,可以将类设置成缺省
我们程序设计追求“高内聚,低耦合”:
1、高内聚:类的内部数据操作细节自己完成,不允许外部干涉;
2、低耦合:仅对外暴露少量的方法用于使用
三、四种权限修饰符:
1、Java规定的四种权限:
2、四种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类
3、具体的,4种权限都可以修饰类的内部结构:属性、方法、构造器、内部类
修饰类的话只能:缺省、public
封装性总结:Java提供了四种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性大小。
类的结构之三:构造器(构造方法、constructor)的使用
一、构造器的作用
1、创建对象
2、初始化对象的属性
二、说明
1、如果没有显示地定义构造器的话,则系统默认提供一个空参的构造方法
2、定义构造器的格式:权限修饰符 + 类名(形参列表){}
3、一个类中定义了多个构造器,彼此构成重载
4、一旦我们显示地定义了构造器之后,体统就不再提供空参的构造器
5、一个类中至少会有一个构造器
三、总结:属性赋值的先后顺序:①-②-③-④
①默认初始化
②显式初始化
③构造器中赋值
④通过"对象.方法"或“对象.属性"的方式,赋值
四、JavaBean是一种Java语言写成的可重用组件。
所谓JavaBean,是指符合如下标准的Java类:
>类是公共的
>有一个无参的公共的构造器
>有属性,且有对应的get.set方法
this关键字的使用:
一、this可以用来修饰:属性、方法、构造器
二、this修饰属性和方法:
this理解为:当前对象
1、在类的方法中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法,但是,通常情况下,我们都选择省略"this."。 特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。
2、在类的构造器中,我们可以使用"this.属性"或"this.方法"的方式,调用当前对象属性或方法,但是,通常情况下,我们都选择省略"this."。 特殊情况下,如果构造器的形参和类的属性同名时,我们必须显式的使用"this.变量"的方式,表明此变量是属性,而非形参。
三、this调用构造器
①我们在类的构造器中,可以显式的使用"this(形参列表)"方式,调用本类中指定的其他构造器
②构造器中不能通过"this(形参列表)"方式调用自己
③如果一个类中有n个构造器,则最多有n-1个构造器中使用了“this(形参列表)”
④规定:“this(形参列表)”必须声明在构造器首行
⑤构造器内部,最多只能声明一个“this(形参列表)”,来调用其他构造器
Package、Import关键字的使用:
一:Package:
1、为了更好地实现项目中类的管理,提供包的概念
2、使用Package声明或借口所属的包,声明在源文件首行
3、 包,属于标识符,遵循标识符的吗,命名规则,、规范(小写)、“见名知意”
4、每“.”点一次就代表一层文件目录
补充:在同一个包下面不能定义同名的接口、类;不同的包可以
二、Import:导入
1、在源文件中显示地使用import导入指定包下的类,接口
2、声明在包的声明和类的声明之间
3、如果需要导入多个结构,并列写出即可
4、可以使用“xxx.*”的方式,表示导入xxx包下的所有结构
5、如果使用的类或接口是java.lang包下定义的,则可以省略Import结构
6、如果使用的类或接口是本包下定义的类或者接口,也可以不用import
7、如果在源文件,使用了不同包下同名的类,必须至少有一个类需要以全类名的方式显示。
8、使用“xxx.*”的方式可以表面调用xxx包下的所有结构。但如果使用的是xxx子包下的结构,则仍需要显示地调用该包。
9、Import Static:导入指定包或接口下的静态结构。属性或者方法
import java.util.ArrayList;//表示单独Import导入的util包中的类
import java.util.*;//Import导入的util包中的所有结构
public class PackageImport {
public static void main(String[] args){
String info = Arrays.toString(new int[]{1,2,3});
ArrayList list = new ArrayList();
HashMap map = new HashMap();
}
}