java使用总结
1. 概览
1.1 java概览
- JAVA平台分为:java se、java ee、java me
java me: 主要用于控制移动设备和信息家电等有限存储的设备
java se: java核心与基础
java ee 企业应用开发相关完整解决方案 - api分类:核心api,可选api,特殊api
核心api: 所有平台都应提供
可选api: 扩充api,因平台不同而不同
特殊api: 满足特殊需求的api - 语言类型:强类型语言和弱类型语言、解释性与编译型语言
强类型语言与弱类型: 是否需要先声明后使用;是否有变量类型;是否指定类型变量只能接受与之匹配的值;
解释性: 具有专门的解释器对源码逐行进行解释并立即执行的语言。
2020-6-1: 每次执行均需要进行解释;执行需要对特定平台而非机器码
编译型语言: 专门的编译器将源码翻译成机器可以执行的代码
2020-6-1: 一次编译,多次运行;无需平台,cpu直接执行
java: 强类型、即编译又解释
2020-6-1: java需要将源码编译成字节码 -> 编译型;java的字节码需要在jvm上运行 -> 解释型 - jvm确定统一标准:指令集、寄存器、类文件的格式、栈、垃圾回收堆、存储区
- 垃圾回收
优点: 提高编程效率;保护程序完整性
缺点: 影响程序性能;垃圾回收算法的不完备性
思想: 发现无用对象;释放该对象所占的资源 - java 解释器规定:如果需要某个类被编译器直接执行,则需要类包含main方法,且必须为public static void
- java文件命名规则
区分大小写: 必须以字符、_、$打头;支持Unicode;必须位非关键字
后缀必须为.java
文件名必须与public类保持一致,如无public类,则随意 - jdk、jre与jvm对比
jvm: java virtual machine,java虚拟机。运行java 的核心虚拟机
jre: java runtime environment,java实时运行环境。包含jvm及其他类加载、基础类库
jdk: java SE development kit,java 标准开发环境。包含开发、编译、运行等所需的各种工具与资源
关系: 一般情况下,jdk包含jre,jre包含jvm - 面向对象是由面向对象分析(OOA)、面向对象设计(OOD)及面向对象编程(OOP)三部分组成
OOA: 对目标进行分析,建立分析模型,并将之文档化
OOD: 对OOA进行细化,得出设计模型 - 面向对象的基本特征:封装、继承及多态
特点: 类是对同一类事物的抽象,对象是类的实例化,对象具有唯一性;Java类不支持多继承
关系: 一般到特殊(继承);整体到部分(内部类) - java注释:
//: 单行注释
/**/:多行注释
/***/:文档注释
- java支持7种数据类型
byte: 1字节
short: 2字节
int: 4字节
long: 8 字节
char: 2字节
float: 4字节
double: 8字节
byte、short常量赋值给byte、short时,会直接为byte、short;long需要加后缀,否则视为int,容易出现截断的现象。
当程序第一次使用某个字符串直接量时,会再常量池缓存该字符串,因此对象引用会相等。
常量池是指在编译期间被确定病被保存再已编译.class中的一些数据 - 特殊浮点值:正无穷、负无穷与NAN
所有的正无穷一样大,所有的负无穷一样大,NAN与任何均不等
1.2 UML(统一建模语言)
- 用例图:描述系统提供的系列功能,每个用例代表一个功能模块
- 类图:系统的静态结构
- 组件图:大型系统组件化图
- 部署图:描述软件系统如何部署到硬件环境中
- 顺序图:描述消息及时间维度
1.3 安装jdk
1.3.1 安装jdk
1. 去官网下载jdk11,并打开终端进入jdk所在文件夹下
2. $sudo dpkg -i ./*.deb //安装jdk,默认路径 /usr/lib/jvm
3. $ sudo gedit /etc/profile // 配置环境变量(全局)
export JAVA_HOME=/usr/lib/jvm/jdk*
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
4. $ source /etc/profile
5. 注:windows系统不区分大小写,linux区分,写环境变量时,windows使用;,Linux使用:
1.3.2 jdk各个文件夹的作用
- bin:jdk工具
- cof:配置文件
- include:平台特定头文件
- jmods:jdk各种模块
- lib:jdk工具补充jar包
2. 垃圾回收机制
垃圾回收是java的一大特色,java垃圾回收屏蔽了直接操作系统内存带来的风险,因此大大降低了java的学习门槛,降低了编程的bug数。
2.1 垃圾回收机制的特点
2.1.1 垃圾回收机制的优点
- 提高编程效率:大大降低了直接操作内存带来的风险。
- 保护程序的完整性
2.1.2 垃圾回收机制的缺点
- 垃圾回收的开销影响程序的性能
- 具有不完备性,不能保证100%的回收
2.1.3 垃圾回收机制的算法步骤
- 发现无用对象:当不在使用对象时,将引用置为null。
- 回收无用对象占用的内存空间
2.2 G1垃圾回收器
2.3 CMS垃圾回收器
2.4 Z垃圾回收器
java 程序结构:类存于文件中,方法存于类,语句存于方法。
编译过程中,出现“找不符号.”的问题:从类中是否存在该方法或者该变量的角度查起。
编译过程中,报“在类中找不到main方法(当一个文件中有多个类的情况下)”:将带有main方法的类放在文件最开始的时候。
manifest有什么作用:manifest文件用于定义jar包中哪个问津带有启动应用程序的main方法。
所有带小数点的数,java当做double来处理。
java是值传递,即拷贝传递
java中实例中永远都是默认的,而局部变量没有默认值,因此局部变量使用前需要赋予初始。
使用==比较两个primitive主数据或者判断两个引用是否引用同一个对象;使用equal判断两个对象是否在意义上相等,个人理解,内容是否是一样的。
&&与||会产生截短的效果,& 与 | 没有该效果
使用import语句不会改变程序的大小,只是省下每个类前面的包名而已
java.lang是基础包,无需import即可使用包内的类
抽象类是不能被实例化的
抽象方一定要被覆盖掉
只有抽象类中,才允许声明抽象方法
没有直接继承其他类的类会是隐含的继承对象
如何ArrayList取出的东西都会被当做object对象的引用,而不管他原来是什么对象
编译器是根据引用类型来判断有哪些method可以调用,而不是根据object的类型
instanceof可以判断对象是否是某一个对象
java的借口就好像是100%的纯抽象类
接口方法带有public和interface的意义,这两个修饰属于选择性的
如何判断应该是设计类、子类、抽象类或者接口类呢?
- 如果新的类无法对其他的类通过IS-A测试,就设计不继承其他的类
- 只有在需要某类的特殊化版本时,以覆盖或增加新的方案来继承现有类
- 当你需要定义一群子类的模板时,又不想让程序员初始化该模板,设计出抽象的类给他们用
- 如果想要定义出类可以扮演的角色,使用接口
java允许有类同名的方法,与构造函数的区别是返回值
一定要有不需要参数的构造函数
在创建新对象时,所有继承下来的构造函数都会执行
每个构造函数可以选择调用super或者this(),但不能同时调用
在Math这个类中的所有方法都不需要实例变量,因为这些方法是静态的,所有你无需Math实例
静态方法使用类名调用的方法
静态变量的值对所有实例来说都相同。
私有的构造函数代表这个类不能被本身以外的程序实例化
静态变量会在该类的任何静态方法执行之前初始化
静态的final变量就是常量
final的变量不能改变值,final的方法不能被覆盖,final的类不能被继承