1. 类型转换
自动转换 由小到大
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
double num1 = 100F; // 100.0float num2 = 1000L; //1000.0long num3 = 10; // 10
强制转换
byte a = 10;byte b = 10;byte c = (byte)(a + b); // a+b为int型,需要强制转化为byte型
注意事项
- 精度损失
- short、byte、char 可以加减,自动转换为int型然后再计算
2. Scanner
import java.util.Scanner;
2.1 三种输入数据流方式:
// 用户输入Scanner sc = new Scanner(System.in);int i = sc.nextInt();// 文件读取Scanner sc = new Scanner(new File("myNumbers"));while (sc.hasNextLong()) {long aLong = sc.nextLong();}// 字符串读取String input = "1 fish 2 fish red fish blue fish";Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");System.out.println(s.nextInt());System.out.println(s.nextInt());System.out.println(s.next());System.out.println(s.next());s.close();
2.2 常用方法
sc.hasNextLine() // 如果存在下一行则返回 truesc.nextInt() // 读取Int类型数据sc.nextLong() // 读取Long类型数据, 不同类型都有Float,Byte,Short,Booleansc.nextLine() //读取下一行
3. 输出控制
必须通过System.out.printf( "%f" )进行格式控制
| 标志 | 说明 | 示例 | 结果 | ||
|---|---|---|---|---|---|
| + | 为正数或者负数添加符号 | (“%+d”,15) | +15 |
||
| − | 左对齐 | (“%-5d”,15) | ` | 15 | ` |
| 0 | 数字前面补0 | (“%04d”, 99) | 0099 |
||
| 空格 | 在整数之前添加指定数量的空格 | (“% 4d”, 99) | ` | 99 | ` |
| , | 以“,”对数字分组 | (“%,f”, 9999.99) | 9,999.990000 |
||
| ( | 使用括号包含负数 | (“%(f”, -99.99) | (99.990000) |
||
| # | 如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0 | ("%#x", 99),("%#o", 99) |
0x63,0143 |
||
| < | 格式化前一个转换符所描述的 | ("%f和%<3.2f", 99.45) |
99.450000和99.45 |
||
| $ | 被格式化的参数索引 | ("%1$d,%2$s", 99,"abc") |
99,abc |
4. Switch
switch(表达式){case 1:case 2:语句体1;break;case 3:语句体2;break;default:语句体3;break;}
5. Random
import java.util.Random
常用方法:
Random ra = new Random();ra.setSeed(种子值)ra.nextInt()ra.nextInt(正数边界值)
- 生成某范围的随机数
Random r = new Random();public int getRandom(int min, int max){int num = r.nextInt(max);num = num % (max-min+1) + min;return num;}
6. 堆内存,方法栈
- 堆内存:
new出来的对象、数组都存储在堆内存 - 方法栈:
方法运行时使用内存,比如main方法运行时,进入方法栈中执行
6.1 多数组指向相同内存
7. 数组
静态初始化
int[] a = {1,2,3,4}动态初始化
int[] a = new int[5]
默认:
int,long,byte,short: 0
float, double: 0.0
char: \u0000
boolean: false
引用类型(数组、类、接口):null
- 数组拷贝
int[] arr = new int[3]int[] arrcopy = Arrays.copyOf(arr, 2*arr.length); // 复制数组,而非引用int[] arrcopy1 = Arrays.copyofRange(arr, 1, arr.length-1) // 复制数组的一部分for(int i = 0; i< arrcopy.length; i++) arrcopy[i]+= 1; // 修改复制后数组for(int i = 0; i< arr.length; i++) arr[i]+= 2; // 修改原数组System.out.println(Arrays.toString(arr)); // [2,2,2]System.out.println(Arrays.toString(arrcopy)); // [1,1,1,1,1,1] 两个数组不会互相影响,完全独立
数组排序
Arrays.sort(arr)数组填充
Arrays.fill(arr, 10);数组一致性对比
Arrays.equals(arr1, arr2)二维数组
// 声明二维数组int[][] arr2 = {{1,2,3},{2,3,4},{3,4,5}};// 遍历二维数组输出的几种方式for(int i = 0; i < arr2.length; i++){System.out.println(Arrays.toString(arr2[i]));}[1, 2, 3][2, 3, 4][3, 4, 5]// 标准对二维数组操作for(int i = 0; i < arr2.length; i++){for( int j = 0; j < arr2[i].length; j++){System.out.print(arr2[i][j]);}System.out.println();}123234345// 快速遍历读取for(int[] row: arr2)for(int e: row)System.out.print(e);123234345// 转化为数组读取System.out.println(Arrays.deepToString(arr2));[[1, 2, 3], [2, 3, 4], [3, 4, 5]]
- 二维数组的行互换
int[] tmp = arr2[1];arr2[1] = arr2[2];arr2[2] = tmp;
- 不规则数组
// 不规则数组声明int[][] arr3 = new int[5][];for(int i = 0; i < 5; i++){arr3[i] = new int[i+1];}// 赋值for(int i = 0; i < arr3.length; i++){for(int j = 0; j < arr3[i].length; j++){if(j == 0 | i==j){ arr3[i][j] = 1;}else arr3[i][j] = arr3[i-1][j] + arr3[i-1][j-1];}}// 遍历for(int i = 0; i < arr3.length; i++){System.out.println(Arrays.toString(arr3[i]));}[1][1, 1][1, 2, 1][1, 3, 3, 1][1, 4, 6, 4, 1]
7. for循环
- for each不需要下标的遍历数组
for(int e: arr) System.out.println(e);for(int i = 0; i < arr.length; ++i){System.out.println(arr[i]);}
或者直接通过Arrays.toString(arr)转换为字符串输出:System.out.println(Arrays.toString(arr)); —》 [0, 0, 0]
8. 数据类型转换
8.2 int,long,float,double,boolean,char,char[] —> String
String s = String.valueOf(10)
String s = String.valueOf(10.2)
String s = String.valueOf(true)
8. int,long,float,double,boolean,char,char[] —> String
Double d = 10.2; String ds = d.toString();
int i = 10; String is = i.toString();
Boolean b = true; String bs = b.toString();
8.1 String —> int
int i = Integer.parseInt("10")
8.2 String —> Double
Double d = Double.valueOf("10.2")
String —> char[]
String str="123456"; char[] c = str.toCharArray() ;
Double —> int
Double d = 10.6; int di = d.intValue();得到整数10,舍去小数位
Date <—> String
java.sql.Date day = TypeChange.stringToDate("2003-11-3");String strday = TypeChange.dateToString(day);
String —> Integer, Long, Float, Double, Short, Byte
string->byteByte static byte parseByte(String s)string->ShortShort static Short parseShort(String s)String->IntegerInteger static int parseInt(String s)String->LongLong static long parseLong(String s)String->FloatFloat static float parseFloat(String s)String->DoubleDouble static double parseDouble(String s)
9. 各个数据类型默认值
所有的包装类默认值都为null
| 序号 | 数据类型 | 大小/位 | 封装类 | 默认值 | 可表示数据范围 |
|---|---|---|---|---|---|
| 1 | byte(位) | 8 | Byte | 0 | -128~127 |
| 2 | short(短整数) | 16 | Short | 0 | -32768~32767 |
| 3 | int(整数) | 32 | Integer | 0 | -2147483648~2147483647 |
| 4 | long(长整数) | 64 | Long | 0L | -9223372036854775808~9223372036854775807 |
| 5 | float(单精度) | 32 | Float | 0.0f | 1.4E-45~3.4028235E38 |
| 6 | double(双精度) | 64 | Double | 0.0 | 4.9E-324~1.7976931348623157E308 |
| 7 | char(字符) | 16 | Character | ‘/uoooo’(null) | 0~65535 |
| 8 | boolean | 8 | Boolean | flase | true或false |
