一、简介
- JVM(Java Virtual machine)
- JRE(Java Runtime Environment)包含java虚拟机和java程序所需要的核心类库
- JDK(Java Development Kit Java开发工具包),用于开发Java程序。包括JRE和java的开发工具。所以安装了JDK,就不用单独安装JRE了。
其中: 编译工具(javac.exe) 打包工具(jar.exe)
- 安装:
安装的JDK是一个绿色版的,可以拷贝到任何地方。安装之后还会提示安装一个独立的JRE,这个可以不用,应为JDK下面已经有一个JRE了。JavaFX是一个和ajax差不多的SDK,用于前端开发。
设置PATH :将bin文件夹的绝对路径添加到Path可以解决命令行中调用java工具就不用指定绝对路径了。JAVA_HOME 指定JDK的根目录,就是bin的父目录。
也可以在CMD里使用 set path= bin;%path% 添加bin的路径。 临时配置(只在当前窗口显示)
set 查看本机所有环境变量;set 变量名 查看具体环境变量的值 set 变量名= 清空一个环境变量的值;set 变量名=变量值 给指定变量指定具体值。%变量名% 可以引用他的实际值。
- .java文件--->javac.exe编译生成 .class文件 --->java.exe运行
- class文件的寻找顺序
在没有classpath的时候,只在当前目录下面查找要运行的类文件
在存在classpath的时候,会在设置的目录下查找类文件。如果最后目录以分号结尾,jvm没有找到时会在当前目录继续查找。不建议加分号,可以用.表示当前目录。
二、基础
- 关键字:
定义:被java语言赋予了特殊含义
特点:关键字中所有字母都为小写用于定义数据类型的关键字 class interface byte short int long float double char boolean void 用于定义数据类型值的关键字 true false null 用于定义流程控制的关键字 if else switch case default while do for break continue return 定义访问权限修饰符的关键字 private protected public 定义类、函数、变量修饰符的关键字 abstract final static synchronized 定义类与类之间关系的关键字 extends implements 定义建立实例及引用都实例,判断实例的关键字 new this super instanceof 用于异常处理的关键字 try catch finally throw throws 用于包的关键字 package import 其它修饰符关键字 native strictfp transient volatile assert - 标识符:
26个字母的大小写,数字0-9,_$组成。数字不能开头,不可以使用关键字。严格区分大小写(规则)- 包名:所有字母都小写
- 类名、接口名:首字母要大写,多词组成时每个词的首字母都大写。(规范)
- 变量名、函数名:多单词组成时,第一个单词小写,从第二个单词开始首字母大写
- 常量名:所有字母大写。多单词时用下划线连接
- 注释:单行注释 //; 多行注释 /* */; 文档注释/** */
- 常量和变量
常量:整数常量、小数常量、布尔(boolean)常量、字符常量(将一个数字字母或者符号用单引号标识)、字符串常量(将一个或者多个字符用双引号标识)、null常量(null)。
对于整数有四种表现形式:二进制;八进制,用0开头;十进制;十六进制,用0x开头。
变量:格式:数据类型 变量名 = 初始化值
数据类型:
- 整数类型:byte(1Byte)、short(2Byte)、int(4Byte)、long(8Byte)
- 字符类型:float(4Byte)、double(8Byte)
- 字符型:char(2Byte 0-65535)
- 布尔型:boolean(true、false)
- 类:class(引用类型)
- 接口:interface(引用类型)
- 数组:[](引用类型)
整数默认:int 小数默认:double;数字后面紧跟l表示该数字是long型的 小数后面紧跟f表示该小数是float类型
- 运算符
算数运算:
运算符 运算 范例 结果 + 正号 +3 3 - 负号 b=4;-b -4 + 加 - 减 * 乘 / 除 % 取模 ++ 自增 a=2;b=++a;
a=2;b=a++;
a=3,b=3;
a=3,b=2
-- 自减 + 字符串相加 取模时,被模数是负数,结束就是负数,模数正负对结果没有影响。
相加时只要有字符串,结果肯定是字符串
赋值运算符:
=,+=,-=,*=,/=, %=比较运算符:
==,!=,<,>,<=, >=, intstanceof(检查是否是类的对象)逻辑运算符:
运算符 运算 范例 结果 & AND(与) false&true false | OR(或) false|true true ^ XOR(异或) true^false true ! NOT(非) !true false && AND(短路) false&&true false || OR(短路) false||true true 位运算符:
运算符 运算 范例 << 左移 空位补0,被移除的高位丢弃,空缺位补0 >> 右移 被移位的二进制最高位是0,右移后,空缺位补0;
最高位是1,空缺位补1。>>> 无符号右移 被移位二进制最高位无论是0或者是1,空缺位都用0补。 & 与运算 二进制位进行&运算,只有1&1时结果是1,否则是0; | 或运算 二进制位进行 | 运算,只有0 | 0时结果是0,否则是1; ^ 异或运算 任何相同二进制位进行 ^ 运算,结果是0;1^1=0 , 0^0=0
不相同二进制位 ^ 运算结果是1。1^0=1 , 0^1=1~ 反码 三元运算符:
(条件表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2; -
三、程序控制语句
- 判断结构
if格式
if(条件表达式)
{
}if(条件表达式)
{
}
else
{
}if(条件表达式)
{
}
else if(条件表达式)
{
}
else
{
}
switch格式
switch(表达式)//只支持byte,short,int , char四种类型 { case 取值1: 执行语句; break; case 取值2: 执行语句; break; … default: 执行语句; break; }
case 和default的顺序没有要求。但是只要条件符合之后就不会再判断条件,直到遇到break或者switch的结束括号。
- 循环结构
while语句格式 :
while语句格式 :
while(条件表达式)
{
执行语句;
}do while语句格式:
do
{
执行语句;
}while(条件表达式);for格式:
for(初始化表达式;循环条件表达式;循环后的操作表达式)
{
执行语句;
}
- 其他流程控制语句
break( 跳出) , continue( 继续)
break语句:应用范围:选择结构和循环结构。
continue语句:应用于循环结构。
注:
a,这两个语句离开应用范围,存在是没有意义的。
b,这个两个语句单独存在下面都不可以有语句,因为执行不到 。
c,continue语句是结束本次循环继续下次循环。
d,标号的出现,可以让这两个语句作用于指定的范围。 - 局部代码块
可以将缩小变量的作用域。
四、函数
- 函数的格式:
修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,)
{
执行语句;
return 返回值;
}
返回值类型:函数运行后的结果的数据类型。
参数类型:是形式参数的数据类型。
形式参数:是一个变量,用于存储调用函数时传递给函数的实际参数。
实际参数:传递给形式参数的具体数值。
return:用于结束函数。
返回值:该值会返回给调用者。 - 函数的重载(overload)
重载的概念
在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。重载的特点:
与返回值类型无关,只看参数列表。重载的好处:
方便于阅读,优化了程序设计。
五、数组
- 格式:
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7}; - 数组内存结构
数组的名字在栈内存存储了数组元素在堆内存的首地址,数组中元素在堆内存中
- 数组操作常见问题
数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。
空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。 - 数组常见操作
获取最值(最大值,最小值)
排序(选择排序,冒泡排序)
折半查找(二分查找)
- 数组中的数组
格式1:int[][] arr = new int[3][2];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0], arr[1], arr[2]
给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};
定义一个名称为arr的二维数组
二维数组中的有三个一维数组
每一个一维数组中具体元素也都已初始化
第一个一维数组 arr[0] = {3,8,2};
第二个一维数组 arr[1] = {2,7};
第三个一维数组 arr[2] = {9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。
内存结构
栈内存
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存
数组和对象,通过new建立的实例都存放在堆内存中。 每一个实体都有内存地址值 实体中的变量都有默认初始化值 实体不在被使用,会在不确定的时间内被垃圾回收器回收
方法区
本地方法区
寄存器