1. 类型转换

自动转换 由小到大

byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double

  1. double num1 = 100F; // 100.0
  2. float num2 = 1000L; //1000.0
  3. long num3 = 10; // 10

强制转换

  1. byte a = 10;
  2. byte b = 10;
  3. byte c = (byte)(a + b); // a+b为int型,需要强制转化为byte型

注意事项

  1. 精度损失
  2. short、byte、char 可以加减,自动转换为int型然后再计算

2. Scanner

import java.util.Scanner;

2.1 三种输入数据流方式:

  1. // 用户输入
  2. Scanner sc = new Scanner(System.in);
  3. int i = sc.nextInt();
  4. // 文件读取
  5. Scanner sc = new Scanner(new File("myNumbers"));
  6. while (sc.hasNextLong()) {
  7. long aLong = sc.nextLong();
  8. }
  9. // 字符串读取
  10. String input = "1 fish 2 fish red fish blue fish";
  11. Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");
  12. System.out.println(s.nextInt());
  13. System.out.println(s.nextInt());
  14. System.out.println(s.next());
  15. System.out.println(s.next());
  16. s.close();

2.2 常用方法

  1. sc.hasNextLine() // 如果存在下一行则返回 true
  2. sc.nextInt() // 读取Int类型数据
  3. sc.nextLong() // 读取Long类型数据, 不同类型都有Float,Byte,Short,Boolean
  4. sc.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.45000099.45
$ 被格式化的参数索引 ("%1$d,%2$s", 99,"abc") 99,abc

4. Switch

  1. switch(表达式){
  2. case 1:
  3. case 2:
  4. 语句体1;
  5. break;
  6. case 3:
  7. 语句体2;
  8. break;
  9. default:
  10. 语句体3;
  11. break;
  12. }

5. Random

import java.util.Random

常用方法:

  1. Random ra = new Random();
  2. ra.setSeed(种子值)
  3. ra.nextInt()
  4. ra.nextInt(正数边界值)
  • 生成某范围的随机数
  1. Random r = new Random();
  2. public int getRandom(int min, int max){
  3. int num = r.nextInt(max);
  4. num = num % (max-min+1) + min;
  5. return num;
  6. }

6. 堆内存,方法栈

  • 堆内存: new出来的对象、数组都存储在堆内存
  • 方法栈: 方法运行时使用内存,比如main方法运行时,进入方法栈中执行

6.1 多数组指向相同内存

Java基础_2 - 图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

  • 数组拷贝
  1. int[] arr = new int[3]
  2. int[] arrcopy = Arrays.copyOf(arr, 2*arr.length); // 复制数组,而非引用
  3. int[] arrcopy1 = Arrays.copyofRange(arr, 1, arr.length-1) // 复制数组的一部分
  4. for(int i = 0; i< arrcopy.length; i++) arrcopy[i]+= 1; // 修改复制后数组
  5. for(int i = 0; i< arr.length; i++) arr[i]+= 2; // 修改原数组
  6. System.out.println(Arrays.toString(arr)); // [2,2,2]
  7. System.out.println(Arrays.toString(arrcopy)); // [1,1,1,1,1,1] 两个数组不会互相影响,完全独立
  • 数组排序
    Arrays.sort(arr)

  • 数组填充
    Arrays.fill(arr, 10);

  • 数组一致性对比
    Arrays.equals(arr1, arr2)

  • 二维数组

  1. // 声明二维数组
  2. int[][] arr2 = {
  3. {1,2,3},
  4. {2,3,4},
  5. {3,4,5}
  6. };
  7. // 遍历二维数组输出的几种方式
  8. for(int i = 0; i < arr2.length; i++){
  9. System.out.println(Arrays.toString(arr2[i]));
  10. }
  11. [1, 2, 3]
  12. [2, 3, 4]
  13. [3, 4, 5]
  14. // 标准对二维数组操作
  15. for(int i = 0; i < arr2.length; i++){
  16. for( int j = 0; j < arr2[i].length; j++){
  17. System.out.print(arr2[i][j]);
  18. }
  19. System.out.println();
  20. }
  21. 123
  22. 234
  23. 345
  24. // 快速遍历读取
  25. for(int[] row: arr2)
  26. for(int e: row)
  27. System.out.print(e);
  28. 123234345
  29. // 转化为数组读取
  30. System.out.println(Arrays.deepToString(arr2));
  31. [[1, 2, 3], [2, 3, 4], [3, 4, 5]]
  • 二维数组的行互换
  1. int[] tmp = arr2[1];
  2. arr2[1] = arr2[2];
  3. arr2[2] = tmp;
  • 不规则数组
  1. // 不规则数组声明
  2. int[][] arr3 = new int[5][];
  3. for(int i = 0; i < 5; i++){
  4. arr3[i] = new int[i+1];
  5. }
  6. // 赋值
  7. for(int i = 0; i < arr3.length; i++){
  8. for(int j = 0; j < arr3[i].length; j++){
  9. if(j == 0 | i==j){ arr3[i][j] = 1;}
  10. else arr3[i][j] = arr3[i-1][j] + arr3[i-1][j-1];
  11. }
  12. }
  13. // 遍历
  14. for(int i = 0; i < arr3.length; i++){
  15. System.out.println(Arrays.toString(arr3[i]));
  16. }
  17. [1]
  18. [1, 1]
  19. [1, 2, 1]
  20. [1, 3, 3, 1]
  21. [1, 4, 6, 4, 1]

7. for循环

  • for each不需要下标的遍历数组
  1. for(int e: arr) System.out.println(e);
  2. for(int i = 0; i < arr.length; ++i){
  3. System.out.println(arr[i]);
  4. }

或者直接通过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

  1. java.sql.Date day = TypeChange.stringToDate("2003-11-3");
  2. String strday = TypeChange.dateToString(day);

String —> Integer, Long, Float, Double, Short, Byte

  1. string->byte
  2. Byte static byte parseByte(String s)
  3. string->Short
  4. Short static Short parseShort(String s)
  5. String->Integer
  6. Integer static int parseInt(String s)
  7. String->Long
  8. Long static long parseLong(String s)
  9. String->Float
  10. Float static float parseFloat(String s)
  11. String->Double
  12. Double 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