Java概念复习

Java概念复习

程序设计法则与思想

KISS law, 2/8 law, 2+- 7 law, separate of concern…….

kiss law

keep it simple and stupid

简单原则,简单原则是软件设计的目标,代码简洁且高效,程序健壮性强且易修改

2/8 law

二八定律,程序设计中的核心逻辑占20%,其余占80%,即重要的部分占比小,其余的都是次要的

2+-7 law

抽象的本质

一个人一次只能理解大约七个,正负两个信息‎
‎块,此数字似乎与信息内容无关,我们每次能理解的信息量是有限的,但是我们可以通过为信息划分块,创建概念的方式将信息块打包。

我们将我们称这个过程为‎‎分块或抽象‎

separate of concern

关注分离

这是面向对象程序设计中的一种重要思想,在设计一个复杂系统的时候应当尽可能的将复杂问题拆分为多个简单的子问题,或是通过抽象的方式总结出复杂系统具有的不同特点,从问题的各方面进行切入,并以类和方法的方式对问题进行粒度拆分,对问题的不同面进行切入分析理解最终以合成设计出整体的解决方案,以达到降低程序设计难度的目的。

冯·诺依曼体系结构

是一种将程序指令存储器和数据存储器合并在一起的存储器结构

数学家冯·诺依曼提出了计算机制造的三个基本原则:

  • 即采用二进制逻辑
  • 程序存储执行
  • 计算机应该由五个部分组成
    • 运算器
    • 控制器
    • 存储器
    • 输入设备
    • 输出设备

这套理论被称为冯·诺依曼体系结构

C++与 Java 的比较

面向对象

Java相比C++具有更成熟的面向对象体系,是完全面向过程的语言,java的继承体系为单继承,但是可以实现多个接口,C++的继承体系为多继承

指针

Java中对指针的操作交由了jvm虚拟机处理,简化了复杂的指针操作,提高了代码质量

而C++中可以自由的操控指针,这使得C++可以直接操作内存,但也使得编程时更容易出错

布尔

Java中的布尔型只能是true或者是false,而C++中是非0为真和0为假

可移植性

不同平台都实现了对应的java虚拟机,这使得java源码可以在各大平台间移植(一次编写,到处运行),而C++则需要针对不同平台做不同的代码实现

内存垃圾回收

Java的内存垃圾回收机有专门虚拟机守护线程处理,而C++中则需要通过析构函数进行手动释放内存

语法

Java的语法很大部分都类似C++,Java的底层是由C实现的,因此两个语言在语法上都有异曲同工之处

操作符重载

Java不支持操作符的重载,而C++允许操作符重载

Java SE, java ME, Java EE

Java SE

标准版,主要用于开发和部署桌面,服务器应用,以及嵌入式环境中的java应用程序

Java ME

微型版,主要用于消费类电子设备,如数字机顶盒,可视电话

Java EE

企业版,主要针对企业应用开发,如电商系统,管理系统开发

JDK, JVM, JRE

jdk

java development kit

  • java开发工具,包含了java运行环境和系统类库,和java工具,如编译java源码为字节码文件的javac工具

jvm

java virtual machine

一个由C语言实现的虚拟计算机,用于解释运行java字节码

  • 解读字节码文件解释为机械码,实现java程序运行
    • java虚拟机,不同操作系统平台都实现了对应的java虚拟机,这使得java源码只需要编译为字节码文件交由各大平台的java虚拟机解释器转化为机械码进行运行即可实现java程序的运行
  • 对java程序对象内存进行自动化管理
    • java虚拟机具有完善的内存分配和回收机制以及线程的调控机制,java虚拟机帮助程序员完成了许多底层的重复性工作,从而使得程序员将注意力专注到核心业务逻辑上

jre

java runtime environment

java运行时环境,jre指的是java程序运行时所必须的运行环境,包括java类库集合,以及java虚拟机标准实现

Java 语言是解释型语言还是编译型语言

既是解释型也是编译型

为什么?

编译阶段来看,Java源码运行前需要通过编译器编译成字节码文件

解释阶段来看,字节码文件需要交由java虚拟机解释器进行逐行解释,然后转换为机械码才能执行

Java 语言的基本特征

面向对象:封装,继承,多态

跨平台性:一次编码,到处运行

安全性: 不可伪造指针

支持多线程: 支持并发执行,处理并发问题

编辑和执行 Java 程序的主要过程和产生的文件类型

在编译阶段,Java源代码被存储在**.java文件中,通过编译阶段被编译为.class**字节码文件

