1、昨日复习
- 什么是方法的重载?
“两同一不同”:同一个类、相同方法名;参数列表不同。
如何调用确定的方法:方法名—->参数列表
2. 说明Java方法中的参数传递机制的具体体现?
基本数据类型:数据值
引用数据类型:地址值 (含变量的数据类型)
Person p1 = new Person(); eat();age
User u1 = p1;//编译错误 (逆向思维、反证法)
u1.eat() u1.age
3. 成员变量和局部变量在声明的位置上、是否有默认初始化值上、是否能有权限修饰符修饰上、内存分配的位置上有何不同?
4. 谈谈return关键字的使用
①结束方法 ②针对于有返回值的方法,return + 返回数据
5. 提供如下代码的内存解析
1. 内存结构:栈(局部变量)、堆(new出来的结构:对象(非static成员变量)、数组)
2. 变量:成员变量 vs 局部变量(方法内、方法形参、构造器内、构造器形参、代码块内)2、面向对象特征之一:封装和隐藏
我们程序设计追求“高内聚,低耦合”。
高内聚 :类的内部数据操作细节自己完成,不允许外部干涉;
低耦合 :仅对外暴露少量的方法用于使用。
隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
隐藏一个类中不需要对外提供的实现细节;
使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;
便于修改,增强代码的可维护性;
封装性的体现:
1、如上
2、不对外暴露的私有的方法
3、单例模式
1、java规定的四种权限:
2、四种权限可以修饰类及类的内部结构:属性、方法、构造器、内部类。
修饰类只能用public或缺省
相同包中类不能同名
3、类的成员之三:构造器(构造方法)constructors
构造器的作用:创建对象;给对象进行初始化
语法格式:
修饰符 类名 (参数列表) {
初始化语句;
}
说明:
1、如果没有显示的定义类的构造器的话,则系统默认提供一个空参的构造器
2、定义构造器的格式:如上。
3、一个类中定义的多个构造器,彼此构成重载
4、一旦显式定义了构造器,则系统不再提供默认构造器
5、一个类中,至少有一个构造器
总结:属性赋值的先后顺序
1、默认初始化
2、显式初始化
3、构造器中赋值
4、通过 对象.方法 或 对象.属性 的方式,赋值
以上操作的先后顺序:1—-2—-3—-4
4、拓展知识:JavaBean
JavaBean是一种Java语言写成的可重用组件。所谓javaBean,是指符合如下标准的Java类:
类是公共的
有一个无参的公共的构造器
有属性,且有对应的get、set方法
默认构造器的权限修饰符与类的权限修饰符相同
5、拓展知识:UML类图
6、关键字—this
this关键字的使用:
1、this可以用来修饰:属性、方法、构造器
2、this修饰属性、方法:
this理解为:当前对象
2.1 在类的方法中,我们可以使用“this.属性”或“this.方法”的方式,调用当前对象属性或方法,但是,通常情况下,我们都选择省略“this.”。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用“this.变量”的方式,表明此变量是属性,而非形参。
2.2 在类的构造器中,我们可以使用“this.属性”或“this.方法”的方式,调用当前正在创建的对象属性或方法,但是,通常情况下,我们都选择省略“this.”。特殊情况下,如果构造器的形参和类的属性同名时,我们必须显式的使用“this.变量”的方式,表明此变量是属性,而非形参。
3、this调用构造器
我们在类的构造器中,可以显式的使用“this.(形参列表)”方式,调用本类中指定的其他构造器
构造器中不能通过“this(形参列表)”方式调用自己
如果一个类中有n个构造器,则最多有n-1构造器中使用了“this.(形参列表)”
规定:“this(形参列表)”必须声明在当前构造器的首行
构造器内部:最多只能声明一个”this(形参列表)”
7、关键字—package
1、为了更好的实现项目中类的管理,提供包的概念
2、使用package声明类或接口所属的包,声明在源文件的首行
3、包属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”
4、每“.”一次,就代表一层文件目录。
补充:同一个包下,不能命名同名的类和接口。
不同的包下,可以命名同名的类和接口。
8、关键字—import
- 在源文件中使用import显式的导入指定包下的类或接口
2. 声明在包的声明和类的声明之间。
3. 如果需要导入多个类或接口,那么就并列显式多个import语句即可
4. 举例:可以使用java.util.*的方式,一次性导入util包下所有的类或接口。
5. 如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。
6. 如果在代码中使用不同包下的同名的类。那么就需要使用类的全类名的方式指明调用的是哪个类。
7. 如果已经导入java.a包下的类。那么如果需要使用a包的子包下的类的话,仍然需要导入。
8. import static组合的使用:调用指定类或接口下的静态的属性或方法