(一)基本语法与运算符

一,基本常识

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:结束循环或switch
continue:在循环中结束当次循环
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.length
name2d.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.数组名的栈空间为null
int a=new int[3];
a=null;//将a的栈空间地址变为null
//2. 数组值为null时调用方法
Sring b=new String[3];//此时b[2]的堆空间地址默认为null
b[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 基数排序
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值