浏览器输入一个地址,就能获取一个页面,页面资源可以由Java程序提供。
Java
Java程序 经过 开发编译运行 才能提供资源,整个过程由JDK(Java SE Development Kit)实现。
程序是指令集合,声明解决问题的步骤。Java语言实现的程序 可以被 计算机识别。
简要说下JDK8提供的功能,参考 Java8 Docs (oracle.com) Java Downloads | Oracle
JDK8文件结构
├── bin
│ ├── java
├── jre
│ ├── bin
│ ├──server
│ ├── lib
│ │ ├── rt.jar
- Java语言 java.lang(The Java Programming Language )有特定的语法规则,组成Java API
- Java API /jre/rt.java(The Java Application Programming Interface)组件集合+三方库
- JVM /jre/server(The Java Virtual Machine)用于运行程序,提供内存管理(分配、回收和溢出)和访问 机制,能避免大部分的内存泄漏和指针越界问题。
- 工具 /bin:文档Javadoc;编译Javac;运行java;监控(javap,javaws,jconsole,jmap,jstack,jstatd,jvisualvm)
组件的概念:软件提供产品;组件提供可重复使用的半成品;程序员加工组件,做成产品。
不可复用的部分,Java8通过函数式接口传递有差异的方法。
Java 语法
(整个Java语言特性体现在Java封装的API中)
- 语言基本:data types, variables, arrays, operators, and control flow.
- 强类型:基本类型,自定义类型(Number, Strings, Enum枚举, Collections)
- 面向对象:Class, Interfaces, Generics泛型,Throwable
- 多线程:
- 注解:给compiler提供Metadata
< Java5:集合框架、异常、反射代理、并发、正则、文件、网络、
Java5:枚举、泛型、注解、封箱(解箱)、for-each
Java6:@Override
Java7:Diamond 语法、try-with-resources
Java8:Lambda 语法、可重复注解、类型注解、Stream
Java程序被编写在.java文件中,经过 javac compiler 编译成 .class文件(bytecodes,JVM的机器语言),由JVM实例运行。
因为JVM在不同的平台上有不同的实现,对Java程序隐藏平台差异性,因此Java程序编写一次就可以运行在不同的平台上,即Java程序有跨平台的特性。
平台:平台是运行程序的硬件或软件环境。一些最受欢迎的平台,如Microsoft Windows,Linux,Solaris OS和Mac OS。大多数平台都可以描述为操作系统和底层硬件的组合。
Java API
举例 代表类。
lang and utils
java.lang:
注解: Annotation,
反射,动态代理: Type,InvocationHandler,
类加载: ClassLoader,
异常: NoSuchMethodException,
类型: Void
java.math:BigDecimal
java.util:
并发: ThreadPoolExecutor, concurrent+atomic+locks
集合: Comparator
Lambda: Function,Stream,
Matcher, EnumMap,Objects
java.time:LocalDateTime
func lib
java.io:File, Path, InputStream, Reader, Serializable
java.nio:ByteBuffer, Path, Charset, Channel
java.net:Socket, Inet4Address
java.sql:Statement, Connection
java.security:KeyPair
java.beans:BeanInfo, MetaData
bean
Serializable: objects to stream of bytes.
JavaBeans:
1. 元信息:描述Descriptor类 字段名Property;字段类型 Type;方法 Method;构造器Constructor
2. 字段类型转换 PropertyEditor
POJO(Plain Ordinary Java Object) 简单的Java对象,对象只有setter/getter基本操作,没有复杂的业务操作。
常用三方包
apache.commons3
Lombok
Guava
Mapstruct
Hutool
JVM
jvm的使用 就是 启动参数 配置
Java书籍
Java编程思想_第5版_中文(gitee.com)_2020-07-30
《Effective Java (高效 Java) 第三版》 - 书栈网 · BookStack_2020-01-09
core java 12th
java8实战
深入理解Java虚拟机3
Java局限
Java组件有很多局限,才会不断更新版本,如日期时间类、并发工具;才会新生出这么多框架,比如Netty 封装NIO,Redis缓存数据。
Java 强类型 增强安全性,需要做很多类型转换,比如 Spring Data Binding;任何数据总要有个类型来承接它, Java反射 即便获取到Type信息,也无法实例化成类。
Java泛型匹配局限,泛型与反射。
出于编译安全,Java 枚举无法用在注解上。