(一)基本语法与运算符

来源:互联网 发布:人邮学院网络课程 编辑:程序博客网 时间:2024/05/22 02:21

一,基本常识

1.1. 编译相关命令

  • javac 编译Java文件
  • javac -encoding 编译Java文件,指定编码方式
  • javadoc -d mydoc -author -version 1.java 生成Java Doc

1.2. 关于源文件

  • 注释:
    • //单行注释
    • /* 多行注释 */
    • /** 文档注释 @author @version @param */
  • 源文件以.java结尾,其中可以有多个class,但只有一个public class 且与文件名相同。
  • class中可以有静态main()方法,其格式固定。
  • 注意识别关键字(关键字都是小写)

1.3. 关于标识符命名规范

  • 标识符(可以自己命名的),对变量,方法,类,接口的命名等。
  • 数字不可开头,区分大小写,不可含空格。
  • 只能包含 A~Z,a~z,0~9,_,$
  • 包名:全小写,xxyyzz
  • 类名,接口名:首字母大写 XxYyZz
  • 变量,方法名:首字母小写,后面大写,xxYyZz
  • 常量名:所有字母大写,且用 ‘_’ 连接,XX_YY_ZZ

二,数据类型及运算

2.1基本数据类型

2.1.1. 基本数据类型说明:
  • byte(1byte) , short(2byte) , int(4byte) , long(8byte)(L)
  • 二进制表示(0B),十进制表示,八进制表示(0),十六进制表示(0x)
  • float(4byte)(F) double(8byte)
  • char(2byte)
  • boolean(true or false);
2.1.2. 引用数据类型:
  • class 自定义类
  • interface 自定义接口
  • String 自定义字符串
  • 数组 自定义数组
2.1.3. 基本数据类型注意事项
  • 字符串与基本数据类型之间的运算只能是连接运算
  • 变量格式:数据类型 变量名 = 初始化值
  • 隐式转换:byte,short,char==>int==>long==>float==>double,此逆过程需强制转换。
  • 不同进制之间的转换方式:2进制,八进制,十进制,16进制。(计算机内部以补码形式存储)

2.2 运算

2.2.1算数运算符及其优先级:
优先级 运算符 1 () 2 +,- 3 ++,–,! (自运算) 4 *,/,%(取余,最后符号跟被模数相同) 5 +,- 6 >>,>>>,<< (位移运算) 7 <,>,>=,<= (比较运算) 8 ==,!= (比较运算) 9 & 10 ^ 11 | 12 && 13 || 14 ? :(返回值类型与后面两表达式类型一致) 15 =
2.2.2 关于运算的几点注意事项
  • java中传递机制:值传递
    • 如array2=array1//把array1的栈空间地址值传递给栈空间的array2
  • 逻辑运算符:&,&&,|,||,!,^
  • 位运算符:&,|,~(反码),^(异或),>>,>>>(无符号右移),<<
  • 比较运算符:== > < <== instanceof(类关系判定运算)
  • 对于“==”符号的使用:
    • 对于基本数据类型,为判断值是否相等,两端数据类型可以不同
    • 对于引用数据类型,a1.equals(a2)默认判断地址值,等同于a1==a2,如需要判断内容,需要重写equals()方法。
    • 像String 包装类 File类Date类,这些类重写了Object类的equals()方法,从而可以直接用来比较实体内容。

三,流程控制

3.1 判断结构

