面向对象

学习主题:面向对象初步
学习目标:
1.掌握面向对象,了解面向过程
2.掌握什么是对象,什么是类
3.掌握通过类创建对象,调用对象的属性或方法
4.掌握jvm内存结构,以及程序运行jvm的变化过程

1.面向过程和面向对象的区别
(1)用你的理解解释一下什么是面向对象编程,什么是面向过程编程.
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
(2)哪些语言是面向对象语言?哪些语言是面向过程语言?
C++,java是面向对象语言,C语言是面向过程的语言
(3)为什么会出现面向对象的语言?
面向过程处理多协作事务比较困难
(4)总结一下面向对象和面向对象
面向对象和面向过程都是对软件分析、设计和开发的一种思想,它指导着人们以不同的方法去分析、设计和开发软件。都是解决问题的思维方式,都是代码组织的方式。解决简单问题可以使用面向过程。解决复杂问题:宏观上使用面向对象把握,微观处理上仍然是面向过程。

2.对象是什么_对象和数据管理
(1)说说你理解的对象是什么?
对象是一个类的实例

3.对象和类的关系_属性_成员变量_方法
(1)什么是类?什么是抽象?
类可以看作是一个模版,或者图纸,系统根据类的定义来造出对象。抽象是抽出象的部分,归纳找到特征
(2)说说类和对象的关系,举两个例子描述类和对象
对象是类的实例,人是一个类,具体的哪一个人如张三是对象;计算机专业是一个类,软件工程就是一个对象。
(3)类里面通常都有哪些东西?
类里面包含属性(fields)、方法(method)和构造器(constructor)

4.一个典型类的写法和调用_类的UML图入门
(1)如何创建一个类的对象?通过类的什么方法来创建对象?
通过类的构造方法(系统自动创建)来创建一个类的对象
(2)一个类可以包含另外一个类么?通过什么符号来调用类实例的方法或者属性?
一个类可以包含另外一个类,对象+“.”+方法/属性来调用

5.内存分析详解_栈_堆_方法区_栈帧_程序执行的内存变化过程
(1)JVM内存分为哪三个区域?方法区也在堆中,这句话对么?
分为三个区域:栈stack,堆heap,对。
(2)栈里面存储什么数据?栈的特点是什么?
栈里存储若干个栈帧(存储局部变量、操作数、方法出口等),是一个连续的内存空间
栈的特点是“先进后出,后进先出”,栈属于线程私有,不能实现线程间的共享!
(3)堆里面存储什么数据?堆的特点是什么?
堆中存储创建好的对象和数组(数组也是对象)
JVM只有一个堆,被所有线程共享
堆是一个不连续的内存空间,分配灵活,速度慢

(4)方法区里存储什么数据?方法区的特点是什么?
方法区(又叫静态区)里存储类、常量相关的信息
JVM只有一个方法区,被所有线程共享
分享/讲解/扩展思考
点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第8次(面向对象初步)
学习主题:面向对象初步
学习目标:
1 掌握构造方法
2 了解垃圾回收机制
3 掌握this关键字
4 掌握static关键字
5 掌握java中的参数传值机制
6 掌握package和import

1.构造方法详解_构造方法重载
(1)构造方法的作用是什么?构造方法的要点是什么?
用于对象的初始化
构造方法的要点是:

  1. 通过new关键字调用!!
  2. 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
  3. 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加!
  4. 构造器的方法名必须和类名一致!
    (2)构造方法重载的意义是什么?如果写了有参构造方法后,无参构造方法还存在么?
    为了方便调用类,如果写了有参构造方法后,系统不会自动创建无参构造方法,要自己创建才会存在。

2.垃圾回收机制介绍_垃圾回收算法(引用计数和引用可达)
(1)什么是java的垃圾回收机制?垃圾回收机制的要点是什么?
将java“无用的对象”进行回收
任何一种垃圾回收算法一般要做两件基本事情:
  1. 发现无用的对象
  2. 回收无用对象占用的内存空间。
  垃圾回收机制保证可以将“无用的对象”进行回收。无用的对象指的就是没有任何变量引用该对象。Java的垃圾回收器通过相关算法发现无用对象,并进行清除和整理。
(2)如何确定内存中的哪些对象是垃圾?
1.引用计数法
对每个对象进行引用计数,被引用一次,计数加1. 被引用变量值变为null,则计数减1,直到计数为0,则表示变成无用对象。优点是算法简单,缺点是“循环引用的无用对象”无法别识别。
2. 引用可达法(根搜索算法)
程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点。

