Java命名规范
- 包名: 多单词组成时所有字母均小写
- 类名、接口名:多单词组成时,所有单词首字母大写
- 变量名、方法名:多单词组成时,第一个单词首字母小写,从第二个单词开始每个单词首字母大写
- 常量名:所有字母均大写,多单词时每个单词用下划线连接
Java数据类型
整型:byte(1)、short(2)、int(4)、long(8)
浮点型:float(4)、double(8)
自动类型提升:特别地,byte、short、char三者之间相互运算,结果为int.(也包括相互运算:byte+byte)
强制类型转换:
char c = 'a';//a:97,A:65
int num = 10;
string str = "hello";
System.out.println(c + num + str);
//107hello
System.out.println(c + str + num);
//ahello10
&与&&的异同?
- Java中&&和&都是表示与的逻辑运算符,都表示逻辑运输符and,当两边的表达式都为true的时候,整个运算结果才为true,否则为false。
- &:逻辑与、&&:短路与
&&的短路功能,当第一个表达式的值为false的时候,则不再计算第二个表达式;&则两个表达式都执行。- &可以用作位运算符,当&两边的表达式不是Boolean类型的时候,&表示按位操作。
Scanner类:从键盘获取不同类型的变量
具体实现步骤:
- 导包:
import Java.util.Scanner;
Scanner
的实例化:Scanner scan = new Scanner(System.in);
- 调用
Scanner
类的相关方法,来获取指定类型的变量。
int num = scan.nextInt();//输入int型
String str = scan.next();//获取字符串
double num = scan.nextDouble();//获取浮点型
- 对于
char
型的获取,Scanner
没有提供对应的方法,只能获取一个字符串。
一维数组的使用
1.一维数组的声明与初始化
int[] ids;//声明
//静态初始化:数组的初始化与数组元素的赋值操作同时进行
ids = new int[]{1001,1002,1003};
//动态初始化:数组的初始化与数组元素的赋值操作分别进行
String[] ids = new String[5];
错误写法:
int[] arr1 = new int[];
int[5] arr2 = new int[];
int[] arr3 = new int[3]{1,2,3];
2.如何调用数组指定位置的元素?
通过索引调用,从0 开始,到数组长度-1结束。
3.如何获取数组长度?
数组名.length;
4.如何遍历数组元素?
for(int i = 0;i < name.length; ++i){
System.out.println(name[i]);
}
5. 数组元素的默认初始化值
- 数组元素是整型(byte、short、int、long):0
- 数组元素是浮点型:0.0
- 数组元素是char型:0或’\u0000’(而非’ ')
- 数组元素是bollean型:false
- 数组元素是引用类型:null
6. 数组的内存解析
int[] arr = new int[]{1,2,3};
String[] arr1 = new String[4];
arr1[1] = "张三";
arr1[2] = "李四";
二维数组的使用
1.二维数组的声明与初始化
//静态初始化
int[][] arr1 = new int[][]{{1,2},{3,4}};
//动态初始化
String[][] arr2 = new String[3][2];
String[][] arr3 = new String[3][];
错误写法:
String[4][3] arr4 = new String[][];
String[][] arr5 = new String[][5];
2.如何调用数组指定位置的元素?
System.out.println(arr1[0][1]);//1
arr3[1] = new String[4];
System.out.println(arr3[1][0]);//null
3.如何获取数组长度?
System.out.println(arr2.length);//3
System.out.println(arr2[0].length);//2
4.如何遍历二维数组元素?
for(int i = 0;i < arr2.length; ++i){
for(int j = 0;j < arr2[i].length; ++j){
System.out.println(arr2[i][j]+" ");
}
System.out.println();
}
5. 数组元素的默认初始化值
规定:二维数组分为外层数组的元素、内层数组的元素
int[][] arr = new int[4][3];
外层元素:arr[0],arr[1]等
内层元素:arr[0][0],arr[1][2]等
举例说明:
int[][] arr = new int[4][3];
System.out.println(arr[0]);//输出地址值
System.out.println(arr[0][0]);//输出0
System.out.println(arr);//输出地址值
double[][] arr = new double[4][];
System.out.println(arr[0]);//null
System.out.println(arr[0][0]);//报错
总结:
一、针对初始化方式一:int[][] arr = new int[4][3];
- 外层元素的初始化值:地址值
- 内层元素的初始化值:与一维数组初始化值的情况相同
二、针对初始化方式一:int[][] arr = new int[4][];
- 外层元素的初始化值:null
- 内层元素的初始化值:不能调用,否则报错
数组中涉及的常用算法
- 数组元素的赋值(杨辉三角、回形数)
- 求数值型数组的最值、平均数
- 数组的复制、反转、查找
- 数组的排序算法
关于数组复制
int[] array1,array2;
array1 = new int[]{2,3,5,7};
array2 = array1;
以上并不能称为数组复制,只是指向了同一地址。array2相当于array1的快捷方式,如果更改array2中的元素值,array1中的值也会跟着改变。
真正的复制:
array2 = new int[array1.length]
for(int i = 0;i < array2.length;++i){
array2[i] = array1[i]
}
Arrays工具类的使用
java.util.Arrays
- 判断两个数组是否相等
//boolean equals(int[]a,int[]b)
int[]arr1 = new int[]{1,2,3,4};
int[]arr2 = new int[]{1,3,2,4};
boolean isEqual = Array.equals(arr1,arr2);
System.out.println(isEqual);//false
- 输出数组信息
//String toString(int[] a)
System.out.println(Array.toString(arr1));//null
- 将指定元素填充到数组当中
//void fill(int[] a,int val)
Array.fill(arr1,10)
- 排序
void sort(int[] a) //从小到大排序
void sort(int[] a, int fromIndex, int toIndex)//这种形式是对数组部分排序,也就是对数组a的下标从fromIndex到toIndex-1的元素排序,注意:下标为toIndex的元素不参与排序
数组中常见异常
- 数组角标越界的异常
- 空指针异常
//数组角标越界异常
int[] arr1 = new int{1,2,3,4,5};
for(int i = 0;i < arr1.length; ++i){
System.out.println(arr1[i]);
}
//空指针异常
//情况一:
int[] arr2 = new int[]{1,2,3};
arr2 = null;
System.out.println(arr2[0]);
//情况二:
int[][] arr3 = new int[4][];
System.out.println(arr3[0]);//null,不是空指针
System.out.println(arr3[0][0]);//空指针
//情况三:
String[] arr4 = new String[]{"AA","BB","CC"};
System.out.println(arr4[0].toString());
arr4[0]=null;
System.out.println(arr4[0].toString());//空指针