面向对象8

面向对象8

main()方法的剖析

public static void main(String args[]){}

1、理解1:看做是一个普通的静态方法 理解2:看做是程序的入口,格式是固定的。

2、与控制台交互

如何从键盘获取数据?

方式1:使用Scanner 方式2:使用main()的形参进行传值。

代码块

回顾:类中可以声明的结构:属性、方法、构造器;代码块(或初始化块)、内部类

  1. 代码块(或初始化块)的作用: 用来初始化类或对象的信息(即初始化类或对象的成员变量)

  2. 代码块的修饰: 只能使用static进行修饰。

  3. 代码块的分类: 静态代码块:使用static修饰 非静态代码块:没有使用static修饰

  4. 具体使用: 4.1 静态代码块:

    随着类的加载而执行 由于类的加载只会执行一次,进而静态代码块的执行,也只会执行一次 作用:用来初始化类的信息 内部可以声明变量、调用属性或方法、编写输出语句等操作。 静态代码块的执行要先于非静态代码块的执行 如果声明有多个静态代码块,则按照声明的先后顺序执行 静态代码块内部只能调用静态的结构(即静态的属性、方法),不能调用非静态的结构(即非静态的属性、方法)

4.2 非静态代码块: > 随着对象的创建而执行 > 每创建当前类的一个实例,就会执行一次非静态代码块 > 作用:用来初始化对象的信息 > 内部可以声明变量、调用属性或方法、编写输出语句等操作。 > 如果声明有多个非静态代码块,则按照声明的先后顺序执行 > 非静态代码块内部可以调用静态的结构(即静态的属性、方法),也可以调用非静态的结构(即非静态的属性、方法)

属性赋值过程

  1. 可以给类的非静态的属性(即实例变量)赋值的位置有: ① 默认初始化

    ② 显式初始化 或 ⑤ 代码块中初始化

    ③ 构造器中初始化

    ④ 有了对象以后,通过"对象.属性"或"对象.方法"的方法进行赋值

  1. 执行的先后顺序: ① - ②/⑤ - ③ - ④

  2. 关于字节码文件中的<init>的简单说明:(通过插件jclasslibbytecode viewer查看)

<init>方法在字节码文件中可以看到。每个<init>方法都对应着一个类的构造器。(类中声明了几个构造器就会有几个<init>) 编写的代码中的构造器在编译以后就会以<init>方法的方式呈现 <init>方法内部的代码包含了实例变量的显示赋值、代码块中的赋值和构造器中的代码。 <init>方法用来初始化当前创建的对象的信息的。

  1. 给实例变量赋值的位置很多,开发中如何选?

显示赋值:比较适合于每个对象的属性值相同的场景

构造器中赋值:比较适合于每个对象的属性值不相同的场景

final关键字的使用

  1. final的理解:最终的

  2. final可以用来修饰的结构:类、方法、变量

  3. 具体说明:

    3.1 final修饰类:表示此类不能被继承。 比如:String、StringBuffer、StringBuilder类

    3.2 final修饰方法:表示此方法不能被重写 比如:Object类中的getClass()

    3.3 final修饰变量:既可以修饰成员变量,也可以修饰局部变量。 此时的"变量"其实就变成了"常量",意味着一旦赋值,就不可更改。

    3.3.1 final修饰成员变量: 有哪些位置可以给成员变量赋值? > 显式赋值 > 代码块中赋值 > 构造器中赋值

    3.3.2 final修饰局部变量:一旦赋值就不能修改 > 方法内声明的局部变量:在调用局部变量前,一定需要赋值。而且一旦赋值,就不可更改 > 方法的形参:在调用此方法时,给形参进行赋值。而且一旦赋值,就不可更改

  4. final与static搭配:修饰成员变量时,此成员变量称为:全局常量。 比如:Math的PI

抽象类与抽象方法

  1. abstract的概念:抽象的

  1. abstract可以用来修饰:类、方法

  2. 具体的使用:

4.1 abstract修饰类: > 此类称为抽象类 > 抽象类不能实例化。 > 抽象类中是包含构造器的,因为子类对象实例化时,需要直接或间接的调用到父类的构造器。 > 抽象类中可以没有抽象方法。反之,抽象方法所在的类,一定是抽象类。

4.2 abstract修饰方法: > 此方法即为抽象方法 > 抽象方法只有方法的声明,没有方法体。 > 抽象方法其功能是确定的(通过方法的声明即可确定),只是不知道如何具体实现(体现为没有方法体) > 子类必须重写父类中的所有的抽象方法之后,方可实例化。否则,此子类仍然是一个抽象类。

  1. abstract不能使用的场景: 5.1 abstract 不能修饰哪些结构? 属性、构造器、代码块等。

5.2 abstract 不能与哪些关键字共用?(自洽)

不能用abstract修饰私有方法、静态方法、final的方法、final的类。

私有方法不能重写 避免静态方法使用类进行调用 final的方法不能被重写 final修饰的类不能有子类

接口的使用

  1. 接口的理解:接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。

  2. 定义接口的关键字:interface

  3. 接口内部结构的说明:

    可以声明: 属性:必须使用public static final修饰 方法:jdk8之前:声明抽象方法,修饰为public abstract jdk8:声明静态方法、默认方法 jdk9:声明私有方法

    不可以声明:构造器、代码块等

  1. 接口与类的关系 :实现关系

  2. 格式:class A extends SuperA implements B,C{}

A相较于SuperA来讲,叫做子类 A相较于B,C来讲,叫做实现类。

  1. 满足此关系之后,说明:

类可以实现多个接口。 类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性。 类必须将实现的接口中的所有的抽象方法都重写(或实现),方可实例化。否则,此实现类必须声明为抽象类。

  1. 接口与接口的关系:继承关系,且可以多继承

  1. 接口的多态性: 接口名 变量名 = new 实现类对象;

  1. 面试题:区分抽象类和接口

共性:都可以声明抽象方法 都不能实例化

不同:① 抽象类一定有构造器。接口没有构造器 ② 类与类之间继承关系,类与接口之间是实现关系,接口与接口之间是多继承关系

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值