3.通用分代垃圾回收详解(年轻代,年老代,持久代)
(1)垃圾回收机制的算法非常多,其核心思想是什么?垃圾回收最频繁的是在哪个代里面?
核心思想是分代
垃圾回收最频繁的是在年轻代
(2)什么是minorGC,什么是majorGC,什么是fullGC
Minor GC:
用于清理年轻代区域。Eden区满了就会触发一次Minor GC。清理无用对象,将有用对象复制到“Survivor1”、“Survivor2”区中(这两个区,大小空间也相同,同一时刻Survivor1和Survivor2只有一个在用,一个为空)
·Major GC:
用于清理老年代区域。
·Full GC:
用于清理年轻代、年老代区域。 成本较高,会对系统性能产生影响。

(3)垃圾回收的过程是什么?
1、新创建的对象,绝大多数都会存储在Eden中,
2、当Eden满了(达到一定比例)不能创建新对象,则触发垃圾回收(GC),将无用对象清理掉, 然后剩余对象复制到某个Survivor中,如S1,同时清空Eden区
3、当Eden区再次满了,会将S1中的不能清空的对象存到另外一个Survivor中,如S2,同时将Eden区中的不能清空的对象,也复制到S1中,保证Eden和S1,均被清空。

4、重复多次(默认15次)Survivor中没有被清理的对象,则会复制到老年代Old(Tenured)区中,
5、当Old区满了,则会触发一个一次完整地垃圾回收(FullGC),之前新生代的垃圾回收称为(minorGC)

4.this的本质_对象创建的过程
(1)写出创建对象的过程
创建一个对象分为如下四步:

  1. 分配对象空间,并将对象成员变量初始化为0或空
  2. 执行属性值的显式初始化
  3. 执行构造方法
  4. 返回对象的地址给相关的变量

(2)this指向哪里?同类中,一个构造器如何调用另外一个构造器?
this的本质就是“创建好的对象的地址”,指向当前对象。
只能在构造方法中用,并且必须位于构造方法的第一句this+(参数)

5.Static关键字_内存分析静态变量和静态方法
(1)Static修饰变量称之为什么?static修饰方法称之为什么?
静态变量,静态方法
(2)被static修饰的变量和方法从属于谁?没被static修饰的变量和方法从属于谁?
被static修饰的变量和方法从属于类。普通变量和方法从属于对象。
(3)在同一个类中,在非静态方法中,如何调用本类的静态方法和静态变量?
通过类名.方法名/变量名调用
(4)在同一个类中,在静态方法中,如何调用本类的静态方法和静态变量?
直接调用
(5)在同一个类中,在静态方法中,如何调用本类的非静态方法和非静态变量?
静态方法中不能调用非静态方法和非静态变量
(6)在不同类中,A类的方法如何调用B类的非静态方法或者非静态变量?
首先在A类中创建B类的对象实例,然后通过对象.非静态方法或者非静态变量来调用
(7)在不同类中,A类的方法如何调用B类的静态方法或者静态变量?
在A类中直接通过B类.静态方法名或者静态变量名调用即可

6.静态初始化块_继承数的追溯
(1)静态初始化块的作用是什么?什么时候执行静态初始化块?
静态初始化块,用于类的初始化操作。在静态初始化块中不能直接访问非static成员。
在加载类时候就执行了静态初始化块。在构造器之前执行

7.Java的参数传值机制_值传递
(1)写代码解释为什么说java中参数传递是值传递
传递的是值的副本,副本不会影响原件。
package an.sz.test;
public class Test2 {
public static void main(String[] args) {
int a = 10;
int b = 20;
change(a,b);
System.out.println(a+"—"+b);
}
private static void change(int a, int b) {
int temp = a;
a = b;
b = temp;
}
}
打印出来的a依然等于10,b依然等于20;
(2)基本数据类型传递和引用数据传递一样么?
基本数据类型传递和引用数据类型的传递是不一样的,基本数据类型传递是值的传递,引用数据类型的传递是地址值的传递

8.Java包机制_package的使用_jdk提供的常见包的作用
(1)Java中Package的作用是什么?
Java中package的作用相当于文件夹
(2)Jdk有哪些常见包,分别什么作用?

JDK中的主要包
Java中的常用包 说明
java.lang 包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.awt 包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
java.net 包含执行与网络相关的操作的类。
java.io 包含能提供多种输入/输出功能的类。
java.util 包含一些实用工具类,如定义系统特性、使用与日期日历相关的函数。

9.Import详解_静态导入详解
(1)什么情况下需要导包?
两个类不在一个同包里
(2)怎么导入一个包下的所有类?java默认导入了什么包?
import+包名+“.*”; java默认导入了java.lang包
(3)如果需要使用不同包下的同名类怎么办?
此时我们需要在类名前把包名也加上
(4)什么是静态导入?
用于导入指定类的静态属性,这样我们可以直接使用静态属性。

你可能感兴趣的:(面向对象)