Java编程语言的特点

1. 简单易学

相对于C语言来说,Java并没有指针,相对于C++来说它也是单一的继承、内存空间自动回收。

2. 面向对象

  • 类和对象->数据和方法的封装
  • 封装 继承 多态
  • 注重于数据和操作数据的方法,而不是流。实际上就是区别于面向过程编程。

3. 解释性

Java编译器生成字节码(后缀为.class的文件)。

Java解释器执行字节码。

连接过程简单,仅仅将新的类装载入运行环境。

高级语言执行方式分为两种:一种是编译型,一种是解释型

编译型:将高级语言一次性翻译成机器代码,可以脱离开发环境运行,通常运行效率比较高。但是难以移植,C/C++、Pascal属于编译型语言
解释型:用特定的解释器对源程序逐行解释成机器代码并立即执行,不会进行整体的编译和链接处理。效率低,但是跨平台比较容易。Ruby、 Python都属于解释型语言。

4. 平台独立和可移植

Java语言比较特殊,他需要经过编译,但是会生成一种与平台无关的字节码(.class文件),这种字节码需要用java解析器来执行。java可以看作即是编译型也是解释型的语言。java中负责执行字节码的就是虚拟机JVM。Java字节码不面向任何平台,它只面向虚拟机,所以只要在特定平合上安装了JVM,便可运行Java程序。JVM就相当于一个转换器,它的作用如下:

image-20220615143918676

它的特点就是一次编写处处运行
可以看到不同机器上的JVM是不一样的,JVM是不跨平台的,但是它实现了class文件的跨平台,这样也就实现了java的跨平台特性。

5. 鲁棒性/健壮性和安全

6. 多线程

7. 分布式

8. 高性能

9. 动态

平台

1. JDK、JRE、JVM区别与联系

https://blog.csdn.net/ancientear/article/details/79483592?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-79483592-blog-122798784.pc_relevant_downloadblacklistv1&spm=1001.2101.3001.4242.1&utm_relevant_index=3

这三者的关系是:一层层的包含关系。JDK>JRE>JVM

在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和 lib和起来就称为jre。JVM+Lib=JRE。总体来说就是,我们利用JDK(调用JAVA API)开发了JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解析这些字节码,映射到CPU指令集或OS的系统调用。

区别: JDK和JRE一个是开发环境,一个是运行环境。在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的,这是开发者需要的,而用户(只需要运行的人)是不需要的。JDK还有jar.exe, javadoc.exe等等用于开发的可执行指令文件。 JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。

Java程序的运行步骤

  1. 首先通过Java的编译器编译Java文件生成字节码文件 命令如下:
1
javac 文件名.java

此时当前路径下会生成相应的字节码文件,就是后缀为.class

  1. 然后再用Java的解释器去执行字节码
1
java 文件名

最终执行成功。

Java基础语法

1. 标识符

组成规则

  1. 字母、特殊符号、数字
  2. 第一个符号不能为数字
  3. 不能为关键字 int float double等等
  4. 区分大小写

一般约定

  1. 表示常量全部大写,如RED
  2. 表示类名的标识符首字母大写
  3. 表示共有方法和实例变量的标识符用小写字母开始,后面的描述性词大写字母开始,如getCurrentValue
  4. 表示私有或局部变量的标识符全部用小写字母,如next_value

2. 关键字

常用和不常用的关键字都在下面了。

image-20220616142201500

3. 数据类型

基本数据类型

数据类型 大小(bit) 字节
byte(字节整数) 8 1
short(短整数) 16 2
int(整数) 32 4
long(长整数) 64 8
float(单精度浮点型) 32 4
double(双精度浮点型) 64 8
char(字符) 16 2
boolean(布尔) 8 1

复合数据类型

数组(Array),类(class),接口(interface)

Java中有了基本数据类型,为什么还要包装类型

  1. Java是一个面向对象的语言,然而基本数据类型不具备面向对象的属性。当我们把基本数 据类型包装成包装类型后,基本数据类型就具备了面向对象的属性。

  2. 在ArrayList 、HashMap这些容器来传输数据是,基本类型int和double是传输不进去的,因为容器都是装泛型(object类型)的,所以需要转为包装类型进行传输。

  3. 每一个基本类型都有对应的包装类型。比如:int——>Integer,char——>Character,float——>Float。

类型转换

  1. 隐型类型转换

由低字节像高字节转换,系统即可完成

源类型 转换后不会丢失数据的目的类型
byte short char int long float double
short char int long float double
char int long float double
int long float double
long float double
float double
  1. 显性类型转换
1
2
3
double a = 1.5;
float b = (float)a;//数据精度丢失
/*编译:possible loss of precision*/

再如:

1
2
3
int a = 257;//00000000 00000000 00000001 00000001
byte b = (byte)a;// 00000001
/*只保留一个字节的数据*/

4. 字符型常量

Java中的字符为Unicode字符

  1. 双字符:范围’\u0000’~’\uFFFF’
  2. 转义字符
字符 意义
\b 退格
\t 制表符
\n 换行
\r 回车
$\’$ 单引号
$\”$ 双引号
写两个“\” 反斜杠

常量就是带有final的变量

编码

  1. GB2312-80:对任意一个图形字符采用两个字节表示,每个字节采用其位编码表示,第一个字节为高字节,第二个字节为低字节
  2. GBK:《汉字内码扩展规范》
  3. BIG5:台湾繁体字,双字节编码,第一个在0xA0-0xFE之间,第二个字节在0x40-0x7E和0xA1-0xFE之间。
  4. Unicode:

16比特字符编码,支持世界上绝大多数的语言。

\u0000-\uffff,\u是Unicode的转义符

当前定义了34000个Unic字符

\u0020~\u007e就相当于ASCLL字符

1
char c = '\u5E74';//char c = '年'

特别的:

1
2
3
4
5
// \u000D System.out.println(123);
/*编译时相当于*/

//
System.out.println(123);

Java编译器不仅会编译打码,而且会去解析Unicode字符,\u000D代表换行。因此把后面的代码挤到了下一行。

  1. UTF-8:

是针对Unicode的一种可变长度字符编码。它可以用来表示Unicode标准中的任何字符,而且其编码中的第一个字节仍与ASCLL相容

image-20220616153405743

image-20220616153956392

5. 运算符和表达式

  1. 运算符
名称 运算符
算术运算符 + - * / %
关系运算符 (> < = >= <=) > (== !=) 优先级
逻辑运算符 ! > && > \ \ 优先级
位运算符 ~ & \ ^ >> << >>> <<<
条件运算符 op1 ? op2 : op3
自增、自减运算符 i++ ++i i— —i

运算符的优先级:

image-20220616205103910

image-20220616205158581

  1. 表达式

用运算符和括号将操作数连接起来求值的式子

Java中没有赋值成功返回1的说法