白_Java_面向对象


注:网页版右上方的悬浮框有目录索引

一、认识类与对象

1】什么是面向对象?

  • 使用封装、继承、多态、抽象等思想进行软件分析和开发
  • java 是一门面向对象语言

2】什么是类?

  • 具有相同属性和方法的一组对象的集合
  • 定义了对象将会拥有的特征(属性)和 行为(方法)

3】什么是对象?

  • 用来描述客观事物的一个实体

4】类的组成部分?

  • 成员变量
  • 成员方法

5】类和对象的关系?

  • 抽象与具体
  • 类是对象的抽象,对象是类的实例
  • 类是抽象的,不占内存
  • 对象是具体的,占用存储空间

二、类的方法1

1】什么是成员变量

成员变量
  • 类中,方法外
  • new 时存在堆中,对象被回收时消失
  • 成员变量可以设置初始化也可以不设置,如果设置会有默认值

2】成员变量又可分实例成员变量和静态成员变量以及各自的特点?

实例成员变量
  • 属于对象的,存在堆中
  • 有几个对象就有向个实例对象
  • 必须通过对象名. 来访问
静态成员变量
  • 属于类的,存在方法区中
  • 只有一份
  • 常常通过类名. 来访问

3】什么是局部变量?

  • 在方法中
  • 调用方法时存在栈中,方法调用结束时与栈桢一并消失
  • 没有默认值

4】方法的调用方式?

普通类
  • 对象名. 方法名
静态类
  • 通过类名直接访问

5】创建包的关键字 package 和 导入包的关键字 import 的使用?

package
  • 类中第一行非注释性语句
  • 作用:避免类的命名冲突
  • 所有包名小写,且有层次结构
import
  • 作用:声明类 / 引入类
  • 同包中的类可以直接访问
不同包中的类访问
  • 先 import 声明类再访问类(建议)
  • 类的全称——太繁琐(不建议)

三、类的方法2

1】什么是方法形参和实参

  • 形参是定义方法时使用的参数,用来接收调用者传递过来的参数。
  • 实参是调用时传递给方法的参数,正常情况下传递给别的方法前是要被先赋值的。

2】调用方法实参实际注意事

  • 实参的 个数类型顺序 要和被调用方法声明的参数列表相匹配

3】Java 中定义的方法形式?以及使用方法的好处?

  • 方法的参数列表,可以是有参的、也可以是无参的。
  • 有参方法是指()包含一个或多个变量的定义,也称为参数列表
  • 无参方法是指()中不含参数
  • 好处是:提高代码的复用性

4】什么是值传递和引用传递?

值传递*
  • 方法调用时,函数接收的是原始值的副本,此时内存中存在两个相等的基本类型,方法中对形参进行操作不会影响实参
引用传递
  • 方法调用时,函数接收的是地址,对形参进行处理会影响实际参数。
注意
  • 包装类都是 immutable 类型,没有提供自身修改的函数,每次操作都是新生成一个对象,可以认为是和基本数据类型相似,传值操作。

5】this 的作用?

  • 本类当前的引用对象
  • 可以调用本类成员变量、成员方法、构造方法
  • 用来区别局部变量成员变量

四、继承与封装

1】什么是封装?封装的原则?好处?

  • 封装:将成员属性私有化
  • 封装的原则:将不需要向外提供的信息隐藏;对外提供公共的访问方法。
  • 好处:提高安全性、提高代码的重用性、便于使用

2】封装就是私有,对吗?为什么?get/set 访问方式必须成对出现吗?

  • 不对。private 仅仅是封装的一种体现。我们常用的类、方法、函数也是封闭。只要是对外不可见,即可达到封装效果。如包与包之间的访问
  • get / set 访问方式不是必须成对出现的,代码是根据业务功能实现的。

3】构造方法的特点

  • 方法名和类名完全一致
  • 没有返回值
  • 但是可以有 return 关键字

4】构造方法,set 方法都可以给成员变量赋值,这种赋值方式有什么区别?

构造方法
  • 构造方法主要作用是来给对象初始。构造方法重新赋值,相当于重新创建了一个对象
set 方法
  • 在原有对象的基础上进行修改值。

5】静态代码块和构造代码块的区别?

静态代码块
  • 随着类的加载而加载,一般用来加载驱动。只在类加载的时候仅执行一次。优先于构造方法。
构造代码块
  • 放的是构造方法的共性内容,为了简化书写,调高次第。每创建一次对象就执行一次。优先于构造方法。

五、接口&抽象类

1】类变量(静态变量)和实例变量(对象变量,成员变量)的区别?

  • 所属类不同:静态变量属于类,是对象的共性内容;实例变量属于对象,是对象的特性内容
  • 在内存中位置不同静态变量 存在方法区的静态区;实例变量 则存在堆内存中
  • 生命周期不同:静态变量随着类的消亡而消亡。实例变量随着对象的消亡而消亡。
  • 调用方式不同:静态变量即可以通过类名调用也可通过对象调用,而实例变量只能通过对象调用

2】什么是继承?

  • 当多个类有相同的属性、方法,我们即会将其共性特点抽取出来封装成一个类。多个类再分别与封装的类产生关系,这即是继承

3】继承的特点和好处,弊端?

