【从零开始重学Java】第1天

发布时间 2024-01-03 18:04:33作者: 迷路的哨兵甲

前情提示

从零开始重学Java 第0天

概述

  • Java SE EE ME

Java SE(Standard Edition) 标准版本,就是我们最常用的版本了

Java FX,用于客户端界面开发,对标C#的WPF、C++的Qt,以前集成在SE里,Java11以后已经从SE中分离,Swing+FX组合可以用于开发一些客户端软件,比如IDEA(所以是吃内存大户)

Java EE(Enterprise Edition) 企业版,定义了一套规范接口,主要作为一种规范交给各大企业去实现,最典型的例子就是Servlet、JDBC

Java ME(Micro Edition) 微型版,用于嵌入式设备和移动设备上,非智能机时代(比如诺基亚)上的手机QQ、各种应用和游戏几乎都是基于它的,很多人第一次见Java的Logo的地方,随非智能机而兴起,随非智能机而衰败

Java手机qq

什么是Java语言

C语言开发弊端太多了,搞一门新的高级编程语言,解决痛点,也多一些方便

Java语言的特点

  • 简单的、面向对象的语言,语法简单功能强大

去掉了C容易出错和麻烦的地方(比如指针),简化C的常用代码(比如字符串,C语言处理字符串简直折磨),而且是面向对象编程,万物皆对象

  • 分布式与安全性

内置支持常用网络协议,自带安全检查(参数类型匹配、对象访问权限等代码问题、检查字节码是否被恶意篡改等等)

  • 跨平台,与平台无关

解决C语言不能跨平台,Java的基于JVM跨平台直接降维打击,一套代码主流系统都能跑起,话说现在C#的.NET Core,C++的QT框架也是跨平台的,其实主要还是跨Win和Linux

  • 解释执行+编译执行

Java代码的执行过程其实很复杂,todo 《深入理解JVM虚拟机》
JIT(just-in-time)编译器等等

  • 多线程

C语言不支持多线程,没什么好说的

  • 动态执行

编译型的C语言不能动态修改程序的逻辑,于是Java里有了反射、动态代理(AOP)、动态类加载(ClassLoader)、动态代码生成(ASM)
动态执行可以不用重启程序就能修改代码

  • 丰富的API文档和类库

Javadoc 可以根据源代码和注释等生成HTML文档,用过的都说好用,注释里还可以写HTML标签,加个链接什么的非常清楚

Java的三层架构

课本这段说的云里雾里的,主机架构,客户/服务器架构?不知道课本说的三层代指什么

一般我们现在说Java三层架构都是指的做Web服务端时的那三层架构

表示层(Presentation Layer):
表示层也叫做用户界面层,负责与用户进行交互,接收用户的输入并展示数据给用户。它通常包括用户界面的设计、页面渲染、表单验证等功能。在 Java 中,表示层通常使用 JavaFX、Swing 或者 Web 框架(如 Spring MVC)来实现。

业务逻辑层(Business Logic Layer):
业务逻辑层也叫做服务层或应用层,它包含了应用程序的核心业务逻辑。在该层中,开发人员实现了与业务相关的处理和计算,包括数据处理、业务规则验证、事务管理等。在 Java 中,业务逻辑层通常使用面向对象的编程方式来实现,可以使用 POJO(Plain Old Java Object)、Spring Bean 等。

数据访问层(Data Access Layer):
数据访问层也叫做持久层,负责与数据存储系统(如数据库)进行交互,并提供数据的增删改查操作。该层主要处理数据的持久化、连接管理和数据访问的细节。在 Java 中,数据访问层通常使用 JDBC(Java Database Connectivity)或者 ORM(Object-Relational Mapping)框架(如 Hibernate、MyBatis)来实现。

Java语言的目标

千言万语,就是为了抛弃当时在软件开发方面表现很差劲的C语言

  • 面向对象
  • 提供一种解释环境
  • 去掉指针,自动管理内存
  • 多线程支持
  • 动态执行,运行中修改代码逻辑
  • 代码安全检查

Java虚拟机

  • 在一台真正的机器上用软件方式实现的一台假想机,有一套统一的接口规范交给不同系统来实现
  • JVM具体实现包括 指令集、寄存器组、类文件格式、栈、垃圾收集堆、内存区域
  • 早期纯解释--->解释+编译

jvm1
jvm2

垃圾收集

神! 还是建议虚拟机这块单独拎出去看看,课本写的太简略了,只写了结论

代码安全

一个基本的Java应用程序

开发环境的安装