if(){//TODO}else if(){//TODO}else{//TODO}//先判定case,若无break,则从接口处往下执行//switch中可判断:byte short  char int 枚举 String(jdk1.7) switch(){case a:     //TODO    break;case b:     //TODO     break;default:     //TODO    break;}

3.2. 循环结构

/*break:结束循环或switchcontinue:在循环中结束当次循环break label:结束lable指定的循环continue label:结束指定当次循环*///变量可以定义在内部for(int i=0;i<len;i++){    //TODO    if(){        break;//结束循环    }else if(){        continue;//结束当次循环    }}label_name:for(;;){    for(;;){        if(){            break label_name;//结束label_name指定的循环        }else if(){            continue label_name;//结束label_name指定的当前循环        }    }}//变量定义在外部while( ){    //TODO}//判定之前先执行一次循环体do{    //TODO}while();

四,数组:

4.1 数组声明:

String[] name1;//方括号可以放在变量名前int name2[];//方括号可以放在变量名之后int [][] name2d;//定义多维数组

4.2 初始化:

//静态初始化,创建的时候就知道大小及其内容name1=new String[]{"A","B","C"};//一维name2d=new int[][]{{"A","B"},{"B","C"}}//多维//动态初始化,之后为每个数组元素赋值name2=new int[4];//一维name2[0]= ;name2[1]= ;...//动态初始化多维数组//每个次级数组大小相同,类似于矩阵name2d=new int[m][n];//每个次级数组大小也可以不同name2d=new int[m][];name2d[0]=new int[n0];//之后为每个次级数组定义长度name2d[1]=new int[n1];...//数组长度的获取name1.lengthname2d.length//获取最高级数组长度name2d[i].length(第i+1个最高级数组元素索引的次级数组长度)

4.3 关于数组的注意事项

  • 对于byte short int long 默认初始化值为0
  • 对于float double 默认初始化值为0.0
  • 对于char 默认初始化值为空格
  • 对于boolean 默认初始化值为false
  • 对于引用类型变量,如String,默认初始化值为null
  • 一维数组可以使用for循环遍历,二维数组可以使用嵌套for遍历
  • 一维或多维数组在内存中的结构:栈(stack)存对象的引用,堆(heap)存对象数据

4.4. 数组常见异常:

  • 下标越界:
    java.lang.ArrayIndexOutOfBoundsException
    int [] a =new int[3];    System.print.out(a[3])//a的最大索引为2,此时会产生下标越界
  • 空指针异常:
    java.lang.NullPointerException
//1.数组名的栈空间为nullint a=new int[3];a=null;//将a的栈空间地址变为null//2. 数组值为null时调用方法Sring b=new String[3];//此时b[2]的堆空间地址默认为nullb[2].toString(); //3. 在指针无法指向的地方赋值int c=new int[3][];//在堆空间创建三个null,即没定义次级指向地址c[2][0]=2;//直接给次级指向地址赋值,出现异常
  • 对于以上的异常,理解数组在栈堆的存放机制便可轻易理解。

4.5 数组的常用算法:

4.5.1 求max,min,avg,sum
4.5.2 copy:
int[] array=new int[j.length];for(int i=0;i<array.length;i++){    array[i]=array1[i];}
4.5.3 反转:
//第一种方法:for(int i=0;i<array.length/2;i++){    int temp=array[i];    array[a]=i[array.length-1-i];    array[array.length-1-i]=temp;}//第二种方法:for(int x=0,j=array.length-1;x<y;x++,y--){    int temp=array[x];    array[x]=array[y];    array[y]=temp;}
4.5.4 排序
4.5.4.1 插入排序
  • 直接插入排序
  • 折半插入排序
  • shell排序
4.5.4.2 交换排序
  • 冒泡排序(从左到右,两两对比,大(小)的放后面)
for(int i=0;i<array.length-1;i++){    for(int j=0;j<array.length-1-i;j++){        if(array[j]>array[j+1]){            int temp=array[j];            array[j]=array[j+1];            array[j+1]=temp;        }    }}
  • 快速排序(或分区交换排序)
4.5.4.3 选择排序
  • 直接选择排序(最左边的数依次跟右边的数对比,一轮后最小(大)的在左边)
for(int i=0;i<array.length-1;i++){    for(int j=i;j<array.length;j++){    //如果发现右边有更小的,互换        if(array[i]>array[j]){            array[i]^=array[j];            array[j]^=array[i];            array[i]^=array[j];        }    }}
  • 堆排序
4.5.4.4 归并排序
4.5.4.5 基数排序
0 0