Java复习

1. 一些概念

1.数据域封装的概念和优点

​ 为了避免对数据域的直接修改,使用private 修饰符将数据域声明为私有的,这称为数据域封装,其优点是可以保护数据,并且使得类易于维护.

2. 访问器、修改器

  • *访问器: * 为了访问私有数据域而提供了一个获取(getter)方法返回数据域的值.这个获取方法就是访问器
  • *修改器: * 为了更新数据域而提供了一个设置(setter)方法给数据域设置新值,这个设置方法是修改器

3.如何判断一个变量或方法应该是实列的还是静态的?

​ *答: * 如果一个变量或方法依赖于类的某一个具体实例,那就应该将它定义为实例变量或实例方法.如果一个变量或方法不依赖于类的某个具体实例,就应该将他定义为静态变量或静态方法

4.不可变对象和类

  • 不可变对象: 一旦创建其内容就不能再改变,而该对象对应的类称为不可变类
  • *不可变类有: * String,基本类型的包装器类,BigInteger,BigDecimal

5.不可变类必须满足的条件

  • 所有数据域都是私有的
  • 没有修改器方法
  • 没有返回一个指向可变数据域的引用的访问器方法

6. 类抽象及封装的概念及作用

​ 类的抽象是指将类的实现和类的使用分离开,实现的细节被封装并且对用户隐藏,这被称为类的封装.

作用:

  1. 揭示了开发类和使用类是两个不同的任务.
  2. 类的创造者描述类的功能,让使用者知道如何使用这个类,使用者不需要知道类是如何实现的.

7.基本数据类型的包装器的概念

​ Java提供了一个方便的方法,即将基本数据类型合并为或者说包装成对象,通过包装类 可以将基本数据类型作为对象处理.

大多数基本类型的包装类的名称于对应的基本数据类型名称一样,第一个字母要大写.对应intInteger 和对应charCharacter例外

8.列举类继承的关键点

  • 子类并不是父类的一个子集,一个子类通常比它的父类包含更多的信息和方法
  • 父类中的私有数据域在该类之外是不可访问的.
  • java只支持单一继承
  • 继承是用来位””是一种”关系建模的

9.构造方法链

​ 在任何情况下,构造一个类的实例时,将会调用沿着继承链的所有 父类的构造方法.当构造一个子类对象时,子类的构造方法会在完成自己的任务之前,首先调用它的父类的构造方法.如果父类继承自其他类,那么父类的构造方法又会在完成自己的任务之前,调用它的父类的构造方法.这个过程持续到沿着这个继承层次结构的最后一个构造方法被调用为止.这就是 构造方法链.

10.方法重写与重载的区别

  • 方法重载: 使用同样的名字但是不同的参数列表来定义多个方法.
  • 方法重写: 在子类中提供一个对方法的新的实现
  • 方法重写发生在具有继承关系的不同类中,方法重载可以发生在同一个类中,也可以发生在具有继承关系的不同类中
  • 方法重写具有相同的参数列表,方法重载名字相同但参数列表不同

11.动态绑定的工作机制

​ 多态的实现采用的是动态绑定的机制.简单来说就是父类引用指向子类对象 编译的时候看的是左边 运行的时候看的是右边

12.数据和方法的可见性

修饰符 同一类下 同一包下 不同包中的子类 不同包
public
protected -
default - -
private - - -

13.异常的分类及免检异常和必检异常

​ 分为三种主要类型: 系统错误(Error),异常(Exception),运行时异常(RuntimeException)

免检异常: Error及其子类RuntimeException及其子类

必检异常: 其他的所有类

14.异常处理器及寻找异常处理器的过程

​ 如果try块中的某条语句抛出了一个异常,Java就会跳出try块中剩余的语句,然后开始查找处理这个异常的代码.处理这个异常的代码称为异常处理器.Java会从第一个catch块查到最后一个catch代码块,判断类型是否符合,符合的话就执行里面的代码块.查找处理器的过程称为捕获一个异常.

