背景
从事java开发已经三年由余了,最近想好好的总结下java开发。所以打算写一系列相关文章,能够系统的涵盖java后端从入门到高阶的开发,所以开始写java的博客。
这些博客不是简单的进行流程的介绍,而是我进行实践和思考的结果,希望对自学的同学能有所帮组。
java语言的概述
1.语言发展概
java语言的发展,经历了三代的语言,才发展出了纯面向对象的java语言。第一代语言是打孔机,纯粹的机器语言。第二代语言是汇编语言,第三代语言是高级语言,有面向过程思想的C、Pascal、Fortan等。有面向对象的C++,有跨平台又面向对象的java等。
95年 sun公司推出JAVA,前身oak
创始人: 詹姆斯 高斯林
3.java语言版本
- 98年 内部版本1.2 java技术平台命名为:j2se、j2me、j2ee
- 04年 内部版本1.5 外部版本5.0 改动非常大
- 06年 内部版本1.6 重命名java技术平台,javaSE、javaME、javaEE
- 09年 Oracle收购sun公司
- 11年 内部版本1.7
- 14年 内部版本1.8 改动非常大
- 17年 内部版本1.9 从该版本开始,每6个月版本升级计划
- 18年3月 内部版本1.10
注意公司中使用的都是LTS版本
2.java技术体系平台
java se(Java Standard Edition) Java标准版
主要应用于PC上的GUI程序开发。
java ee(Java Enterprise Edition) Java企业级版本
主要用于web应用程序开发,为企业提供一套解决方案。
java me(Java Micro Edition)
主要用于嵌入式平台的开发。现在几乎没用了。
3.java在各个领域中的应用
- 企业级开发
- android应用
- 机器学习领域
java的运行机制和执行过程
两个机制,一是JVM虚拟机机制,二是GC,垃圾自动回收机制.
java语言环境的搭建
下载安装JDK
到Oracle官网下载 , 下载对应的版本,我这使用的事JDK8
配置path环境变量
windows下安装后的JDK会生成两个目录,一个jdk,一个jre,因为jdk中带有jre
什么是环境变量如何实操配置?
环境变量是运行命令的时候, 操作系统会默认去搜索的路径。
windows下的环境变量配置
到Oracle官网下载对应的JDK版本.
- 添加JAVA_HOME环境变量为JDK安装的根目录。
- 将%JAVA_HOME%/bin添加到PATH环境变量下。
Unix下的环境变量配置
mac下安装JDK很简单。
方法一: brew cast install java8
即可安装jdk8
方法二: 到Oracle官网下载对应的JDK版本, 按提示安装即可
mac下安装的会自动添加到对应的path环境变量中
JDK、JRE、JVM是什么有什么关系?
JDK(Java Development Kit)指java开发工具包
JRE(Java Runtime Environment)指java运行环境
JVM指Java虚拟机, 其运行于对于操作系统层之上。(具有指令集并使用不同的存储区域。负责执行指
令,管理数据、内存、寄存器。)
JDK = JRE + 开发工具集合
JRE = JVM + Java SE标准类库
Java中的注释
java中的注释和C、C++都一样, 有单行和多行注释。
其中java还有文档注释,所谓的文档注释就是该注释可以生成对应的文档,方便阅读和维护。
文档注释
语法:
/**
* @author: sweetcs
*
*/
文档注释对应的生成文档的命令javadoc,该命令是用来生成java api文档的命令,而文档注释是为了在生成API文档的时候,能够生成对应接口的描述。
javadoc -d 文件夹名称 xxx.java
类的结构
类的签名,修饰符是可选的
public class XXXX
类体
{
}
方法的签名:
public int calcHeight(int a, int b)
方法体
{
}
变量
标识符
标识符就是给变量、类、方法取名字就叫做标识符。
java中的标识符必须是字母(以a-z大小),数字、下划线和$符号组成.
命名标识符需要注意的细节
- 标识符不能以数字开头取名
- 标识符不能以空白符开头
- 标识符不能以保留字、关键字命名
按数据类型分类
基本数据类型
整型
- byte 一个字节 -128~127
- short 两个字节 -2^15 ~ 2 ^15 -1
- int 四个字节 -2^31 ~ 2^31 -1
- long 八个字节 -2^63 ~ 2^63 - 1
java的整型常量默认为 int 型,声明long型常量须后加‘l’或‘L’
浮点型
java中的浮点型有两种,double和float,必须包含小数点。
- 浮点型常量默认类型是double
- 要创建float类型的浮点类型,需要在小数后加f或者F
- float四字节、double 8字节
- 浮点型常量可以使用d或者D表示,比如9D, 9d
字符类型
字符类型是可以运算, 因为其本质就是数字。java中的字符用Unicode编码,这些字符包含在ASCII码范围内没有变。
字符常量的三种表示方式
- 使用单引号括起来的单个字符
- 转移字符
- 使用Unicode值来表示字符型常量
Unicode编码与UTF-8的关系
- Unicode是一种编码,它只规定了符号的二进制代码,没有规定该二进制代码如何存储。
- 无法区别 Unicode 和 ASCII:计算机无法区分三个字节表示一个符号还是分别表示三个符号。另外,我们知道,英文字母只用一个字节表示就够了,如果unicode统一规定,每个符号用三个或四个字节表示,那么每个英文字母前都必然有二到三个字节是0,这对于存储空间来说是极大的浪费。
- UTF-8是对Unicode编码的一种实现方式
- UTF-8是一种变长的编码方式。它可以使用 1-6 个字节表示一个符号,根据不同的符号而变化字节长度。
UTF-8的编码规则:
- 对于单字节的UTF-8编码,该字节的最高位为0,其余7位用来对字符进行编码(等同于ASCII码)。
- 对于多字节的UTF-8编码,如果编码包含 n 个字节,那么第一个字节的前 n 位为1,第一个字节的第 n+1 位为0,该字节的剩余各位用来对字符进行编码。在第一个字节之后的所有的字节,都是最高两位为"10",其余6位用来对字符进行编码。
Unicode和UTF-8的区别
- Unicode是一种编码规范, 其每个字符占用2个字节。而UTF-8是这种规范的一种实现, 是一种变长编码方案, 英文字母还是占用一个字节,但是汉字占用3个字节
布尔类型
- boolean类型数据只允许取值true和false,无null。不可以0或非 0 的整数替代false和true,这点和C语言不同。
- Java虚拟机中没有任何供boolean值专用的字节码指令,java语言表达所操作的boolean值,在编译之后都使用java虚拟机中的int数据类型来代替:true用1表示,false用0表示《java虚拟机规范 8版》
引用数据类型
- class定义的类
- interface定义的接口
- 数组
数据类型转换
基本数据类型转换
自动数据类型转换
基本规则: (小--->大)容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为
- 有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算。 -
- byte,short,char之间不会相互转换,他们三者在计算时首先转换为int类型。
- 当把任何基本类型的值和字符串(String)进行连接运算时(+),基本类型的值将自动转化为字符串类型。
整型常量
所谓的整型常量,是属于整数,但没有说明使用什么整数结构来进行存储(byte\short\int).
所以byte b = 5并不是表示5是整型常量,所以并不是int类型存储到byte类型,这里需要注意理解。
强制类型转换
基本规则: 大转小。大转小的时候, 编译器编译期间默认是会报错的,比如报类型不兼容等。这个时候就需要使用强制类型转换。
语法:数据类型 变量名 = (目标数据类型)值;
特点:
①表达式有个自动提升原则。表达式的结果的最终类型为 操作数中的最大类型
②强转符号只针对于最近的有效
int a = (int)12.5+7.5;
③byte、short的底层存储实际是以int形式。每次byte、short运算都当做int类型
④char类型只能存储int的常量值,但不能直接存储int的变量值
String类型和基本类型之前的转换
基本类型 转 String
语法:直接拼接空字符串.
String s = i + ""
String 转 基本类型
语法:通过调用基本数据类型对应的包装类里的parseXXX方法。
例如:
String s = "123455.5";
double d= Double.pareseDouble(s);
String转char
String s = "a";
char c = s.charAt(0);