Java入门
JDK && JRE && JVM
JVM(Java Virtual Machine ):Java虚拟机,简称JVM,是运行所有Java程序的假想计算机,是Java程序的运行环境。我们编写的Java代码,都运行在 JVM 之上,而JVM运行在操作系统之上。JVM是java实现跨平台的重要工具。
JRE (Java Runtime Environment) :是Java程序的运行时环境,包含 JVM 和运行时所需要的 核心类库 。
JDK (Java Development Kit):是Java程序开发工具包,包含 JRE 和开发人员使用的工具。
编译型语言&&解释型语言
编译型:编译型语言是指程序在执行之前需要一个专门的编译过程,把程序源文件编译为机器语言的文件,运行时不需要重新编译,执行效率高,但缺点是,编译型语言依赖编译器,跨平台性差。
解释型:解释型语言是指源代码不需要预先进行编译,在运行时,要先进行解释再运行。解释型语言执行效率低,但跨平台性好。
Java:Java是一种兼顾编译型和解释型的语言,Java程序编译的时候先由**.java文件在JVM中进行编译,得到.class文件**,运行的时候JVM再将**.class文件转换为机器码**进行执行,因此JVM是Java程序执行的关键。
安装JDK
安装时注意配置环境变量Path路径
分为
- 用户变量:对当前用户生效
- 系统变量:对系统生效
JAVA_HOME
在DOS窗口中输入java -version进行检查当前版本
Java自带命令:
javac:编译器,编译.Java文件
Javap:反编译.class文件
Java:解释器,运行.class文件,将文件交给JVM去执行,main方法是程序的入口或者起点,JVM在运行的时候从main方法开始执行
标识符
命名规则:
- 标识符可以包含英文字母26个(区分大小写)、0-9数字、$(美元符号)和_(下划线)
- 标识符不能以数字开头
- 标识符不能是关键字
命名规范:
- 类名规则:首字母大写,后面每个单词首字母大写(大驼峰式)
- 方法名规范:首字母小写,后面每一个单词首字母大写(小驼峰式)
- 变量名规则:全部小写
语言基础
注释
-
单行注释://
-
多行注释:/* */
-
文档注释:
/**
*/
数据类型
- 基本数据类型:包括 整数 、 浮点数 、 字符 、 布尔
- 引用数据类型:包括 类 、 数组 、 接口
基本数据类型
数据类型转换
- 自动转换
将取值范围小的类型自动提升为取值范围大的类型,小范围的位数自动扩展到和大范围的一样的位数进行计算
转换规则:
byte、short、char–>int–>long–>float–>double - 强制转换
数据类型 变量名 = (数据类型)被转数据值
强制类型转换可能会发生数据丢失和溢出的情况
常量&&变量
变量的定义包含三个要素:数据类型,变量名,数据值
成员变量定义时JVM提供默认的初始值
方法变量需要先初始化再使用
常量的值在编译的时候就已经确定,不会发生变化
变量的值JVM无法确定,运算的时候可能会导致发生自动类型的转换
ASCII
运算符
“+”符号的多态:
-
遇到字符串的时候,表示连接、拼接的含义
-
基本的算数运算
=赋值符号带有变量提升的特性
+=等运算符号带有强制转换的特定
Jshell脚本工具
是JDK9的新特性,引入解释型代码的特性
流程控制语句
在JDK1.5之前,switch循环只支持byte short char int四种数据类型.
JDK1.5 在switch循环中增加了枚举类(enum)与byte short char int的包装类,对四个包装类的支持是因为java编译器在底层手动进行拆箱,而对枚举类的支持是因为枚举类有一个ordinal方法,该方法实际上是一个int类型的数值.
JDK1.7在switch循环中增加了String类型,但实际上String类型有一个hashCode算法,结果也是int类型.
而byte short char类型可以在不损失精度的情况下向上转型成int类型.所以总的来说,可以认为switch中只支持int.
在switch语句中,如果case的后面不写break,将出现穿透现象,也就是不会在判断下一个case的值,直接向后运行,直到遇到break,或者整体switch结束。
死循环
while(true)
for&&while
区别:
控制语句所控制的那个变量,在for循环结束之后,就不能被访问到了,而while循环结束还可以继续使用,如果你想继续使用,就用while,否则推荐使用for。原因是for循环解释,该变量就从内存中消失,能够提高内存的使用效率
在循环次数已知的时候使用for,循环次数为止的时候使用while
方法
调用方法的三种形式
- 直接调用:直接写方法名调用
- 赋值调用:调用方法,在方法前面定义变量,接收方法的返回值
- 输出语句调用:在输出语句中调用方法,不能使用输出语句调用void类型的方法,因为方法执行最后没有结果,不打印任何内容
方法重载
Overload:
指的是在同一个类中,允许存在一个以上的同名方法,只要他们的参数列表不同即可
参数列表:个数不同,数据类型不同,顺序不同
重载参数列表:JVM通过方法的参数列表,调用不同的方法
方法的参数为基本类型时,传递的是数据值,方法的参数为引用类型时,传递的是地址值
数组
容器的概念
数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致
数组的特点:
-
数组是一种引用数据类型
-
数组当中的多个数据,类型必须统一
-
数组的长度在程序运行期间不可改变
两种常见的初始化方式:
- 动态初始化(指定长度)
- 静态初始化(指定内容)
动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。
静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。
使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
如果是整数类型,那么默认为0;
如果是浮点类型,那么默认为0.0;
如果是字符类型,那么默认为’\u0000’;
如果是布尔类型,那么默认为false;
如果是引用类型,那么默认为null。
- 数组越界异常
- 数组空指针异常