15.抽象类与接口的相同点与不同点

变量 构造方法 方法
抽象类 无限制 子类通过构造方法链调用构造方法,抽象类不能用new操作符实例化 无限制
接口 所有变量必须是public static final 没有构造方法.接口不能用new造作符实例化 可以包含public的抽象实例方法,public的默认方法,public的静态方法

16.类的设计原则

  • 内聚性
  • 一致性
  • 封装性
  • 清晰性
  • 完整性
  • 实例和静态
  • 继承和聚合
  • 接口和抽象类

2. java语言基础

02.01_Java语言基础(循环结构概述和for语句的格式及其使用)

  • A:循环结构的分类
    • for,while,do…while
  • B:循环结构for语句的格式:
  • for(初始化表达式;条件表达式;循环后的操作表达式) {
      循环体;
    }
  • C执行流程:
    • a:执行初始化语句
    • b:执行判断条件语句,看其返回值是true还是false
      • 如果是true,就继续执行
      • 如果是false,就结束循环
    • c:执行循环体语句;
    • d:执行循环后的操作表达式
    • e:回到B继续。

02.02_Java语言基础(循环结构while语句的格式和基本使用)

  • A:循环结构while语句的格式:

  • while循环的基本格式:
    while(判断条件语句) {
    循环体语句;
    }

    完整格式:

    初始化语句;
    while(判断条件语句) {
    循环体语句;
    控制条件语句;
    }
  • B:执行流程:

    • a:执行初始化语句
    • b:执行判断条件语句,看其返回值是true还是false
      • 如果是true,就继续执行
      • 如果是false,就结束循环
    • c:执行循环体语句;
    • d:执行控制条件语句
    • e:回到B继续。

02.03_Java语言基础(循环结构do…while语句的格式和基本使用)

  • A:循环结构do…while语句的格式:

  • do {

      循环体语句;
    }while(判断条件语句);
完整格式;
初始化语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);
  • B:执行流程:

    • a:执行初始化语句
    • b:执行循环体语句;
    • c:执行控制条件语句
    • d:执行判断条件语句,看其返回值是true还是false
      • 如果是true,就继续执行
      • 如果是false,就结束循环
    • e:回到b继续。

02.04_Java语言基础(循环结构三种循环语句的区别)

  • A:
    • 三种循环语句的区别:
    • do…while循环至少执行一次循环体。
    • 而for,while循环必须先判断条件是否成立,然后决定是否执行循环体语句。
  • B:
    • for循环和while循环的区别:
      • A:如果你想在循环结束后,继续使用控制条件的那个变量,用while循环,否则用for循环。不知道用谁就用for循环。因为变量及早的从内存中消失,可以提高内存的使用效率。

02.05_Java语言基础(循环结构注意事项之死循环)

  • A:一定要注意控制条件语句控制的那个变量的问题,不要弄丢了,否则就容易死循环。
  • B:两种最简单的死循环格式
    • while(true){…}
    • for(;;){…}

02.06_Java语言基础(控制跳转语句break语句)

  • A:break的使用场景
    • 只能在switch和循环中

02.07_Java语言基础(控制跳转语句continue语句)

  • A:continue的使用场景
    • 只能在循环中

02.08_Java语言基础(控制跳转语句标号)

  • 标号:标记某个循环对其控制
  • 标号组成规则:其实就是合法的标识符

02.09_Java语言基础(控制跳转语句return语句)

  • A:return的作用
    • 返回
    • 其实它的作用不是结束循环的,而是结束方法的。

02.10_Java语言基础(方法概述和格式说明)

  • A:为什么要有方法
    • 提高代码的复用性
  • B:什么是方法
    • 完成特定功能的代码块。
  • C:方法的格式
  • 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
      方法体语句;
        return 返回值; 
    } 
  • D:方法的格式说明
    • 修饰符:目前就用 public static。后面我们再详细的讲解其他的修饰符。
    • 返回值类型:就是功能结果的数据类型。
    • 方法名:符合命名规则即可。方便我们的调用。
    • 参数:
      • 实际参数:就是实际参与运算的。
      • 形式参数;就是方法定义上的,用于接收实际参数的。
    • 参数类型:就是参数的数据类型
    • 参数名:就是变量名
    • 方法体语句:就是完成功能的代码。
    • return:结束方法的。
    • 返回值:就是功能的结果,由return带给调用者。

