java基础回顾第六章:面向对象(下)

本文深入探讨Java面向对象编程的高级特性,包括static关键字的用途、单例设计模式的实现方式、初始化块的功能、final关键字的使用场景、抽象类与接口的区别及应用、内部类的种类、枚举类型的应用以及注解的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章:面向对象(下)

6.1 static关键字

static 可以修饰属性、方法、代码块、内部类

被static修饰后成员的特点:

  • 随着类的加载而加载
  • 优先于对象存在
  • 修饰的成员,被所有对象共享
  • 访问权限允许时,可不创建对象,直接被类调用

类变量:由该类的所有实例共享

类变量的默认值:

  • byte、short、int、long --------默认值为 0
  • float、double-------默认值为 0.0
  • char ------- 默认值为 0 (Unicode编码)
  • boolean -------- 默认值为false

类方法:

  • 没有对象的实例时,可以用类名.方法名()的形式访问由static标记的类标记
  • 在static方法内部只能访问类的static属性,不能访问类的非static属性
  • static方法内部不能有this和super
6.2 单例设计模式

**单例:**一个类只有一个对象

**饿汉式单例:**适用于创建对象代价小

  • 1.防止外部new对象,封装构造器(private)
  • 2.只能在类的内部new对象并用静态属性为引用指向唯一对象
  • 3.提供一个公共的静态方法,用于获取唯一对象的引用地址的副本

**懒汉式单例:**适用于创建对象代价大

  • 1.防止外部new对象,封装构造器(private)
  • 2.声明私有的静态的指向本类对象的引用为属性,但是不创建对象
  • 3.提供公共静态方法,用于获取唯一对象. 只有第一次使用时才创建唯一对象
6.3 类的成员之四—初始化块

**初始化块的作用:**对Java对象进行初始化

非静态块:(无static修饰)

  • 可以有输出语句
  • 可以对对象的属性、对象的声明进行初始化操作
  • 可以调用静态变量或方法
  • 若有多个非静态的代码块,按照从上到下的顺序依次执行
  • 每次创建对象时,都会执行一次,且先于构造器执行

静态块(有static修饰):

  • 可以有输出语句
  • 可以对类的属性、类的声明进行初始化操作
  • 不可以对非静态的属性初始化
  • 若有多个静态的代码块,那么按照从上到下的顺序依次执行
  • 静态代码块的执行要先于非静态代码块
  • 静态代码块只执行一次
static{
    //静态初始化块
    //<clinit> 类初始化器,在加载类时执行唯一一次
}

{
     //非静态初始化块
}

* 一个类中初始化块若有修饰符,则只能被static修饰
* 当类被载入时,类属性的声明和静态代码块先后顺序被执行,且只执行一次 

程序的执行流程:

  • 声明成员变量的默认值
  • 显示初始化、多个初始化块依次被执行(先后顺序)
  • 构造器再对成员进行赋值操作
6.4 final关键字

使用:

  • final标记的类不能被继承
  • final标记的方法不能被子类重写
  • final标记的变量即成为常量(名称大写且只能被赋值一次)
  • finaL修饰的量称为全局常量
6.5 抽象类

**抽象类:**用abstract修饰的类

抽象方法:

  • 用abstract修饰的方法
  • 只有方法声明,没有方法实现

特点:

  • 含有抽象方法的类必须被声明为抽象类
  • 抽象类不能被实例化,抽象类是用来被继承的
  • 抽象类的子类必须全部重写父类中的抽象方法,并提供方法体
  • 不能用abstract修饰属性、私有方法、构造器、静态方法和final修饰的方法

**抽象类成员:**属性、构造器、具体方法、抽象方法

抽象类与具体类:

  • 具体类:对现实世界一种实体的抽象定义
  • 抽象类:对现实世界某一类的多种实体的统一抽象定义
6.6 接口

具体类:某种事物的描述

抽象类:某类不同种事物的描述

接口:不同类不同种事物的共同行为

注意事项

  • 接口中只允许公共抽象方法和全局常量
  • 先继承再实现,可以实现多个接口,从而达到多重继承的效果
  • 接口通常表达某种能力、功能或标准、规范
  • 接口中的内容必须公开

**面向接口编程:**无视子类的个性,把子类对象多态为接口类型的对象,无差别使用各种对象

6.7 类的成员之五—内部类

**成员内部类:**声明在类中方法外的内部类

  • 嵌套类:有static修饰的成员内部类, 隶属于外部类
  • 普通内部类:没有static修饰的成员内部类, 隶属于外部类的对象

**局部内部类:**声明在方法中的内部类

  • 普通局部内部类:
  • 匿名内部类:某个接口临时写一个具体实现子类,对象也是一次性使用
6.8 枚举

**枚举:**对象可数的特殊类型

和switch配合使用

 switch (变量) { 变量的数据类型必须是非long整数, 字符串, 枚举
            case 常量 :
                语句块;
                break;
        }
6.9 注解

**注解(annotation):**特殊的注释,可以被编译器和JVM识别,不参与程序运行

  • @Override:提醒编译器作方法覆盖的条件的检查,只用于方法
  • @Deprecated:提醒使用者,修改的目标已经不再推荐使用了
  • @SuperressWarnings(String[] ):抑制编译器警告

**元注解:**限制注解的注解

  • @Target:目标,限定注解的作用范围
    1. TYPE —类
    2. FIELD — 用于属性
    3. METHOD — 用于方法
    4. PARAMETER — 用于参数
    5. CONSTRUCTOR — 用于构造器
    6. LOCAL_VARIABLE — 用于局部
  • @Retention:停留期,限定注解的生命周期
    1. RetentionPolicy = SOURCE – 只停留在源文件中,生成的class中没有注解
    2. RetentionPolicy = CLASS – 可以停留在类文件中, 但是不能在运行被VM识别, 默认行为
    3. RetentionPolicy = RUNTIME – 停留期最长的, 可以在运行时被VM识别并反射式处理它
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值