基本可以略过,现在都一键了,openjdk的msi安装程序,环境变量都帮你配好的
顺带一提,CLASSPATH(告诉JVM去哪查找类和资源文件)在Java9已经被完全废弃,Java8及其以后只需要PATH就行(JAVA_HOME要不要都可以,最好带上,因为有些Java程序会使用JAVA_HOME路径)

  • \bin 解释器、编译器
  • \lib 开发类库
  • \jre 虚拟机
  • javac 编译器
  • java 解释器
  • jdb 调试器
  • javap 反编译器,反编译Class字节码文件
  • javadoc 生成文档
  • appletviewer Applet解释器 (Applet技术已被废弃 Java11完全移除)

Java应用程序

程序的编译和运行

编译

运行

常见错误

编译时错误

运行时错误

使用Java核心API文档

第一章课后习题

  • 简述Java语言的特点

面向对象、多线程、解释+编译执行、动态执行、跨平台、安全检查

  • 什么是Java虚拟机,它包括哪几部分

Java虚拟机是一种抽象化虚拟的计算机,包括指令集、寄存器组、类文件格式、栈、垃圾收集堆、内存区域

  • 简述JVM的工作机制

装载:JVM通过类加载器(ClassLoader)将Java源代码编译后的字节码文件装载到内存中
链接:在类装载的过程中,JVM会检查字节码文件的正确性,并进行符号引用的解析和调整,生成可执行代码
初始化:类被载入到内存后,JVM会为类变量分配内存并赋上默认值,然后执行静态代码块,完成类的初始化
执行:JVM将解析后的字节码文件转换为机器码并执行
卸载:当一个类不再被引用时,JVM负责卸载该类并释放内存空间

  • Java语言的安全机制有哪些

类加载器:Java语言使用类加载器来加载和验证类文件,可以防止恶意代码的注入
字节码校验器:Java语言使用字节码校验器来检查字节码文件是否符合Java语言规范,可以防止恶意代码的攻击
安全管理器:Java语言提供了安全管理器,可以控制程序的访问权限,防止程序越权访问
异常处理机制:Java语言的异常处理机制可以捕获并处理程序运行时出现的异常,避免程序崩溃或泄漏敏感信息
此外,Java语言还提供了一些安全API和工具,比如加密算法、数字证书、安全套接字等等,可以帮助开发者更好地保护程序的安全性,总之,Java语言的安全性是其一个重要的优势,为开发者提供了很多安全保障

  • Java的垃圾收集机制与其他语言相比有什么特点

以前的语言要求程序员显式地分配内存和释放内存,这样做虽然灵活,但很容易会造成“内存泄漏”,JAVA是利用垃圾收集器来管理内存的,当一个对象不再使用时,就达到可回收的标准,但不代表垃圾收集器会立即收走该部分内存,垃圾收集器是一条优先级较低的线程,由于引入了垃圾收集机制,使JAVA程序员从手工收集内存的繁重工作中解脱出来,专心关注自已的业务逻辑

  • 打印个Hello World

简单

  • 练习使用浏览器查看Java API文档

javadoc都看过吧

  • 列出java.lang中所有的类

Object, Class, String, StringBuilder, StringBuffer, Math, System, Runtime, Throwable, Exception, Error, Thread, Runnable, Enum, Iterable, Comparable, Boolean, Byte, Short, Integer, Long, Float, Double

  • 列出java.applet中Applet类的所有父类

Panel, Container, Component, ImageObserver, MenuContainer

  • 列出java.awt中的所有接口

ActiveEvent, Adjustable, ClipboardOwner, Composite, ContainerEvent, DesktopIconMovable, DialogModalExclusionType, DisplayMode, EventListener, FocusTraversalPolicy, GraphicsObject, ImageObserver, ItemSelectable, LayoutManager, MenuContainer, MultipleGradientPaint.CycleMethod, Paint, PrintJob, RenderingHints.Key, Stroke

  • 列出java.lang.Math类中的常用方法,并总结Math类的功能

abs, acos, asin, atan, ceil, cos, exp, floor, log, max, min, pow, random, round, sin, sqrt, tan
提供了各种数学计算的静态方法,方便进行数值计算

  • 查阅API文档,列出java.lang.String类的常用方法

length, charAt, substring, indexOf, equals, toUpperCase, toLowerCase, trim, replace, split

  • 查阅API文档,列出java.util.Random类的常用方法

nextInt, nextInt, nextBoolean, nextDouble, nextFloat, nextLong, nextGaussian, setSeed

  • 查阅API文档,列出java.awt.Color类的常用方法

getRed, getGreen, getBlue, getAlpha, getRGB, brighter, darker