JDK(Java Development Kit)
简单理解就是Java开发工具包。
JDK = JRE + 开发工具集(例如Javac编译工具等)
JRE(Java Runtime Enviroment)
:Java的运行环境。
JRE = JVM + Java SE标准类库
JVM( java virtual machine)
:Java虚拟机。(JVM是Java跨平台的核心)(充当翻译官的角色)
JDK是面向开发者的,JRE是面向使用JAVA程序的用户。
JVM不能单独搞定class的执行,解释class的时候JVM需要调用解释所需要的类库lib。
在JDK下面的的jre目录里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库。
如果讲的具体点就是bin目录下的jvm.dll文件, jvm.dll无法单独工作,当jvm.dll启动后,会使用explicit的方法(就是使用Win32 API之中的LoadLibrary()与GetProcAddress()来载入辅助用的动态链接库),而这些辅助用的动态链接库(.dll)都必须位 于jvm.dll所在目录的父目录之中。
因此想使用哪个JVM,只需要设置PATH,指向JRE所在目录下的jvm.dll。
执行时,表面上,我们调用的是java.exe
,实际上,此时动态调用了JVM。
JVM将字节码文件一行行地解释成为当前OS认识的可执行文件格式。(Java是个”解释型“语言)
public class hello {
public static void main(String[] args) {
System.out.println("hello");
}
}
public class
的名称保持一致class
,凡是public class
只能有1个public static void main(String[] args)
是所有java程序的入口,如果向执行对应的java代码,则必须要添加如下方法,且格式是固定String[] args,String [] args,String args[]
javac hello.java
.java
java Welcome
.class
注释不会出现在字节码文件中。(Java编译器编译时会跳过注释语句)
验证:(使用反编译工具)
使用反编译工具进行反编译,没有发现注释。
原因:因为编译的时候不会对注释进行处理,所以反编译时不可能得到注释。
和C/C++很相似,除了多了一个$
符号和汉字。
因为:Java不采用通常语言使用的ASCII字符集,Java采用unicode这样的标准的国际字符集。
但是不建议使用汉字来命名。
byte short int long(不同类型表示不同的长度)
byte
: 使用一个字节存储,因此范围是 -128-127short
: 使用两个字节存储,因此范围是 -32768-32767int
: 使用四个字节存储,因此范围是 正负21亿long
: 使用八个字节存储int
类型,long
类型的话,必须要在数字的后面添加L
,建议使用大写,小写容易跟1混淆。小数类型:使用小数点 使用科学计数法
float
: 单精度,精度可以精确到小数点后7位double
: 双精度,精度是float的双倍注意:
1、默认浮点类型是double
类型
2、使用float
的时候,数字后要添加f
3、浮点类型并不能表示一个精确的值,会损失一定的精度
char
占用2个字节,使用的时候使用''
表示
boolean
只有true
和false
两值,在存储的时候占1位
类
接口
数组
在类内,方法外定义的变量叫成员变量,会存在默认值
在方法内,定义的变量必须要进行初始化操作,不会存在默认值
不存在全局变量
给变量赋值过程中,变量的值成为常量
使用final修饰的变量,只能被初始化一次,变成了常量。
final int t = 1;
除boolean类型外,所有的基本数据类型因为各自的精度不同,赋值时都要考虑这个问题
低------------------------------------------------------>高
byte —> short,char—>int —>long—>float —>double
=右侧:所有变量先转换为字节数最多的数据类型,再计算
=两侧:
特例
可以将整型常量直接赋值给byte, short, char等类型变量,而不需要进行强 制类型转换,只要不超出其表数范围
short b = 12; //合法
short b = 1234567; //非法
只能处理等值条件判断的情况,且表达式必须为 byte,short,int或char
类型 ,不能是String
或double,float
。
1.7之后可以使用string
在C/C++中经常用的一个写法,在Java中不能用。
换个写法:
while (n-- != 0) {
sum += h;
h /= 2;
}
这种情况也出现在if中,因为在Java中,有了纯粹的布尔类型。
//声明数组
int[] array;
//创建内存空间
array = new int[5];
//数组赋值
array[0] = 0;
array[1] = 1;
array[2] = 2;
array[3] = 3;
array[4] = 4;
//数组操作
System.out.println(array[0]);
//数组的几种创建方式
//1、声明并申请空间
int[] arr1 = new int[5];
int [] arr2 = new int[5];
int arr3[] = new int[5];
//2、声明数组并赋值
int[] arr4 = new int[]{1,2,3,4,5};
//3、直接初始化操作
int[] arr5 = {1,2,3};
//获取数组的长度
System.out.println(arr1.length);
数组是引用类型,当创建完成数组之后相当于是在方法外定义了一个变量,此时数组中的值是有默认值的。
默认是什么,取决于你定义的数组的类型:
int:0
String null
boolean false