02.11_Java语言基础(方法的注意事项)

  • A:方法调用(有具体返回值)

    • a:单独调用,一般来说没有意义,所以不推荐。

    • b:输出调用,但是不够好。因为我们可能需要针对结果进行进一步的操作。

    • c:赋值调用,推荐方案。

    • a:方法不调用不执行

    • b:方法与方法是平级关系,不能嵌套定义

    • c:方法定义的时候参数之间用逗号隔开

    • d:方法调用的时候不用在传递数据类型

    • e:如果方法有明确的返回值,一定要有return带回一个值

02.12_Java语言基础(方法重载概述和基本使用)

  • A:方法重载:
    • 在同一个类中,方法名相同,参数列表不同。与返回值类型无关。
    • 参数列表不同:
      • A:参数个数不同
      • B:参数类型不同
      • C:参数的顺序不同(算重载,但是在开发中不用)

3.面向对象

03.01_面向对象(构造方法Constructor概述和格式)

  • A:构造方法概述和作用
    • 给对象的数据(属性)进行初始化
  • B:构造方法格式特点
    • a:方法名与类名相同(大小也要与类名一致)
    • b:没有返回值类型,连void都没有
    • c:没有具体的返回值return;

03.02_面向对象(构造方法的重载及注意事项)

  • A:
    • 构造方法的重载
    • 重载:方法名相同,与返回值类型无关(构造方法没有返回值),只看参数列表
  • B:构造方法注意事项
    • a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
    • b:如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
      • 注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

03.03_面向对象(给成员变量赋值的两种方式的区别)

  • A:setXxx()方法
    • 修改属性值
  • B:构造方法
    • 给对象中属性进行初始化

03.04_面向对象(创建一个对象的步骤)

  • A:画图
    • 画图说明一个对象的创建过程做了哪些事情?
    • Student s = new Student();
    • 1,Student.class加载进内存
    • 2,声明一个Student类型引用s
    • 3,在堆内存创建对象,
    • 4,给对象中属性默认初始化值
    • 5,属性进行显示初始化
    • 6,构造方法进栈,对对象中的属性赋值,构造方法弹栈
    • 7,将对象的地址值赋值给s

03.05_面向对象(static关键字的特点)

  • A:static关键字的特点
    • a:随着类的加载而加载
    • b:优先于对象存在
    • c:被类的所有对象共享
      • 举例:咱们班级的学生应该共用同一个班级编号。
      • 其实这个特点也是在告诉我们什么时候使用静态?
        • 如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
      • 举例:
        • 饮水机(用静态修饰)
        • 水杯(不能用静态修饰)
        • 共性用静态,特性用非静态
    • d:可以通过类名调用
      • 其实它本身也可以通过对象名调用。
      • 推荐使用类名调用。
      • 静态修饰的内容一般我们称其为:与类相关的,类成员

03.06_面向对象(static的注意事项)

  • A:static的注意事项
    • a:在静态方法中是没有this关键字的
      • 如何理解呢?
        • 静态是随着类的加载而加载,this是随着对象的创建而存在。
        • 静态比对象先存在。
    • b:静态方法只能访问静态的成员变量和静态的成员方法
      • 静态方法:
        • 成员变量:只能访问静态变量
        • 成员方法:只能访问静态成员方法
      • 非静态方法:
        • 成员变量:可以是静态的,也可以是非静态的
        • 成员方法:可是是静态的成员方法,也可以是非静态的成员方法。
      • 简单记:
        • 静态只能访问静态。