java编译器会将java类的全类名,构造函数,类属性,类方法等信息通过编码的方式保存为字节码文件

通过词法分析→语法分析→语义分析→中间代码生成→优化→字节码的过程编译为字节码

执行阶段将交由jvm对字节码进行解释,jvm将字节码解释为本地可执行机械码二进制文件,会对类进行加载,连接和初始化,生成对应的字节码对象在虚拟机堆中,然后创建类的实例,进行对象内存分配,对象初始化等工作

虚拟机程序计数器将不断指向下一条需要执行的指令,在这个过程中经历类加载和对象创建,虚拟机栈出栈和入栈的过程,从而实现java程序的运行

什么是 API

Application Program Interface

API是特定程序的对外暴露接口,提供了解决特定问题的方法,是系统软件的一组子程序,协议和工具。

它的主要作用?

在实现业务的时候可以通过调用API的方式来调用第三方服务,以实现某些特定的需求,程序员无需了解API的内部实现,只需要知道API的作用即可。

面向对象与面向过程

面向过程

数据结构+算法

分析出解决某个问题的步骤,按照每个步骤的需求实现代码并封装为函数,按照步骤依次调用函数即可

面向对象

对象+消息传递

将构成问题的场景和概念抽象为对象,创建对应的类,为每个类提供对应的方法和属性,面向对象是为了描述在整个问题中,对象所具有哪些属性和方法,对象与对象之间的关系是怎样的。

通过构建对象关系网络,以及组织网络的消息传递顺序来解决问题。

源程序与目标程序

源程序

就是源代码,可以通过高级语言,汇编语言编写的程序被称为源程序

源程序无法在计算机上直接运行,需要通过对应的解释器或编译器转换为机械码才能交由计算机处理

目标程序

即二进制程序,以.obj格式为文件扩展名,目标程序可以被计算机直接读懂但仍然不可以执行,需要将目标程序中的函数连接到函数库后才能执行目标程序中的程序

OO 的特点

Object Oriented 面向对象特点:

面向对象具有抽象性,封装性,多态性,继承性的特点

抽象性体现在需要将现实中的不同事物所具备的相同属性和行为抽象为对象

封装性体现在对象只对外暴露公有的属性和方法,而私有属性和方法只提供给对象内部使用,无法从外部访问进行修改,封装将数据和算法抽象为方法的方式提供给外界,外界只需要关注方法的作用而不需要关心其内部细节,从而简化了编程

多态性体现在java中的类都是面向接口或是继承自某个父类的,即为对象在不同环境下具有不同的状态,多态必须要有类与类间产生联系,同时也伴随着父类与子类的继承关系,通常会存在类上下级之间的转型

继承性体现在当类具有相同属性或方法的时候,子类可以通过继承的方式直接获取到父类的非私有属性和方法,这实现了代码的重用性。并且子类可以重写这些来自父类的方法以适应新的需求。

组合和继承

组合

组合是在当前类中创建现有类的对象

通过在当前类中组合其它类的对象,并调用来自其它类对象的方法来实现新的功能。

组合实现了代码的重用,但同时也增加了类与类之间的耦合度

继承

继承是java语言面向对象三大基本特性之一,通过extends关键字实现,java类可以继承来自父类的非私有属性和方法,继承实现了代码的重用,java中的所有类都默认继承java.lang.Object类

静态域变量与实例变量

静态域变量

静态域变量,即静态变量是由static关键字修饰的变量,其等级是和所在类属于同级的,在类中被static修饰的属性叫做静态属性,静态属性是当前类对象都共有的属性,并共用同一份内存,静态变量都存在于方法区内存中

静态变量在类初始化的时候就会进行初始化赋值

公有静态变量可以直接通过类名调用

实例变量

实例变量即类属性变量,只有在类实例化时通过构造函数创建对象时才会对实例变量进行初始化,公有实例变量可以通过对象名获取,私有实例变量一般由set和get方法获取。

相同类所创建的不同对象的实例变量是不同的,每个对象都有自己独立的实例变量内存,私有实例变量只能被当前对象的this指针所访问到


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 1300452403@qq.com

文章标题:Java概念复习

字数:2.8k

本文作者:Os467

发布时间:2022-12-07, 19:54:23

最后更新:2022-12-07, 19:54:30

原始链接:https://os467.github.io/2022/12/07/Java%E6%A6%82%E5%BF%B5%E5%A4%8D%E4%B9%A0/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

×

喜欢就点赞,疼爱就打赏