初识Java
JDK、JRE、JVM的区别和联系
JDK: Java SE Development kit
Java的开发程序包,包含了JRE,还具备一些程序开发所必备的工具。
javac——编译工具,jstack——查看JVM的堆栈内存情况。
JRE:Java Runtime Enviroment
使用Java开发的系统或者app要跑起来必须具备的环境。
Java运行的环境。——类似你手机的操作系统。
JVM:Java Virtual Machine
就是我们常说的Java虚拟机,它是整个Java实现跨平台的最核心的部分,所有Java程序首先被编译为.class文件,这种类文件可以在虚拟机上运行也就是说class并于直接与机器的操作系统相对应。
简单来说,JDK包含JRE,JRE包含JVM的关系。
Java程序的运行
要把一个Java程序运行起来,需要经历两个步骤。
- 编译阶段
*.java(Test.java - 源文件,包含我们写好的源代码 - 给程序看的代码)javac -> *.class(二进制文件,是给JVM阅读)编译阶段最核心的步骤就是将*.java -> *.class。
- 执行阶段
JVM执行编译后的字节码,交给操作系统具体执行。
变量
变量就是可以改变的量,在程序运行过程中产生的数据,会占用一些内存空间,这些内存空间就是变量,内存空间的标识名就是变量名。
变量的作用域
也就是变量的生效范围,一般是变量定义所在的代码块(大括号)。
变量的命名规则
硬性指标:
- 一个变量名只能包含数字,字母,下划线。
- 数字不能开头。
- 变量名是大小写敏感的,即num和Num是不同的变量。
虽然语法上也允许使用中文和美元符($)命名变量,但是强烈不推荐这样做。
软性指标:
- 变量命名要具有描述性,见名知意。
- 变量名不宜使用拼音(但是不绝对)。
- 变量名的词性推荐使用名词。
- 变量命名推荐小驼峰命名法,当一个变量名由多个单词构成的时候,除了第一个单词之外,其他单词首字母都大写。
常量
常量主要分为两种体现形式,第一种是字面值常量,字面值常量只有五种类型,分别是整形,字符型,浮点型,字符串型和布尔型。第二种是被final修饰的变量,变量都不能在程序的运行过程中发生修改。
数据类型
Java属于强类型的语言,定义一个变量时,必须指定这个变量的类型,在这个变量之后赋值的过程中只能赋值为相应类型的值。
基本数据类型
基本数据类型可分为三类,数值型、字符型char和布尔型boolean,其中数值型可分为整形和浮点型,整形有四种,分别为byte、short、int和long,浮点型有两种,分别为float和double,一共8种基本数据类型。
布尔型
boolean:只有两种取值,表示真为true,表示假为false。和C不同,在C中,布尔值没有专属的字面量常量,0就代表假,1就代表真。在Java中,布尔型变量不能和其它类型变量相互转换,自然也就不能用其他变量类型代替。一个布尔型变量占用一个字节。
字符型
char:用单引号标起来的单个字符,被称为字符型。无论是什么语言,只要是字符型就占用两个字节。
数值型
- byte:整形,占用一个字节。
- short:整形,占用两个字节。
- int:整形,占用四个字节。
- long:整形,占用八个字节。
- float:浮点型,占用四个字节。
- double:浮点型,占用八个字节。
引用数据类型
包括数组,类,接口。
对于每一个基本数据类型都有一个相对应的包装类,int->Integer,char->Character,short->Short,long->Long,byte->Byte,double->Double,float->Float,boolean->Boolean。只有int和char比较特殊,其他都是基本数据类型的首字母大写。
数据类型转换
-
不同数值类型的变量之间赋值,表示范围更小的类型能隐式转换成范围较大的类型,反之则不行。
-
int和boolean是毫不相关的类型,不能互相赋值。
-
当使用int字面量给byte赋值的时候,Java会自动进行一些检查校验,判断赋值是否合理。
int a = 10; byte b; b = a;//编译出错 b = 100;//编译通过 b = 256;//编译出错
-
强制类型转换
当使用(类型)的方式可以将double类型强制转成int。但是
1) 强制类型转换可能会导致精度丢失。
2) 强制类型转换不一定成功,互不相干的类型之间无法强制类型转换。
数值提升
-
当较小类型和较大类型进行混合运算时,小类型会提升成大类型,得到的结果也需要用大类型来接收,如果用小类型来接收则需要强制类型转换,并会丢失精度。
-
byte和byte的运算
在运算时,系统会先将小于四字节的类型会先提升为int,再参与计算。
//错误写法 byte a = 10; byte b = 20; byte c = 30; System.out.println(c);//编译报错。 //正确写法 c = (byte)(a + b);
int和String的相互转换
-
int转成String
方法一:直接与字符串相加 方法二:使用String.valueOf();
-
String转成int
使用Integer.parseInt();
运算符
算术运算符
基本四则运算+ - * /
- 当int除以int时,得到的还是int,需要使用double来计算。
- 0不能作为除数。
- %表示取余,不仅可以对整数,还可以对浮点数进行取余。
- 增量赋值运算符 += -= *= /= %= a += 1 等价于 a = a + 1
- 自增自减运算符 ++ – 前置++先++再赋值,后置++先赋值再++
关系运算符
主要有六个 == != < > <= >=
关系运算符的表达式返回值都是boolean类型。
逻辑运算符
- 逻辑与:两个操作数都为true时,结果为true,否则结果为false。
- 逻辑或:两个操作数都为false时,结果为false,否则结果为true。
- 逻辑非:为单目操作符,操作数为true时,结果为false,操作数为false时,结果为true。
&& 和 ||都遵循短路求值规则,当已经能判断结果时,则后续代码不会执行。
& 和|在操作数都是boolean时也可以表示逻辑运算,不支持短路求值规则,不推荐使用。
位运算符
按内存中二进制位对数据进行操作
位运算符有主要有四个
&:两个二进制位都为1则结果为1,否则为0。
|:两个二进制位都为0则结果为0,否则为1。
~:按位取反,1转为0,0转为1。
^:两个二进制位不同则结果为1,否则结果为0。
条件运算符
条件运算符只有一个,是三目操作符:表达式1 ? 表达式2 :表达式3
当表达式1为true时,则结果为表达式2的值,否则结果为表达式3的值。
移位运算
移位运算符有三个:<< >> >>>
<<:左移,右侧补0。
>>:右移,正数左侧补0,负数左侧补1。
>>>:无符号右移,左侧补0。
注释
注释非常重要,不参与编译运行,作用是解释代码功能。
单行注释://注释内容//(用的最多)
多行注释:/*注释内容*/(不推荐)
文档注释:/**文档注释*/(常见于方法和类之上描述方法和类的作用),可用来自动生成文档。
注释规范:1. 内容准确 2. 篇幅合理 3. 使用中文 4. 积极向上