特点
  • 类只支持单继承,即一个类只能有一个父类,但一个类可以有很多子类
  • 接口与接口间的继承,没有限制
好处
  • 提高了代码的利用性、维护性、可扩展性
  • 类与类产生了联系,是多态的前提
弊端
  • 增强了类与类的耦合性(模块、代码,之间的联系)

4】this 和 super 的区别?

this
  • 本类对象的引用。在哪个类中用,就代表谁
super
  • 父类的引用,可以通过它来访问父类的成员(当前对象父类的内存空间标识)

5】super() 和 this() 在构造方法能同时使用吗?

  • 不能,super() 调用的是父类的空参构造,this() 调用的是本类的空参构造。他们都要求放在构造方法第一行,产生冲突,所以不能同时使用。

六、多态与方法重写

1】Java 的访问修饰符是什么?

  • 类成员访问权限的关键字。用来限定成员变量或成员方法的访问权限。
  • public:公共的,所有类都可以访问
  • protected:受保护的,同一个包内以及所有子类都可以访问
  • 默认:默认的,同一包中的类可以访问
  • private:私有的,只有本类才可以访问

2】什么是多态?使用多态的好处以及弊端?

多态
  • 多态是同一个行为有不同的表示形式
好处
  • 提高了代码的维护性(继承保证)
  • 提高了代码的扩展性(由多态保证)
弊端
  • 不能使用子类特有的方法

3】Java 中实现多态的机制是什么?

  • 方法的重写和重载是 Java 多态性的不同表现。
  • 重写是父子类间多态的表现形式
  • 重载是同一个类中多态的表现形式

4】方法重载和方法重写区别?

重载
  • 同类、同名,不同参。与返回值类型无关
重写
  • 父子类中,同名、同参、同返回值类型。重写方法的访问修饰符不能严于父类

5】Java实现多态的必要条件?

  • 继承、重写、向上转型
  • 继承:多态的前提
  • 重写:子类重写了父类的方法
  • 向上转型:子类的引用赋给父类对象

七、异常

1】try-catch-finally 异常捕获的执行流程?

  • 若 try 中抛出异常,则进入 catch 中寻找合适的异常处理方法。若没有找到,则执行 finally 或直接结束程序运行。
  • 无论 try 中语句是否发生异常,finally 终究会被执行。
  • 若在 catch 中出现 return 语句时,执行 return 语句前,先执行 finally 语句块
  • finally 唯一不执行情况:在执行 finally 语句块前出现了 System.exit(o)

2】throw 和 throws 关键字的区别?

  • thorw 用来抛出异常,在 catch 中处理
  • throws 用来声明异常,将异常抛出给调用者进行处理

3】异常的两种类型,Error 和 Exception 的区别?

  • error:表示仅靠程序本身无法恢复的错误,内存溢出、动态链接失败、虚拟机错误。
  • exception:由 Java 应用程序抛出的非严重错误

4】运行时异常与一般异常有何异同?

  • 运行时异常:java 编译器要求方法,不要求必须声明异常
  • 一般异常:必须声明抛出可能发生的非运行时异常

5】final,finally,finzlize 的区别?

  • final:用于声明属性、方法和类。分别表示属性不可变、方法不可覆盖、类不可继承。
  • finally:是异常处理语句结构的一部分,表示总是执行。
  • finalize:是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。

八、实例

1】抽象类的特点

  • 抽象方法和抽象类都必须被 abstract 关键字修饰
  • 抽象方法一定在抽象类中
  • 抽象灰不可以实例化
  • 子类必须覆盖抽象父类的所有抽象方法,除非子类是抽象类

2】abstract 关键字,和哪些关键字不能共存?

  • final:修饰抽象类的时候,因为被 final 修饰的类不能有子类(不能被继承)。而被 abstract 修饰的类一定要有子类,不然此抽象类就没有意义了
  • private:修饰抽象方法的时候,抽象类中私有的抽象方法,不能被子类所知(无法复写)。而抽象方法的出现就是要被覆盖。
  • static:修饰抽象方法的时候,抽象方法没有方法体,即使被类名调用,运行也没有意义。

3】接口的特点?

  • 接口不可实例化
  • 接口的成员变量全部是 public、static、final 修饰符修饰
  • 接口里的成员方法全部是 public、abstract 修饰符修饰
  • 接口里不能包含普通方法
  • 子类实现接口,必须重写接口中所有的成员方法,除非子类是抽象类

4】面向接口编程的好处?

  • 更加抽象,更加面向对象
  • 提高编程的灵活性
  • 实现高内聚、低耦合
  • 提高可维护性,降低系统维护成本

5】抽象类和接口的区别?

  • 抽象类可以有构造方法,接口中不能有构造方法
  • 抽象类中可以有普通成员变量,接口中的成员变量全部是 public、static、final
  • 抽象类中可以有普通方法,接口中只能是抽象方法,访问修饰符默认为 public
  • 抽象类中可以包含静态方法,接口中不可以
  • 静态成员访问修饰符:抽象类中可以任意,接口中只能是 public、static、final
  • 一个类可以实现多个接口,但只能继承一个抽象类

猜你喜欢

转载自blog.csdn.net/ice_debj/article/details/103644873