java是一种面向对象的编程语言。
摒弃了c++语言的多继承和指针等难以理解的概念。
同时增加了垃圾回收机制(GC),
释放了不被使用的内存空间,
解决了管理内存空间的烦恼。
面向对象
(封装 继承 多态 抽象(数据抽象(成员属性) 过程抽象(成员方法) ))
平台无关性("一次编译,到处运行",原因:jvm虚拟机,字节码只面向jvm)
简单性
解释执行
(((jdk)-> jre)-> jvm)
(源代码 ->((java编译器)(词法分析器 语法分析器 语法抽象语法树 语义分析器 注解抽象语法树 字节码分析器)编译)->字节码文件.class ->(类加载器 字节码校验器(jvm)解释)-> 机器可执行的二进制机器码 ->((操作系统)执行) )
多线程(Thread类,Runnable()方法)
分布式(RIM 机制)
健壮性(提供了异常处理机制、强类型机制、垃圾回收机制(GC))
高性能(JIT(即时编译)))
安全性(提供安全机制,分配不同的名字空间以防止替代本地的同名类)
Oracle JDK:版本每三年发布一次,是Open JDK的一个实现,不完全开源,比Open JDK更稳定,根据二进制代码许可协议获得许可,响应性和jvm性能方面比Open JDK更好,不会为即将发布的版本提供长期支持(LTS)
Open JDK:版本每三月发布一次,根据GPL v2许可获得许可
内存空间大的数据类型转换为小的会发生精度丢失
1byte(字节) = 8bit(位)(下面自己换算)
byte(1byte)(default_value:0)
short(2byte)(default_value:0)
int(4byte)(default_value:0)
long(8byte)(default_value:0L)
float(4byte)(default_value:0.0f)
double(8byte)(default_value:0.0d)
char(2byte)
boolean(1byte) (default_value:false)
它们的包装类(装箱)(初始值为null)(将对象存放在堆中):
Byte Short Integer Long Float Double Character Boolean
5.引用数据类型:类 接口 数组
基本数据类型的变量名指向具体数值;数值存放于栈内存中;用==和!=判断数据是否相等
引用数据类型的变量名指向存数据的内存地址,也就是hash值;数值(hash值)的引用存放于栈内存中,对象地址存放于堆内存中,然后由栈内存中的引用指向堆内存中的对象地址;用equals()方法比较内存地址
a+=b:右边表达式会进行隐式自动类型转换为左边的数据类型
final修饰类:该类比可以被继承
final修饰方法:该方法不可以被重写
final修饰变量:该变量只能被赋值一次且不可被修改
final修饰常量:在编译阶段会存入常量池中
static修饰类:可以直接通过类进行调用
static修饰变量:分配在内存堆中,引用都会指向这个地址而不会重新分配内存
static修饰方法块:虚拟机优先加载
将对象的状态信息转换为可以存储或传输的形式的过程
序列化:将java对象转换成某种格式的字节流进行传输或者存储到硬盘(持久化)
反序列化:将某种格式的字节流转换成java对象
目的:为了网络进行传输(流)和持久化(存储)
序列化方式:
Serializable接口序列化(常用)(mini接口,没有要实现的方法,只是为了标注此对象是可被序列化的)
Json序列化
FastJson序列化
ProtoBuff序列化
有误之处望指点!【Email:3147310397@qq.com】