学习主题:面向对象初步
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应作业:
1. 面向过程和面向对象的区别
(1) 用你的理解解释一下什么是面向对象编程,什么是面向过程编程.
面向过程编程就是可以单一的按照步骤完成某件事。
面向对象编程是需要协作按照模块来一个个的完成,针对大型项目可优先选择面向对象。
(2) C语言面向过程的语言,C++,Java,Python等是面向对象的语言
(3) 为什么会出现面向对象的语言?
当我们思考计较复杂的问题,就会发现按照1234这样的步骤是不可能实现的,而是需要很多协作才能完成,此时面向对象思想也就应用而生了,也就出现了面向对象的语言。
(4) 面向过程与面向对象的总结:
- 1、 都是解决问题的思维方式,都是大妈组织的方式
- 2、 解决简单问题可以使用面向过程
- 3、 解决复杂问题:宏观上使用面向对象把我,围观处理上仍然是面向过程
2. 对象是什么_对象和数据管理
对象是一种数据管理的方式
3. 对象和类的关系_属性_成员变量_方法
(1) 类:可以看作是一个模板,或者图纸,系统根据累的定义来造出对象。
抽象:便于认识未知事物总结的过程
(2) 说说类和对象的关系,举两个例子描述类和对象
通过抽象创建类,程序通过运行产生对象。
蔬菜可以是类,各种蔬菜就是各个对象
(3) 类里面通常都有:属性,方法,构造方法,对象……
4. 一个典型类的写法和调用_类的UML图入门
(1) 如何创建一个类的对象?通过类的什么方法来创建对象?
new 类名; 这样就可以创建一个对象
通过类的构造方法来创建对象
(2)一个类可以包含另一个类,通过“.”来调用类实例的方法或者属性。
5. 内存分析详解_栈_堆_方法区_栈帧_程序执行的内存变化过程
- 1、Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method
- 2、area方法区也在堆中。
(2) 栈存储线程执行方法的信息(实际参数、局部变量等)
栈的特点:
- 1、 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量、操作数、方法入口)
- 2、 JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等)
- 3、 栈属于线程 私有,不能实现线程间的共享
- 4、 栈的存储特性是“先进后出,后进先出”
- 5、 栈是由系统自动分配,速度快。展示一个连续的内存空间
(3) 堆里面存储创建好的对象和数组(数组也是对象)
堆的特点:
- 1、 对用于存储创建好的对象和数组(数组也是对象)
- 2、 JVM只有一个堆,被所有线程共享
- 3、 堆是一个不连续的内存空间,分配灵活,速度慢
(4) 方法区存储程序中永远不变或唯一的内容。(类信息[class对象]、静态变量、字符串常量)
方法区(静态区)的特点:
- 1、 JVM只有一个方法区,被所有线程共享
- 2、 方法区实际也是堆,只是用于存储类、常量相关的信息
- 3、 用来存放程序中永远不变或唯一的内容。(类信息[class对象]、静态变量、字符串常量)
学习主题:面向对象初步
对应视频:
http://www.itbaizhan.cn/course/id/85.html
对应作业
1. 构造方法详解_构造方法重载
(1) 构造方法的作用是用于对象的初始化。
构造方法的要点是:
- 1、 通过new关键字调用
- 2、 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。
- 3、 如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加。
- 4、 构造器的方法名必须和类名一致。
- 1、构造方法的重载和方法的重载是一样的,重载的构造方法,实际是完全不同的方法,只是名称相同而已,是故意取了相同的名,为了方便使用。
- 2、如果我们没有定义构造器,则编译器会自动定义一个无参的构造函数。如果已定义则编译器不会自动添加。
2. 垃圾回收机制介绍_垃圾回收算法(引用计数和引用可达)
(1) Java的垃圾回收机制是:对象空间的分配和释放。
要点:
- 1、发现无用的对象
- 2、回收无用对象占用的内存空间
(2) 如何确定内存中的哪些对象是垃圾?
就是没有任何变量引用该对象。
3. 通用分代垃圾回收详解(年轻代,年老代,持久代)
(1) 垃圾回收机制的算法非常多,其核心思想是:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的回收算法,以便提高回收效率。
垃圾回收最频繁的是在年轻代里面
(2) MinorGC用于清理年轻代区域
MajorGC用于清理老年代区域
fullGC用于清理年轻代、年老代区域
(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修饰的变量和方法从属于对象。
(3) 在同一个类中,在非静态方法中,直接调用本类的静态方法和静态变量。
(4) 在同一个类中,在静态方法中, 直接调用本类的静态方法和静态变量。
(5) 在同一个类中,在静态方法中,通过对象调用本类的非静态方法和非静态变量。
(6) 在不同类中,A类的方法通过对象调用B类的非静态方法或者非静态变量。
(7) 在不同类中,A类的方法通过B类的类名调用B类的静态方法或者静态变量。
6. 静态初始化块_继承数的追溯
静态初始化块的作用是用于类的初始化操作。
先执行object的静态初始化块,再向下执行子类的静态初始化块,直到类的静态初始化块为止。
7. Java的参数传值机制_值传递
(1) 写代码解释为什么说java中参数传递是值传递
public static void main(String[] args) {
User4 u1 = new User4(100,"高小七");
在main方法下,创建了一个新的对象,并把新对象的地址给了u1,
u1.testParameterTrabsfer01(u1);
调用testParameterTrabsfer01(u1),把u1的值复制给了u
u.name = "高小八";
修改了新对象的参数name
(2) 基本数据类型传递和引用数据传递一样。
8. Java包机制_package的使用_jdk提供的常见包的作用
(1) Java中Package的作用通过package实现对类的管理
(2) Jdk有哪些常见包,分别什么作用?
9. Import详解_静态导入详解
(1) 需要调用另一个包里面的类的情况下需要导包
(2) 怎么导入一个包下的所有类?
包名.* 可以导入一个包下的所有类
Java默认导入了java.lang包下的所有类
(3) 如果导入两个同名的类,只能用包名+类名来显示调用的相关类。
(4) 静态导入(static import)是用与于导入制定类的静态属性,这样就可以直接使用静态属性。