03.07_面向对象(静态变量和成员变量的区别)

  • 静态变量也叫类变量 成员变量也叫对象变量
  • A:所属不同
    • 静态变量属于类,所以也称为为类变量
    • 成员变量属于对象,所以也称为实例变量(对象变量)
  • B:内存中位置不同
    • 静态变量存储于方法区的静态区
    • 成员变量存储于堆内存
  • C:内存出现时间不同
    • 静态变量随着类的加载而加载,随着类的消失而消失
    • 成员变量随着对象的创建而存在,随着对象的消失而消失
  • D:调用不同
    • 静态变量可以通过类名调用,也可以通过对象调用
    • 成员变量只能通过对 象名调用

03.08_面向对象(main方法的格式详细解释)

  • A:格式
    • public static void main(String[] args) {}
  • B:针对格式的解释
    • public 被jvm调用,访问权限足够大。
    • static 被jvm调用,不用创建对象,直接类名访问
    • void被jvm调用,不需要给jvm返回值
    • main 一个通用的名称,虽然不是关键字,但是被jvm识别
    • String[] args 以前用于接收键盘录入的

03.09_面向对象(继承)

  • 继承(extends)
    • 让类与类之间产生关系,子父类关系
  • 继承的好处
    • a:提高了代码的复用性
    • b:提高了代码的维护性
    • c:让类与类之间产生了关系,是多态的前提
  • 继承的弊端
    • 类的耦合性增强了。
    • 开发的原则:高内聚,低耦合。
    • 耦合:类与类的关系
    • 内聚:就是自己完成某件事情的能力
  • java中继承的特点
    • 只支持单继承,不支持多继承。(一个儿子只能有一个爹)
    • 支持多层继承(继承体系)
    • 如果想用这个体系的所有功能用最底层的类创建对象
    • 如果想看这个体系的共性功能,看最顶层的类
  • 继承的注意事项
    • a:子类只能继承父类所有非私有的成员(成员方法和成员变量)
    • b:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。
    • c:不要为了部分功能而去继承
  • 什么时候使用继承
    • 继承其实体现的是一种关系:”is a”。
    • 如果有两个类A,B。只有他们符合A是B的一种,或者B是A的一种,就可以考虑使用继承。

03.10_面向对象(方法重写概述及其应用)

  • A:什么是方法重写
    • 重写:子父类出现了一模一样的方法(注意:返回值类型可以是子父类,这个我们学完面向对象讲)
  • B:方法重写的应用:
    • 当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。
  • C:方法重写注意事项
    • a:父类中私有方法不能被重写
      • 因为父类私有方法子类根本就无法继承
    • b:子类重写父类方法时,访问权限不能更低
      • 最好就一致
    • c:父类静态方法,子类也必须通过静态方法进行重写
      • 其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写(静态只能覆盖静态)
    • 子类重写父类方法的时候,最好声明一模一样。
    • 方法重写:子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值是一致(或者是子父类)的
    • 方法重载:本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。
    • 子类对象调用方法的时候:
      • 先找子类本身,再找父类。

03.11_面向对象(final关键字修饰类,方法以及变量的特点)

  • final修饰特点
    • 修饰类,类不能被继承
    • 修饰变量,变量就变成了常量,只能被赋值一次
    • 修饰方法,方法不能被重写
  • final修饰变量的初始化时机
    • 显示初始化
    • 在对象构造完毕前即可

03.12_面向对象(多态)

  • A:多态(polymorphic)概述
    • 事物存在的多种形态
  • B:多态前提
    • a:要有继承关系。
    • b:要有方法重写。
    • c:要有父类引用指向子类对象。
  • 成员变量
    • 编译看左边(父类),运行看左边(父类)。
  • 成员方法
    • 编译看左边(父类),运行看右边(子类)。
  • 静态方法
    • 编译看左边(父类),运行看左边(父类)。
    • (静态和类相关,算不上重写,所以,访问还是左边的)
    • 只有非静态的成员方法,编译看左边,运行看右边
文章作者: Code Pirate
文章链接: http://blog.xswhb.cn/2019/06/27/java复习/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Code Pirate

评论