廖雪峰老师的java教程                                                                -------------2021.8.21,wudibooo


Java程序基础 

java简介

【JDK】

【JVM】

java程序基本结构

变量和数据类型

   [这四个是整型]

  • byte 1 [数字表示字节数]
  • short 2 
  • int  4 
  • long 8 

这两个是浮点型

  • float 4 ,需要加上f后缀
  • double 8 

  • char 2
  • string 字符串
  • final 常量
  • var 关键词
var man = new ManClass() //等于ManClass man = new ManClass()

整数运算

【溢出问题】

【i++,++i】:前者是先赋值,再加,后者相反

移位

  • >> :右移,低位舍弃,高位根据符号位补位,整数补0,负数补1
  • >>>:无符号右移,无论怎么样都补零
  • <<:左移,舍弃高位,低位补0

运算优先级

  • ()
  • ! ~ ++ --
  • * / %
  • + -
  • << >> >>>
  • &
  • |
  • += -= *= /=

类型变换

  • 在不同类型的整型相加时,结果时最大的那个类型
  • 强制转换时,高转低,溢出会舍弃高位的数据,出现错误。
int i1 = 1234567;
short s1 = (short) i1; // -10617

浮点数运算

【精确问题】:在计算机中,有的浮点数无法用用二进制精确保存,比如0.1

溢出问题

浮点数的比较】:一般是计算两者的绝对值得差,来判断T or F

类型转换

  • 整型会自动转浮点型
  • 可以将浮点型强制转为整型,但超出范围后将始终返回整型的最大值。

布尔运算

【关系运算符】

【短路运算】:如果一个布尔运算的表达式能提前确定结果,则后续的计算不再执行,直接返回结果。

boolean b = 5 < 3; //后面5/0 原本会报错,但是无论如何0与谁都得到0,所以没有报错
boolean result = b && (5 / 0 > 0);

【三元运算符】b? x:y

字符和字符串

【char】:保存一个Unicode字符

char是基本类型,字符串类型String是引用类型】:基本类型的变量是“持有”某个数值,引用类型的变量是“指向”某个对象。

tips

  • 语句从左到有执行。
int a = 72;
        int b = 105;
        int c = 65281;
        // FIXME:
        String s = ""+(char)a +(char)b +(char)c;   //Hi!
//先生成一个空字符,在用char对a,b,c分别转为Unicode

数组类型

【数组的定义】

整形数组:值类型

int [] lsit = new int [5] //长度为5 , 初始值: int 0 float 0.0 boolfalse
int [] list = new int [] {1,2,3,4,5,6} //自动计算
int [] list = {1,2,3,4,5,6}

字符串数组:引用类型

String[] names = {"ABC", "XYZ", "zoo"};

java MultipartEntityBuilder文件偏移量 java内存偏移量_整型


2021.8.22

流程控制

输入和输出

【printl    and     print】:不需要换行就用print

【格式化输出】:printf

System.out.printf("%.2f\n", d); // 显示两位小数3.14
        System.out.printf("%.4f\n", d); // 显示4位小数3.1416

 【占位符】:

%d

格式化输出整数

%x

格式化输出十六进制整数

%f

格式化输出浮点数

%e

格式化输出科学计数法表示的浮点数

%s

格式化字符串

 【输入】:比较麻烦,要import java.util.Scanner

import java.util.Scanner;
public class hellow {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);  //新建一个对象
        System.out.println("please input:");
        String line = scanner.nextLine();    //接受一个string line  ,还有nextint
        System.out.println(line);
    }
}

if判断

if( 条件1 ){
    语句1
}else if( 条件2 ){
    语句2
}else{
    语句3
}

 【判断应用类型】:就算值相同,在用==时,两者也不一定相等,要比较内容需要用equals()方法

swtich多重选择

switch (option) {
        case 1:  //条件也可以是字符串
            System.out.println("Selected 1");
            break;
        case 2:
            System.out.println("Selected 2");
            break;
        case 3:
            System.out.println("Selected 3");
            break;
        default:  //没有条件匹配,就执行dafault
            System.out.println("Not selected");
            break;
        }

 【tips】:java12之后可以不写break

switch (fruit) {
        case "apple" -> System.out.println("Selected apple");
        case "pear" -> System.out.println("Selected pear");
        case "mango" -> {   //多个语句要用花括号
            System.out.println("Selected mango");
            System.out.println("Good choice!");
        }
        default -> System.out.println("No fruit selected");
        }

 【yield】:swtich可以直接返回值,如果语句多需要利用yield来返回值

int opt = switch (fruit) {
            case "apple" -> 1;
            case "pear", "mango" -> 2;
            default -> {
                int code = fruit.hashCode();
                yield code; // switch语句返回值
            }
        };

while循环

【先判断循环条件,再执行循环

while (条件表达式) {
    循环语句
}

do while循环

【先执行循环,再判断条件】

do {
    执行循环语句
} while (条件表达式);

for 循环

for (int i=1; i<=100; i++) { 
//先初始化int i =1,再判断条件,成立则执行下面的语句,最后更新计数
            sum = sum + i;
        }

for each循环】:通常java用来遍历数组,类似python的 for in ,注意不是;是:

for (int n : ns) {
            System.out.println(n);
        }

break和continue

【break跳出自己所在的循环】【continue跳出本次的循环】


数组操作

遍历数组

【for】

【for each】

【java.util.Arrays】:Arrays.toString(ns)

数组排序

冒泡排序】:一个个怼上去

java.util.Arrays:Arrays.sort()

多维数组

//二维
int [][] ns ={
        {1,2},
        {3,4}
    } 
//三维
int [][][] ns ={
    {
        {1,2},
        {3,4}
    } ,
    {
        {1,2},
        {3,4}
    } 
}

 【三维数组内存结构】

java MultipartEntityBuilder文件偏移量 java内存偏移量_整型_02

【遍历方法】:对每一层都用for each 

for (int[] i : scores){
    for (int j : i){sum = sum+j;}
}

命令行参数

  • 命令行参数类型是String[]数组
  • 命令行参数由JVM接收用户输入并传给main方法