前端白手起家学java

Java-面向对象

2018-07-13  本文已影响0人  小猫吃鱼1990

核心思想:找适合的对象做适合的事情。

自定义类

自定义类的三步骤:
1、自定义类
class 类名 {
// 事物的公共属性使用变量描述
// 事物的公共行为使用函数描述
}
2、通过类创建对象
类名 变量名 = new 类名();
3、访问(设置)对象的属性或调用对象的功能。

抽象类 用abstract修饰

应用场景:
描述一类事物的时候,该种事物存在某种行为,但是该行为目前不是具体的行为,那么就可以抽取该种行为的声明,但是不去实现该行为,这种行为就叫抽象行为,该类就叫抽象类
好处: 强制要求子类必须实现基类的抽象方法。
注意事项:

  1. 如果一个函数没有方法体,该函数必须使用abstract修饰,把该函数修饰成抽象的函数。
  2. 如果一个类中出现了抽象的函数,那么该类也必须使用abstract修饰。
  3. 如果一个非抽象类继承了一个抽象类,那么必须把抽象类的所有抽象方法都实现。
  4. 抽象类中可以存在非抽象的方法。
  5. 抽象类可以不存在抽象方法。
  6. 抽象类不能创建对象。
  7. 抽象类是存在构造方法的,其构造方法是提供给其子类创建对象使用的。

匿名对象

定义:没有引用类型变量指向的对象。
需要注意的事项:

面向对象的三大特征:封装、继承、多态

封装

权限修饰符:控制变量的可见范围。

  1. 使用private修饰需要封装的属性。
  2. 提供一个公共的方法设置或者获取该私有的成员属性。
    命名规范:
    set属性名();
    get属性名();
    封装的好处:

继承:is a 关系

继承的格式:
class 类名1 extends 类名2 {
// 类内容
}
类名1称为子类,类名2称为基类(父类/超类);
注意事项:

方法重写: 子类中重写父类的方法
什么时候使用方法重写: 父类的功能不能满足子类的需求时。
方法重写的注意事项:

  1. 方法名和形参列表必须一致。
  2. 子类的权限修饰符必须要大于或者等于父类方法的权限修饰符。
  3. 子类的返回值类型必须要小于或等于父类的返回值类型。
    4.子类抛出的异常类型必须要小于或等于父类抛出的异常类型。

多态

定义:父类的引用类型变量指向了子类的对象。
前提:必须存在继承或者实现关系。
注意事项:

  1. 多态情况下,子父类存在同名的成员时,访问的都是父类的成员,只有当成员为非静态方法时,访问的是子类方法。
  2. 多态情况下,不能访问子类特有的成员。
    多态应用:
  3. 用于形参类型时,可以接收更多类型的数据。
  4. 用于返回值类型时,可以返回更多类型的数据。

构造函数

作用:给对应的对象初始化。
定义格式:
修饰符 函数名() {
函数体;
}
注意细节:

代码块

构造代码块

作用:给对象进行统一的初始化。
格式:
{
构造代码块;
}
放的位置:在类的任何一个方法外面,和类的属性位置平齐。
注意:

局部代码块

大括号位于方法内,一般不会用。

静态代码块

this 关键字

代表所属函数的调用者,即谁调用就this就指向谁。
作用:

  1. this(形参); 必须放在第一行。
  2. 不能调用本构造函数,否则出现死循环。

super 关键字

super关键字代表了父类空间的引用。
作用:

  1. 子类中存在着和父类同名的成员时,默认访问子类的成员,通过super关键字指定访问父类的成员。
  2. 创建子类对象时,默认会调用父类无参的构造函数,通过super指定调用父类带参的构造函数。

instanceof 关键字

判断一个对象是否属于指定的类型。
使用前提:判断的对象与指定的类别必须要存在继承或实现的关系。
使用格式:
对象 instanceof 类名

final 修饰符

用法:

  1. 修饰基本类型的变量时,该变量初始化后其值不可再次修改。
  2. 修饰引用类型的变量时,该变量不能改变其指向的对象。
  3. 修饰一个方法时,该方法不能被重写。
  4. 修饰一个类时,该类不能被继承。
    常量的修饰符一般为: public static final

static 修饰符

应用场景:当变量需要被所有对象共享时使用。
作用:

  1. static修饰符修饰的成员变量,在实例化时不会每个对象都维护一份,而是只在数据共享
    区维护一份,所有的同类型的对象共享。
    静态成员变量的访问方式:
  1. static修饰符修饰方法时
    访问方式1:使用对象进行访问
    对象名.静态函数名();
    访问方式2:类名进行访问
    类名.静态函数名字
    注意事项:
  1. 静态的数据是在类文件加载时执行一次,优先于对象存在的。
    静态成员数据存储的位置:
    静态成员数据存在方法区的数据共享区,而非静态成员变量存储在堆内存中。

main函数

格式:
public static void main() {
代码区;
}
解读:
public:公共的,权限很大,在任何情况下都可以访问。
static: 静态,可以让jvm调用main函数时,不需要通过对象调用,直接调用既可。

设计模式

单例设计模式(饿汉单例设计模式)

解决的问题:保证一个类在内存中只有一个对象。
设计模式步骤:

  1. 私有化构造函数
  2. 声明本类的引用类型变量(private static),并使用该变量指向本类对象,即在本类中实例化本身。
  3. 提供一个公共的静态的方法获取本类的对象。
class Single {
   private static Single s = new Single(); // 在本类中实例化本身
  private Single { }   // 私有化构造函数
  public static Single getInstance () { // 提供一个公共静态方法获取本类对象
    return s;
  }
}
// 使用
Single s1 = Single.getInstance();

单例设计模式(懒汉单例设计模式)

步骤:

  1. 私有化构造函数
  2. 声明本类的引用类型变量,不创建本类的对象
  3. 提供公共静态的方法获取本类对象,返回之前,先判断是否创建了本类对象,若没有创建则创建,若已经创建了,则直接返回。
class Single {
   private static Single s = null; // 在本类中实例化本身
  private Single { }   // 私有化构造函数
  public static Single getInstance () { // 提供一个公共静态方法获取本类对象
      if (s == null) {
          s = new Single();
      }
      return s;
  }
}
// 使用
Single s1 = Single.getInstance();

注意:推荐使用饿汉单例设计模式,因为懒汉设计模式可能存在线程安全问题。

接口

为了拓展功能。
定义格式:
interface 接口名 {

}
注意事项:

  1. 程序的解耦。
  2. 定义约束规范。
  3. 拓展功能。
    类使用接口格式:
    class 类名 implements 接口名 {
    // 代码
    }
上一篇下一篇

猜你喜欢

热点阅读