【下载的这个安装包主要包含JDK,JRE,JavaFx包】
添加刚刚复制的路径到path里:
点击三个确定。
JDK:Java Development Kit Java开发工具包
JRE:Java Runtiome Environment Java运行环境
JDK与JRE的关系:以Java代码运行为例,编写好Java代码之后,通过javac将java源文件编译成class字节码文件,然后通过java命令,运行字节码文件。那么运行字节码的环境就是JRE。(JRE的核心就是JVM)
JVM:Java Virtual Machine Java虚拟机
JVM的主要作用就是将class字节码文件翻译成机器码(01)供给计算机执行。
跨平台——Java程序可以在多种平台上运行。
平台指的是操作系统,目前主流的操作系统:Windows,Mac,Linux。
以日常软件为例,同一个软件的win版和mac版是分开的。但是功能却是基本相同的。
JVM同样如此,也有win版,mac版以及linux版。安装在不同的平台上的JVM虽然有所差异,但都能完成同样一件使命——将class文件翻译成机器码。
概括来说,JVM有两个功能:其一是兼容不同的操作系统,其二是翻译class字节码文件。
在解决这个问题之前,先解决什么是环境变量:
运行一个程序(命令),系统从当前目录寻找,或者从环境变量中寻找。换句话说,如果在java,javac的目录下执行这个两个命令,是没有问题的。但是如果更换了目录,系统在当前目录找不到,就会去环境变量中寻找。所以设置环境变量的根本目的是在电脑的任何一个文件夹下都可以编译运行Java程序。
变量和数据类型难舍难分,思考了好久,得出下面这个结论:
变量是内存中的一个存储区域。而数据类型的定义决定了这块存储区域的大小。【变量与数据类型的关系】
以结果为导向来分析:
Java的整数类型分为4种:byte,short,int,long。
四种的区别在于占用的存储空间不一样。
byte占用1个字节,short占用2个字节,int占用4个字节,而long占用8个字节。
什么是字节?
字节是一种存储单位的度量。1个字节等于8位。
什么是位呢?
位可以理解为计算机的最小单位:0或者是1。也就是是说1个字节是8个0和1的排列组合:
比如说:00000000,00000001,00000011,......11111111。
那么在这种情况下1个字节可以表示多大的数呢?
00000000转换为十进制依然是0,11111111转换为十进制是255。
转换工具:https://tool.lu/hexconvert/
也就是说,一个字节最大可以表示255而最小1可以表示0。
这是无符号位的情况,如果8位表示正数和负数,那么8位可以表示的范围是多大呢?
通常情况下,用第一位来表示正负【0为正,1为负】,这样算下来8位可以表示的范围是-127到+127。
历史长河中,补码登场
上述引入符号位的8位二进制数可以理解为原码。对于正数来说,原码就是补码,而对于负数来说,保留符号位,其他原码按位取反加1所得即为补码。补码的出现使得加减法只有加法,简化了计算结构,提高运算速度。
那么8位的情况下,用补码来衡量,可以表达的范围是-128--127。
为什么是-128???(按照补码计算)
10000001到11111111表示的范围是1到127,01111110到00000001表示的范围是-1到-127。
而00000000属于负数,按位取反加1的结果是10000000表示的数值是-128,但是00000000是负数。
所以8位二进制数在计算机里存储的范围是-128--127。
回到刚刚字节的问题,1字节等于8位而八位可以表示-128--127。这是byte类型的表示范围。
那如果我想用计算机计算1000加上1000,byte明显是不可用的。因为byte表示不了1000这个数值。
而short类型的存储空间为2个字节,也就是16位。对于short数据类型来说,能表示多大的数呢?
根据8位的表示范围推算:- 2的15次方到2的15次方-1=={-32768--32767}
以此类推,int为4个字节,long为8个字节,能表示的数更大。
Java通过定义变量的类型来规定变量的内存空间大小,通过阶梯式的定义,既有满足小数值运行的byte类型,也有支持大数值运算的long类型。这样不仅满足运算的最大支持(long),同时也能节省系统内存资源(byte)。
总结:数据类型的区分是一种系统资源分配优化的方案。
int x = 10; (Yes)
x = 10; (No)
简单来说,变量必须得先指定类型才能使用。
那么,变量有哪些类型呢???
数据类型分为基本数据类型和引用数据类型。
基本数据类型:整数型与浮点型,字符型,布尔类型
引用数据类型:字符串
Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语的一个字符。
char c1 = 'a';
char c2 = '中';
char c3 = '9';
char c3 = ‘\n’; 换行符
自动类型转换:由表示范围小的自动转换为表示范围大的。
为什么long 8字节自动转换为float 4字节的?
指数爆炸.....
顺便看看float和double的精度:7位和16位。
强制类型转换:
反向自动转换。
short to byte:
字符串转为基本类型:(通过包装类转换)
什么是包装类???
包装类是Java设计之初提出的,主要解决基本数据类型无法面对对象编程的问题。
基本数据类型是存放在栈中的,只有数据。而引用类型的值存放在栈中,而引用对象存放在堆中。
&和|两边都会进行运算
&&左边为false时右边不进行运算,直接返回false
||左边为true时右边不进行运算,直接返回true
^异或,相同为false,不同为true
3<<2: 3 == 00000011 ,左边去掉两位,右边添加2位,变为00001100
3>>1: 右边去掉一位,左边加1位
条件表达式?表达式1:表达式2
条件表达式为true,执行表达式1;为false,执行表达式2
//动态初始化
int a[] = new int[3];
a[0]=1;
a[1]=2;
a[2]=3;
//静态初始化
int b[] = new int[]{1,2,3};
//输出数组长度
System.out.println(b.length);
数组元素的默认初始化值
int[][] arr = new int[3][4];
for(int i =0;i<3;i++)
{
for(int j=0;j<4;j++)
{
arr[i][j]=i+j;
}
}
for(int i =0;i<3;i++)
{
for(int j=0;j<4;j++)
{
System.out.print(arr[i][j]+"\t");
if(j==3)
{
System.out.println();
}
}
}
康师傅2019新版—30天搞定Java核心技术(一)https://www.bilibili.com/video/av47470288
JavaGuide【52k】:https://github.com/Snailclimb/JavaGuide
Java中long类型为何会自动转换为float类型https://blog.csdn.net/writing_happy/article/details/78880606