JAVA面向对象(01)基础

一、概述

1、面向对象和面向过程的总结

  • 解决简单问题可以使用面向过程;
  • 解决复杂问题:宏观上面向对象,微观上面向过程;

2、面向对象思考方式

  • 遇到复杂问题,先从问题中找名词,然后确立这些名词哪些可以作为类;
  • 再根据问题需求确定的类的属性和方法,确定类之间的关系;

3、面向对象具有三大特征:封装性、继承性和多态性

二、类和对象

1、对象的本质

  • 对象说白了也是一种数据结构,将数据和数据的行为放到了一起;
  • 在内存上,对象就是一个内存块,存放了相关的数据集合;
  • 对象的本质就一种数据的组织方式

2、类和对象的关系

  • 对象是具体的事物;类是对对象的抽象;
  • 类可以看成一类对象的模板,对象可以看成该类的一个具体实例;
  • 类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性和方法;

3、类

(1)类的成员:属性field、方法method、构造器constructor

(2)属性(field、成员变量)

  • 属性是该类(实例)的包含数据和静态特征;
  • 分为静态成员(static)和非静态成员;
  • 成员变量默认初始化,可以直接使用;

(3)方法

  • 方法是该类(实例)行为特征和功能实现;
  • UML类图

(4)构造器constructor

  • 是一种特殊的方法,用于对象的初始化;
  • 方法名和类名一致,可以有参数,也可以有修饰符;
  • 有返回值,但不能定义返回值类型;
  • 通过new关键词来调用;
  • 构造器也可以重载;

4、面向对象的内存分析

  • Java虚拟机的内存可以分为三个区域:栈stack、堆heap、方法区method area;

(1)栈的特点如下:

  • 方法执行入栈,执行完后弹栈;
  • JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数、局部变量等);
  • 栈属于线程私有,不能线程间共享;
  • 栈的存储特性是 先进后出,后进先出 ;
  • 栈是一个连续的内存空间,速度快;

(2)堆的特点如下:

  • 堆用于存储创建好的对象和数组;
  • JVM只有一个堆,被所有线程共享;
  • 堆是一个不连续的内存空间,分配灵活,速度慢;
  • 堆中的常量池;

(3)方法区(静态区)特点如下:

  • 一个方法区,所有线程共享;
  • 方法区实际也是堆,用来存放程序中永远是不变或唯一的内容(字节码对象、静态成员、字符串常量等);

(4)内存分析:

neicunfenxi.png

5、垃圾回收机制(Garbage Collection)

(1)内存管理:

  • Java的内存管理很大程度指的就是对象的管理,其中包括对象空间的分配和释放;
  • new 则分配内存空间,对象的引用赋值为 null 则释放空间;

(2)回收原理

  • 发现无用对象,回收相应的空间;

(3)回收算法

  • 引用计数法,无法识别循环引用;
  • 引用可达法(根搜索算法);

(4)通用的分代垃圾回收机制

  • 年轻代(Minor GC清理年轻代区域)
  • 年老代(Major GC清理老年代区域)
  • 持久代(Full GC清理年轻代和年老代区域)
  • Full GC 成本高,影响系统性能
  • 调用System.gc(),只是通知JVM,并不是运行垃圾回收器

(5)开发中容易造成内存泄露的操作

  • 创建大量无用对象
  • 静态集合类的使用
  • 各种连接对象(IO流对象、数据库连接对象、网络连接对象)未关闭
  • 监听器的使用

6、this 和 static 关键字

(1)对象创建的过程

  • 分配对象空间,初始化成员变量;
  • 执行属性值的显示初始化;
  • 执行构造方法;
  • 返回对象的地址给相关的变量;

(2)this

  • this的本质就是 创建好的对象的地址 ;

   this用法:

  • 用来区分成员变量和局部变量;
  • 普通方法中,this总是指向调用该方法的对象;
  • 构造方法中,this总是指向正要初始化的对象;
  • 在构造方法中使用 this()关键字调用重载的构造方法,并且必须位于构造方法的第一句;
  • this不能用于static方法中;

(3)static

  • 类中的变量和方法可以加 static 来修饰;
  • static修饰的成员变量和方法,从属于类;
  • 普通变量和方法从属于对象的;   
  • 静态成员的调用:类名/对象.成员;
  • 静态不能调用非静态,反之可以;  

7、静态代码块

(1)静态代码块和构造器的区别

  • 构造方法用于对象的初始化;
  • 静态初始化块用于类的初始化操作;
  • 静态代码块先于构造器执行;
  • 静态代码块和构造器的执行顺序都是从 object 类向下执行;

8、参数传值机制

  • Java中,方法中所有参数都是“值传递”,也就是“传递的是值的副本”;
  • 基本类型和引用类型的传参;

9、包(package

(1)包的概念:类似于文件夹,用来进行分类管理的;

(2)com.gao和com.gao.car,这两个包没有包含关系,是两个完全独立的包,只是逻辑上看起来后者是前者的一部分;

(3)类的导入

  • 默认导入java.lang包下所有的类,这些类可以直接使用;

  • 如果导入两个同名的类,只能用 包名+类名 来区分: 

(4)静态导入(import static)用于导入指定类的静态属性,导入后可以直接使用静态属性。

猜你喜欢

转载自blog.csdn.net/stanwuc/article/details/82908663
今日推荐