《JAVA核心技术卷I(第11版)》第1-4章 复习

第一章 JAVA程序设计概述

JAVA“白皮书”的关键术语

  • 简单性
  • 面向对象

面试题:面向过程和面向对象的区别?

两者的主要区别在于解决问题的方式不同:

  • 面向过程把解决问题的过程拆成一个个方法,通过一个个方法的执行解决问题。
  • 面向对象会先抽象出对象,然后用对象执行方法的方式解决问题。

举例:完成小明洗衣服任务

面向过程:定义洗衣服工具类

将小明洗衣服的详细过程一步步定义方法,一步步输出即可。

面向对象:首先考虑分成几种类;小明对象对应person类;衣服对象对应clothes类;在主类实例化person对象,实例化衣服对象,人对象调用衣服对象的操作。

另外,面向对象开发的程序一般更易维护、易复用、易扩展。

  • 分布式
  • 健壮性
  • 安全性
  • 体系结构中立
  • 可移植性
  • 解释型

面试题:JAVA是⼀种半编译半解释型语⾔,为什么?

java是⼀种半编译半解释型语⾔。Java的执⾏过程主要为:.java源⽂件经过javac编译器编译为字节码⽂件.class,然后加载进JVM,在JVM中运⾏⼜经过解释器转化为计算机可以识别的计算机语⾔。

  • 高性能
  • 多线程
  • 动态性

第三章 JAVA的基本程序设计结构

遍历数组:

  • 当需要从头开始遍历数组时,可以使用增强的for进行遍历

  • 格式:

    for(数据类型 元素自定义名 : 数组){

    ​ //逻辑处理

    }

数组拷贝:

第一种:直接引用拷贝数组的引用;(同一个数组)

第二种:Arrays.copyOf()方法;第一个参数为拷贝的数组,第二个参数为新数组的长度。(不同的数组)

数组排序:

  • Arrays.sort():使用了优化的快速排序算法

数组常用的API:

  • toString(数组a):对数组a进行字符串转换并输出
  • copyOf(数组a):对数组a进行拷贝(不同的数组,即生成一个新数组)
  • copyOfRange(数组a,start,end):对数组a从下标start到下标end进行拷贝(不同的数组,即生成一个新数组)
  • sort(数组a):对数组a从小到大进行排序
  • fill(数组a,充满的相同值b):为数组a的所有下标均赋值为b
  • equals(数组a,数组b):比较两个数组是否相等;包括下标和下标对应的元素。

第四章 对象与类

1.类之间的关系

  • 依赖:uses-a 类A实例化的对象a需要引用到类B实例化的对象b的行为。(应该尽量减少,降低耦合)
  • 聚合:has-a 一个Order对象包含很多Item对象
  • 继承:is-a 一个特殊类和一个一般类的关系

2.loaclDate、localDateTime

面试题:为什么建议使用 LocalDateTime ,而不是 Date?

  • Date 如果不格式化,打印出的日期可读性差,Date 使用 SimpleDateFormat
    对时间进行格式化,但 SimpleDateFormat是线程不安全的。
  • Date 类的getYear、getMonth这些方法可以获取年月日,但都被弃用
  • LocalDate已经格式化时间格式,不需要再进行处理;只返回年月日,线程安全,且LocalDate中的api方法完成可以取代Date的方法
  • LocalDateTime返回年月日时分秒

localDate在项目中的应用:

Spring Boot`
中应用 `LocalDateTime将 `LocalDateTime`
字段以时间戳的方式返回给前端 添加日期转化类

3.隐式参数和显式参数

假设在一个类中有这样一个参数和方法:

double a;
public void abc( double b){
	a=b/10;
}

也可以将代码改成这样:

double a;
public void abc( double b){
	this.a=b/10;			//多了一个this.
}

对于abc这个方法而言,参数a被称为隐式参数,参数b被称为显式参数。

对此做出如下总结:
1.出现在方法名外面的参数被称为隐式参数。
2.定义在方法名里面的被称为显示参数。
3.隐式参数称为方法调用的接收者。
4.关键字this表示隐式参数,可省略。

借鉴自https://blog.csdn.net/qq_43251032/article/details/100734368

4.static

被static修饰的字段(变量或常量)、方法,它属于类,不属于任何单个的对象

static修饰方法(静态的成员方法):

    访问方式:
        
        方式一:可以使用对象进行访问。
                对象.静态的函数名();

        方式二:可以使用类名进行访问。
                类名.静态函数名字。
    
    推荐使用是类名直接访问静态的成员。

静态的成员变量与非静态的成员变量的区别:

  • 作用上的区别:

    • 静态的成员变量的作用共享一个 数据给所有的对象使用。

    • 非 静态的成员变量的作用是描述一类事物的公共属性。

  • 数量与存储位置上的区别:

    • 静态成员变量是存储方法 区内存中,而且只会存在一份数据。

    • 非静态的成员变量是存储在堆内存中,有n个对象就有n份数据。

  • 生命周期的区别:

    • 静态的成员变量数据是随着类的加载而存在,随着类文件的消失而消失。
    • 非静态的成员数据是随着对象的创建而存在,随着 对象被垃圾回收器回收而消失。

静态函数要注意的事项:

1. 静态函数是可以调用类名或者对象进行调用的,而非静态函数只能使用对象进行调用。
2. 静态的函数可以直接访问静态的成员,但是不能直接访问非静态的成员。    
        原因:静态函数是可以使用类名直接调用的,这时候可能还没有存在对象,
        而非静态的 成员数据是随着对象 的存在而存在的。
3. 非静态的函数是可以直接访问静态与非静态的成员。
    原因:非静态函数只能由对象调用,当对象存在的时候,静态数据老早就已经存在了,而非静态
    数据也随着对象的创建而存在了。

4. 静态函数不能出现this或者super关键字。
    原因:因为静态的函数是可以使用类名调用的,一旦使用类名调用这时候不存在对象,而this
    关键字是代表了一个函数 的调用者对象,这时候产生了冲突。

静态的数据的生命周期:静态的成员变量数据是优先于对象存在的。

借鉴自 https://blog.csdn.net/qq_30764991/article/details/88782432

5.JAVA对方法参数能做什么和不能做什么

  • 方法不能修改基本数据类型的参数(即数值型或布尔值)
  • 方法可以改变对象参数的状态
  • 方法不能让一个对象参数引用另一个新的对象

总结:方法参数是值传递,而不是引用传递。(可以修改对象参数的状态是因为其值保持不变,值指向对象,对指向的对象内部进行修改,后面方法参数仍指向该对象,故可以改变)

6.类设计技巧

  • 一定要保证数据私有
  • 一定要对数据进行初始化
  • 不要在类中使用过多的基本类型
  • 不是所有的字段都需要单独的字段访问器和字段更改器
  • 分解有过多职责的类
  • 类名和方法名要能够体现它们的职责
  • 优先使用不可变的类

7.重写与重载

1. 重写(Override)

存在于继承体系中,指子类实现了一个与父类在方法声明上完全相同的一个方法。

为了满足里式替换原则,重写有以下三个限制:

  • 子类方法的访问权限必须大于等于父类方法;
  • 子类方法的返回类型必须是父类方法返回类型或为其子类型。
  • 子类方法抛出的异常类型必须是父类抛出异常类型或为其子类型。

2. 重载(Overload)

存在于同一个类中,指一个方法与已经存在的方法名称上相同,但是参数类型、个数、顺序至少有一个不同。

应该注意的是,返回值不同,其它都相同不算是重载。

你可能感兴趣的:(《JAVA核心技术》复习篇,java,基础,JAVA核心技术卷I)