JavaSE(三)

七、面向对象

优点:

  • 隐藏实现细节

  • 把一个大型的开发任务,分割成很多小型的(互不影响的)开发任务。

  • 把并行开发,变为可能。提高的提高了开发效率。

7.1、基本

  • 特性:封装、继承、多态

  • 类:具有相同的状态和相同的行为的一组对象的集合

  • 用属性表示对象的状态,用方法表示对象的行为

  • 类是对象的模板,对象是类的具体实例;类是对多个对象进行综合抽象的结果,是实体对象的概念模型,一个对象就是一个类的实例

7.2、定义类

7.2.1、定义类

定义类就相当于定义了一个新的数据类型,这个数据类型的名称就是类名

  • 语法:[访问修饰符] class 类名{ 成员变量声明;成员方法声明 }
  • 解析:访问修饰符是可选的

7.2.2、类的属性

对象所拥有的特征

  • 语法:[访问修饰符] 数据类型 属性名
  • 解析:
    • 访问修饰符是可选的
    • 除访问修饰符外,其余部分与变量定义相同

7.2.3、类的方法

对象执行操作的行为

7.3、创建和使用对象

7.3.1、创建对象

类的对象可以调用类中的成员。如类的属性、类的方法

创建对象就相当于定义了一个变量,变量名是对象名,变量的类型是被实例化的类

  • 语法: 类名 对象名 = new 类名();
  • 解析:
    • 左边的类名是对象名的数据类型
    • 右边的类名是构造方法
    • new 类名()是对象
    • new是关键字,称为实例化。实例化的过程就是JVM为对象分配内存的过程

7.3.2、使用对象

  • 语法:
    • 调用对象的属性:对象.属性
    • 调用对象的方法:对象.方法名();

类的成员包括属性和方法,也称作成员变量和成员方法

7.4、重载

  • 定义:在一个类中定义多个同名的方法,每个方法具有不同的参数类型、参数个数或参数顺序

  • 特点:

    • 在同一个类
    • 参数的个数或类型或顺序不同
    • 方法的返回值不能作为方法是否构成重载的依据
  • 调用:实参与形参在类型、个数、顺序上一一匹配

  • 优点: 可以根据参数的不同,采用不同的实现方法,简化了调用方法的代码

7.5、构造方法

当类创建一个对象时会自动调用该类的构造方法

构造方法:默认构造方法,自定义构造方法

  • 定义:为成员变量初始化
  • 语法:[访问修饰符] 方法名 ([参数列表]){}
  • 解析:
    • 构造方法没有返回值
    • 构造方法的方法名与类名相同
    • 默认构造方法是没有参数的

构造方法同样可以重载,即在同一个类里定义多个重载构造方法

7.6、成员变量和局部变量

  • 成员变量:直接定义在类的内部,方法的的外部的变量

  • 局部变量:定义在方法内的变量,局部变量在使用时必须初始化

  • 成员变量和局部变量区别

    • 作用域:局部变量的作用域仅限于定义它的方法,成员变量作用域在整个类内
    • 初始值:成员变量没有赋值的话会有默认值,而局部变量使用必须初始化
    • 同一个方法不允许有同名的局部变量,不同方法中可以有同名局部变量
    • 局部变量可以和成员变量名相同,在使用时局部变量有更高的优先级

7.7、封装

  • 将成员变量用private修饰后,其他类就无法访问,如果访问则需要进行封装第二步
  • 设置getter/setter方法
  • 可以再setter方法内添加条件语句进行赋值限制

7.8、包

包也是一种封装机制

  • 作用:
    • 存放类
    • 防止起名冲突
    • 在更广的范围内保护类、数据、方法。根据访问规则,包外的代码能不能访问该类
  • 语法:package 包名;
  • 解析:
    • 包的声明必须是Java源文件中的第一条非注释性语句,一个源文件只能有一个包声明
    • 全部小写的ASCII字母,一个*域名com、edu、gov、net、org。通常使用域名倒写
  • 导入:import 包名;

7.9、访问修饰符

7.9.1、类的访问修饰符

同一包 不同包中
public 可以使用 可以使用
默认(不使用权限修饰符) 可以使用 不能使用

7.9.2、类成员的访问修饰符

位置 public protected 默认(不使用) private
同类访问
同包其他类访问
同包子类访问
不同包子类访问
不同包非子类访问

访问修饰符不能用于方法中声明的变量或形参。因为方法中声明的变量或形参作用域仅限于该方法

7.9.3 、static关键字

n个对象中的某些数据需要这n个对象共用,需要使用static修饰

  • 修饰属性
    • 使用static修饰的属性称为静态属性或类变量,没有static修饰的属性称为实例变量
    • 使用static修饰的属性属于类,不属于具体的某个对象
  • 修饰方法
    • 使用static修饰的方法称为静态方法或类方法,没有static修饰的属性称为实例方法
    • 用类名直接加“.”调用
    • 使用static修饰的方法属于类,不属于具体的某个对象

静态方法中不能直接访问实例变量和实例方法

在实例方法中可以直接调用类中定义的静态变量和静态方法

JVM把内存划分为:方法区、堆区、栈区、静态区、常量区

7.10、this的使用

this关键字是对一个对象的默认引用。每个实例方法内部都有一个this引用变量,指向调用这个方法的对象

(1)、使用this调用成员变量,解决成员变量与局部变量的同名冲突

private String name;
public void setName(String name){	this.name=name;	或者  name=name;	}

(2)、使用this调用成员方法

public void eat(){}
public void work(){	this.eat();}

(3)、使用this调用重载的构造方法,只能在构造方法中使用,且必须是构造方法中的第一条语句

public void Persion(String name){	this.name=name;	}
public void Persion(String name,int age){	this(name);	this.age=age;	}

因为this是在对象内部代表自身的引用,所以this只能调用实例变量、实例方法和构造方法,不能调用类变量、类方法、局部变量

上一篇:JAVASE模块简述


下一篇:JavaSE Review