面向对象(上)
类和对象的使用(面向对象思想落地的实现)
- 创建类,设计类的成员
- 创建类的对象
- 通过”对象.属性“或“对象.方法”调用对象的结构
对象的独立性
如果创建了一个类的多个对象,则每个对象都独立的拥有一套类的属性。(非static的)
意味着:我们修改一个对象的属性a,则不会影响另外一个对象属性a的值
注意:
//已存在一个Person类
Person p1 = new Person();
Person p3 = p1;
p3.age = 10;
//这条语句是将p1对象保存的对象地址赋给p3,导致p1和p3指向了堆空间中的同一个对象实体
//给p3的属性赋值相当于修改p1中属性的值
类中属性的使用
-
属性(成员变量) vs 局部变量
-
相同点:
- 定义变量的格式:数据类型 变量名 = 变量值;
- 先声明后使用
- 变量都有其对应的作用域
-
不同点:
-
在类中声明位置不同
属性:直接定义在类的一对{}内
局部变量:声明在方法内,方法形参,代码块内,构造器形参,构造器内部的变量
-
关于权限修饰符的不同
属性:可以在声明属性时,指定其权限,使用权限修饰符
常用权限修饰符:private,public,缺省,protected
局部变量:不可以使用权限修饰符(和方法权限相同)
-
默认初始化值情况
属性:
整型(bute,short,int,long):0
浮点型(float,double):0.0
字符型(char):0(或''\u0000')
布尔型(boolean):false
引用数据类型(类,数组,接口):null
局部变量:没有默认初始化值
意味着我们在调用局部变量前一定要显示初值
特别的:形参在调用时复制即可
-
在内存中加载的位置:
属性:加载到堆空间中(非static)
局部变量:加载到栈空间中
-
-
类中方法的声明和使用
方法的声明:权限修饰符 返回值类型 方法名 (形参列表){方法体}
方法中不能定义方法
方法的重载
在一个类中允许存在一个以上的同名方法,只要他们的参数个数或参数类型不同即可(若仅仅是返回类型不同、仅权限修饰符不同、或仅参数名不同则不能构成重载)
可变个数形参
-
格式:数据类型 ... 变量名
-
可以传入多个实参
-
可变个数形参的方法与本来中方法名相同,形参不同的方法之间构成重载
-
可变个数形参的方法与本来中方法名相同,形参类型也相同的数组之间不构成重载。二者不能共存
-
可变个数形参在方法的形参中必须声明在末尾,且只能存在一个
构造器
- 作用:
- 创建对象
- 初始化对象的信息
- 说明:
- 如果没有显式定义的构造器的话,则系统默认提供一个空参的构造器
- 定义构造器的格式:权限修饰符 类名(形参列表){} ->权限默认为类权限
- 一个类中定义多个构造器,彼此构成重载
- 与类名相同
- 一旦我们显式定义了构造器,系统就不在提供默认构造器
- 一个类中至少有一个构造器
JavaBean
JavaBean是一种Java语言写成的可重用组件
- 所谓JavaBean是符合如下标准的Java类:
- 类是公共的
- 有一个无参的公共构造器
- 有属性,且有对应的get/set方法
this的使用
- 可以用来修饰属性、方法、构造器
- this.属性或方法 表示当前对象的属性或方法。
- 通常情况下省略this.
- 特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用“this.变量”
- this(形参列表)
- 在类的构造其中可以这样调用本类中指定的其他构造器
- 类的构造器中不能通过这种方式调用自己
- 如果一个类中有n个构造器,则最多有n-1个构造器中使用了this(形参列表)
- 必须声明在当前构造器的首行
- 构造器中最多只能有一个这种声明
- this.属性或方法 表示当前对象的属性或方法。
import的使用
- import:导入
- 在源文件中显式的使用import结构导入指定包下的类、接口
- 声明在包的声明和类的声明之间
- 如果需要导入多个结构,则并列写出即可
- 可以使用"xxx.*"的方式,表示可以导入xxx包下的所有结构
- 如果使用的类或接口是java.lang包下的则可以省略 import结构
- 如果使用的类或接口是本包下的则可以省略 import结构
- 如果在源文件中使用了不同包下的同名的类,则必须至少有一个类以全类名的方式显示
- 如果使用"xxx.*"方式表明可以使用包下的所有结构。但是!如果使用的xxx包下的子包的结构,则仍需要显式导入
- import static: 导入指定类或接口中的静态结构:属性或方法