文章目录
面向对象的两个要素
- 类:对于一类事物的描述,是抽象的、概念上的定义
- 对象,是实际存在的该类事物的每个个体,也称作实例(instance)
面向对象的重点是类的设计。设计类就是设计类的成员。
类的结构
常见类的成员有:
- 属性:类中的成员变量
- 行为:类中的成员方法
对象属于引用类型
对象和数组一样是引用类型:如果Person p1 = new Person;
Person p2 = p1;那么改变p2的属性会直接改变p1和属性。
对象的内存解析
- 堆的唯一目的就是存放对象实例,几乎所有的对象实例都在堆这里分配内存。
- 方法区主要存储已被虚拟机加载的类信息,常量,静态变量和编译后的代码等数据。
类的属性与局部变量对比
相同点:
- 定义变量的格式相同
- 先声明后使用
- 变量都有其对应的作用域
不同点:
- 声明的位置不同:
- 局部变量:声明在方法内、方法形参、代码块内、构造器形参、构造器内部的变量。
- 类的属性:声明在类的
{}
内的称作类的属性
- 关于权限修饰符的不同:
- 类的属性: 声明时可以使用权限修饰符指名类的权限:如public,default,protected,private等。
- 关于默认值的不同:
- 局部变量: 没有默认值,调用时必须初始化。
- 类的属性: 默认初始值和数组的初始值一致
- 在内存中加载的位置不同:
- 局部变量:加载到栈空间
- 类的属性:加载到堆空间(非static)
数组类型数组
声明:
Student[] stuArray = new Student[10];
stuArray[0] = new Student();
匿名对象
- 匿名对象:重建的对象没有显式的赋给一个变量名。
- 特征:匿名对象只能调用一次。
- 使用:可以在一个方法中调用时作为形参传入:如 phoneMall.show(new Phone());
new Phone.sendEmail()
方法重载(function overloading)
- 定义:在同一个类中,允许存在一个以上的同名方法,只要同名参数的个数或者参数类型不同即可。
传入多个参数
- 定义方式:
public void show(String ... strs){}
。strs其实相当于一个数组 - 注意:该方式与
show(String[ ] strs){}
不能共存,但是可以与show(String strs)
共存
值传递机制
- 如果参数是基本数据类型,此时实参赋给形参的是实参真是存储的数据值。
- 如果参数是基本数据类型,此时实参赋给形参的是实参存储数据的地址值。
注意点
int[ ] arr = new int[ ]{1,2,3};
sout(arr); //输出地址值
char[ ] arr1 = new char[]{'a','b'};
sout(arr1); // 输出ab char[]直接输出的话是输出字符串。
对象的封装和隐藏
- 为什么要引入封装性?
- 程序设计准求“高内聚,低耦合”
- 隐藏内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说,
把该隐藏的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。
- 封装性的体现之一:创建一个对象时,可以通过“对象.属性”的方式,对对象的属性进行赋值,然而赋值操作要受到属性数据类型和存储范围的制约。所以我们要通过方法进行限制条件的添加。这是需要操作对象内的属性进行私有化。
- 封装的体现:
- 将类的属性私有化(private)的同时提供公共(public)方法来获取和设置此属性的值。
- 不对外暴露的私有的方法
- 单例模式(将构造器私有化)
- 如果不希望类在包外调用,那么可以声明为缺省。
- 权限修饰符:
构造器
- 构造器的作用: 创建对象,初始化对象的信息
- 如果没有显示的定义类的构造器的话,则系统默认提供一个空参的构造器
- 定义构造器的格式:权限修饰符 类名(参数列表){}
- 一个类中定义多个构造器,彼此构成重载
- 自己定义了一个类的构造器中,默认的无参构造器将不能使用。
- 一个类中至少有一个构造器。
javaBean的使用
javaBean的定义:
- 类是公共的
- 有一个无参的公共构造器
- 有属性,且有对应的get,set方法
this关键字
- this可以调用的结构:属性,方法;构造器
- this调用属性,方法:
this此时可以理解为当前对象或当前正在创建的对象。通常可以省略this,但是当方法的形参和类的属性同名时,我们需要显式的使用this,表明此变量是属性,而非形参。 - this调用构造器
在类的构造器中可以显式的使用this的方式,来调用本类中指定的其他构造器。需要注意的是:- 构造器中不能使用this()来调用自己
- 如果一个类中有n个构造器,则最多有n-1个构造器中使用了this()。
- 规定:this()必须声明在当前构造器的首行,并且一个构造器只能声明一个this()来调用其他构造器。
MVC设计模式
MVC设计模式运用到了包(package)的概念
- model
- view
- controllor
package关键字
- 提供包的概念是为了更好的实现项目中类的管理
- 使用package声明类或接口所属的包,在源文件的首行声明
- 包属于标识符,遵循标识符的命名规则(xxxyyyzzz)
- 同一包下不能命名同名的接口和类,不同包下可以命名同名的接口和类。
import关键字
- import导入的是类或接口
- import static导入的是静态属性或者方法
- 如果在java.lang包下定义的,可以省略import
- 如果在源文件中,使用了不同包下的同名的类,则必须至少一个类需要以全类名的方式显式
- 使用”xxx.*"的方式表明可以调用xxx包下的所有结构。但是如果使用的是xxx子包下的结构,则仍需要显式导入。