Java开发环境
编译运行过程:
编译期: java源文件,经过编译,生成.class字节码文件
运行期: JVM加载.class并运行.class(0和1)
特点: 跨平台, 一次编译到处运行
2.名词解释:
JVM: Java虚拟机
加载.class并运行.class
JRE: Java运行环境
除了包含JVM以外还包含了运行Java程序必须的环境
JRE = JVM + Java系统类库(小零件)
JDK:Java开发环境
除了包含JRE以外还包含了运行Java程序所必须的命令工具
JDK = JRE + Java编译,运行等命令工具
Java语言基础
变量
使用前需要声明并初始化
命名: 只能包含字母 数字 _ 和$符 并且不能以数字开头 \ 严格区分大小写
八种基本数据类型:
byte short int long float double boolean char
整数型 长整数 浮点型 布尔型 字符型
4字节 8字节 8字节 1字节 2字节
21多亿 900万万亿 很大
int: 两个整数相除,结果为整数,小数会无条件舍去 | 运算时如果超出范围则会溢出
long 和 float 在表示直接量时 需要在后面加上 L 或 F
double 运算时可能会发生舍入误差, 不适用于精确场合 精确运算时需要用BigDecimal
char 采用Unicode编码 a--97 A--65 0--48; ''字符型直接量必须放在单引号中,只能有一个
特殊符号需要通过\来转义
类型间的转换:
数据类型从大到小依次为: byte<short<int<long<float<double<char
两种方式:
自动/隐式类型转换: 从小类型到大类型
强制类型转换: 从大类型到小类型
语法: (要转换成为的数据类型) 变量
注意: 强转有可能发生溢出或丢失精度
两点原则:
整数直接量可以直接赋值给byte short char , 但是不能超出范围
byte short char 型数据参与运算时, 系统一律将其转换为int再运算
system.out.printle('a'+0) // 48
bytea=5, b=6;
bytec= (byte)(a+b)
运算符:
算术: + - * / % ++ --
%: 取余/取模, 余数为0即为整除
++/--:自增自减
单独使用时,在前在后都一样
inta=5; a++;
被使用时,在前在后不一样
a++ 的值为a------------(a-- 的值为a ) 先用后加
++a的值为a+1---------(--a 的值为a-1) 先加后用
inta=5,b=5;
intc=a++; intd=++b;
System.out.println(a) // 6
System.out.println(b) //6
System.out.println(c) //5
System.out.println(d) //6
逻辑运算符:
&&: 短路与(并且), 一假则假. 两真则真
||: 短路或(或者), 一真则真,两假才假
!: 逻辑非(取反)
三元运算符: boolean? 值1 : 值2 ;
执行过程: 若boolean为真,则输出 值1, 若boolean 为假, 则输出 值2
分支结构
if结构:
if(boolean){ 语句块 }
执行过程:若boolean为真则执行语句块, 为假则直接结束
if...else结构
if(boolean){
语句块
}else{ 语句块}
执行过程:
判断boolean的值:若为true,则执行语句块1(整个结束) 若为false,则执行语句块2(整个结束)
if...else if ...else 结构
1)语法:
if(boolean-1){
语句块1
}elseif(boolean-2){
语句块2
}elseif(boolean-3){
语句块3
}else{
语句块4}
2)执行过程:
判断boolean-1,若为true则执行语句块1(结束),若为false则
再判断boolean-2,若为true则执行语句块2(结束),若为false则
再判断boolean-3,若为true则执行语句块3(结束),若为false则执行语句块4(结束)
switch...case结构:多条路
优点:效率高 结构清晰
缺点: 只能对整数判断
break: 跳出switch
switch(command){
case 1: 语句体;
break;
...
dufault:语句体;
}
其中变量command类型可以为: byte short int char String 枚举
循环:
反复多次执行一段相同或者相似的代码
循环三要素:
循环变量的初始化
循环的条件(以循环变量为基础)
循环变量的改变
循环结构:
while结构: 先判断后执行,有可能一次都不执行
while (boolean){语句块/循环体}
do...while结构: 先执行后判断,至少执行一次
do{
语句块
}while(boolean)
执行过程:
先执行语句块,再判断boolean的值,若为true则
再执行语句块,再判断boolean的值,若为true则
再执行语句块,再判断boolean的值,若为true则
再执行语句块,如此反复,直到boolean的值为false时,do...while结束
for结构: 应用率最高,适合与次数相关的
for(要素1;要素2;要素3){
语句体/循环体
}
三种循环结构如何选择:
先看循环是否与次数有关
若有关-------------直接上for
若无关, 再看第1要素与第3要素的代码是否相同:
若相同--------------------------------直接上do...while
若不同--------------------------------直接上while
break 结束当前循环
continue: 跳过循环体中剩余语句而进入下一次循环
变量的作用域/范围: 从变量的声明开始, 到包含它最近的大括号结束
变量的重名问题: 作用域重叠时,变量不同重名
嵌套循环:
循环中套循环,常常多行多列时使用,外层控制行,内层控制列
执行规则:外层循环走一次,内层循环走所有次
建议:嵌套层数越少越好,能用一层就不用两层,能用两层就不用三层
break默认只能跳出当前一层循环
数组:
ArrayIndexOutOfBoundsException:数组下标越界异常
数组下标一定在0到(数组长度-1)之间,若超出范围,在运行时会发生数组下标越界异常
引用数据类型、相同数据类型元素的集合
int[] arr=newint[3]; //0,0,0
int[] arr= {2,3,7};
int[] arr=newint[]{2,3,7};
arr[0] =100;
System.out.println(arr[arr.length-1]);
for(inti=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*100);
System.out.println(arr[i]);
}
Arrays.sort(arr); //升序
数组复制
System.arraycopy(a,1,b,2.4);
int [] a= {10,20,30,40,50};
int [] b=newint[6];
//a:原数组
//1:原数组起始索引
//b:目标数组
//2:目标数组的起始索引
//4:要复制的元素个数
System.arraycopy(a,1,b,2.4);//灵活性好
int[]b =Arrays.copyOf(a,6);
int[] a= {10,20,30,40,50};
//a:源数组
//b:目标数组
//6:目标数组的长度
// --若目标数组长度>源数组长度,则末尾补默认值
// --若目标数组长度<源数组长度,则将末尾的截掉
int[] b=Arrays.copyOf(a,4); //灵活性差
a=Arrays.copyOf(a,a.length+1); //数组的扩容
方法:
作用: 用于封装一段特定的业务逻辑功能
建议:尽可能独立, 一个方法只干一件事
方法可以被反复多次利用
好处:可以减少代码重复,有利于代码维护
何时用:只要是一个独立的业务功能,就得封装一个方法中
修饰词 返回值类型 方法名(参数列表){
方法体------具体的业务逻辑功能实现
}
方法的调用:
无返回值: 方法名(有参传参);
有返回值: 数据类型 变量 = 方法名(有参传参);
return:
return值: 1)结束方法的执行 2) 返回结果给调用方---------------用在有返回值的方法中
return: 1)结束方法的执行--------------------------------------用在无返回值的方法中
补充知识
小驼峰命名法:
首个单词字母小写,其余单词首字母大写 用于方法名 和 变量名
大驼峰命名法:
所有单词首字母都大写 用于类名