zoukankan      html  css  js  c++  java
  • Java笔记01

    程序基础

    基本结构

    public class Hello {
        public static void main(String[] args) { // 方法名是main
            // 方法代码...
        } // 方法定义结束
    }
    
    • class 类名关键字
    • public 访问修饰符, 表示公开; 修饰类, 也修饰方法
    • 返回值void, 表示没有任何返回值
    • static, 修饰符, 表示静态方法
    • 括号内的参数, 表示必须是Sting数组

    变量

    • 变量可以重新赋值

    基本数据类型

    • 整数类型: byte(1), short(2), int(4), long(8)
    • 浮点数类型: float(4), double(8)
    • 字符类型: char(2)
    • 布尔类型: boolean(1)
    • 计算机知识: 最小存储单位字节: 一个字节8个bit(二进制), 换成十进制就是(0 ~ 255)

    整型

    • java只定义了带符号的整型
    • 最高位bit表示正负

    浮点型

    • 浮点型表示小数
    • 对于float型, 需要加上f后缀

    布尔型

    • true 和 false
    • 理论上1bit, JVM通常存为4bit

    字符型

    • char, 使用'号, 仅有一个字符

    常量

    • 使用final进行修饰, 不可修改

    变量作用范围

    • {}作为自身范围
    • 访问本作用域以内的变量

    整数运算

    • 整数永远是精确的, 计算结果页永远是精确的
    • 整数计算结果超过范围会溢出, 溢出不会报错, 一个错误的结果
    • 如果参与运算双方类型不一致, 计算结果为较大类型的整型
    int i = 12345;
    short s = (short) i; // 12345
    
    • i 强制转换为short 类型. (强制转换的结果可能是错的)

    浮点数运算

    • 浮点数的计算存在误差
    • 浮点数在内存中的表示很复杂
    • 整数和浮点数计算, 整数提升为浮点数
    • 解决办法: "整数和小数部分分开计算"

    布尔运算

    • 依旧支持短路运算
    • 支持三元运算

    字符类型和字符串类型

    • 字符类型char是基本数据类型, 占用两个字符. 单引号表示
    • 字符串类型String是引用类型, 双引号表示
    • 无法表示的时候, 使用进行转义.
    • 编译器允许使用+链接任何字符串和其他类型
    • 使用""...""表示多行字符串
    • 字符串不可变, 改变不了本质, 只能改变指针指向的内存
    • 引用类型的变量可以指向一个空null

    数组类型

    • 定义使用类型[], 初始化new int[5]必须确定需要包含的数量
    • 所有元素初始化后的默认值, 整型是0, 浮点型为0.0, 布尔型为false
    • 数组一旦创建后, 大小不可改变
    • 访问数组, 使用索引. 索引超过范围, 将会报错
    public static void main(String[] args) {
        int[] ns = new int[] {1, 2, 3, 4, 5, 6};
        System.out.println(ns[5]);
    }
    
    • 快速创建数组, 并推断数组长度
    int[] ns = new int[] {1, 2, 3, 4, 5, 6};
    ns = new int[] {1, 2, 4};
    
    • 原数组没有改变, 只是改变可指针的引用

    流程控制

    输出

    • 格式化输出printf(), 通过使用占位符%?, 可以格式化后面的参数为指定格式
    • %%表示%本身
    • 两个%占位符, 必须传入两个参数

    输入

    • System.in代表标准输入流
    • 可以使用java提供的scanner来方便输入

    if判断

    • 注意if的判断顺序与边界问题
    • 浮点数使用==并不靠谱
    • 引用类型的==用来判断是否指向同一个对象
    String s1 = "hello";
    String s2 = "HELLO".toLowerCase();
    System.out.println(s1.equals(s2));
    
    • 使用equals()判断值是否相等
    • 避免NullPointerException错误, 可以使用短路运算&&

    switch多重选择

    • 漏写break会导致意想不到的结果
    • 字符串匹配时, 是比较的内容相等
    • 不要忘记default, 不要忘记break
    public static void main(String[] args) {
      String fruit = "mango";
      switch (fruit) {
      case "apple" -> System.out.print("apple");
      case "pear" -> System.out.print("pear");
      case "mango" -> {
        System.out.print("aaa");
        System.out.print("bbbb");
      }
      default -> System.out.print("No fruit");
      }
    }
    
    • 新语法, java12支持->运算符
    public static void main(String[] args) {
      String fruit = "apple";
      int opt = switch (fruit) {
        case "apple" -> 1;
        case "pear" -> 2;
        default -> {
          int code = fruit.hashCode();
          yield code;
        }
      };
      System.out.print(opt);
    }
    
    • 使用yield返回简单值

    while和do while

    • 避免死循环
    • do while会少运算一次

    for循环

    • 不要在执行内部操作游标
      int[] ns = {2, 199, 32, 4123};
      for (int n : ns) {
          System.out.println(n);
      }
    
    • 使用for each可以遍历可迭代的数据类型. 例如List, Map

    break和continue

    • 在循环过程中, 使用break跳出循环
    • break只跳出自己的这层循环
    • continue提前结束本次循环, 继续执行下次循环

    数组操作

    遍历数组

    • 直接打印地址, 打印的是在JVM中的引用地址
    • Arrays.toString(ns)可以打印出数组

    数组排序

    • Arrays.sort(ns)可以进行排序
    • 对数组排序改变的是数组本身
    • 其实原来内存中的值并未改变, 但是数组索引每个值的指向改变了

    多维数组

    • 使用deepToString()进行打印

    命令行参数

    • main函数的执行可以获取命令行参数
  • 相关阅读:
    Qt编译出错:“Cannot find file...... .pro."
    谈论如何有效地保护你的数据
    购书网
    VC非模态对话框创建和销毁
    在GUI程序中使用控制台的两种方法
    fatal error C1010: unexpected end of file while looking for precompiled header directive
    burp抓取手机包
    为firefox添加flash插件
    msfvenom生成linux后门
    kali下操作 Apache2
  • 原文地址:https://www.cnblogs.com/zhangrunhao/p/12257139.html
Copyright © 2011-2022 走看看