蒟蒻初识Java的一点点笔记

琐碎的知识点

  1. 方法上如果带着删除线,代表该方法是过时的方法,不推荐使用,但是也可以使用。
  2. 一定一定要注意编码规范,可以多看看《Java开发手册》

输入输出

  1. 输出语句:
 	// 标准输出,但是换行
    System.out.println();
    // 标准输出,不换行
    System.out.print();
    // 格式化输出,不换行(继承自C语言的一些特性)
    System.out.printf()
  1. 输入语句:
    使用时须在源文件的第一行导入:import java.util.Scanner;
    // 获取用户输入一行信息
    String nextLine()
    // 获取用户输入的一个boolean类型的值
    boolean nextBoolean()
    // 获取用户输入的一个short类型的值
    short nextShort()
    // 获取用户输入的一个int类型的值
    int nextInt()
    // 获取用户输入的一个long类型的值
    long nextLong()
    // 获取用户输入的一个double类型的值
    double nextDouble()

例如:

// 在控制台提示用户输入一个圆的半径,计算并输出圆的面积。
import java.util.Scanner;
public class Demo {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("请输入一个半径:");
        double radius = input.nextDouble();
        double area = radius * radius * 3.14;
        System.out.println("圆的面积为:" + area);
    }
}

类和对象

  1. 数组的实例化对象方法
    数组的实例化对象方法

static修饰符

    1. 静态代码块在类被加载时执行,此后无论是否再实例化对象,都不会执行

      静态代码块与写代码时的先后顺序有关,如:

      定义的静态变量放在静态代码块的后面,静态代码块在调用时不能直接调用

    2. 对于有父类的类,先加载父类,所以会先执行父类的静态代码块。

    3. 调用子类的构造方法时会调用父类的构造方法,所以会先执行父类的构造方法

  1. 代码块和构造方法,在每次实例化对象的时候都会执行,并且与写代码的顺序无关

  2. 用static和final修饰方法一般是表示改方法重要,不可轻易修改,是给别人看的

    用static和final修饰属性一般表示常量

枚举

  1. 枚举当中都是大写字母即都是常量

  2. 最后一个常量的最后最好加上分号";"

  3. 枚举中每一个常量代表的值依次向后从0开始0,1,2……

  4. 枚举的几个方法

    使用方法:类名.常量名.方法名

    ordinal()是获取系统设定好的索引值,依次为0,1,2……

    index是获取自己设定好的索引值

    name()是获取常量表面的名字

    title是获取自己设定好的名字

  5. 枚举只提供get方法,不提供set方法

  6. 枚举中equals、hashcode 方法是 final 的,所以不可以被枚举重写(只可以继承)。但是,可以重写 toString 方法。

  7. Java 不允许使用 = 为枚举常量赋值。

  8. 枚举不能继承类

  9. 一般用法:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VXYJW68R-1605661125189)(Java笔记.assets/image-20201108090101852.png)]

异常和断言

  1. Java提供异常类来表示程序运行中发生的异常

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SXRqFQrk-1605661125193)(Java笔记.assets/image-20201108092144594.png)]

    • 通常Error程序员不处理,上报给运维人员

    • RuntiomeException:运行时异常

    • IOException:非运行时异常

    • ArithmeticException:运算条件异常

    • NiullPointerException:空指针异常

    • IndexOutOfBoundException:下标异常

    • EOFException

    • FileNotFoundException

    • 运行时异常可以不加try catch,非运行时异常必须加

  2. 捕获异常

    try  {
       //接受监视的程序块,在此区域内发生的异常,
       //由catch中指定的程序处理;
    }catch(要处理的异常种类和标识符) {
       //处理异常;
    }
    
    • try代码块里的程序出现异常,改程序后面的代码块部分,不会执行

    • 现阶段catch里一般写e.printStackTrace();

    • catch后面的小括号里,可以放不同异常类型,和1里的异常关系图一样,大的异常类包含小的异常类

  3. 多重异常

    • 可以写多个catch异常类中,按照catch的先后,子类在前,父类在后

    • 也可以这样写

       //一个catch可以捕获多个异常。
      //多个异常类型之间用“|”分隔开。
      //只有1个异常类型的标识符。
      //多个异常类型之间不存在父子继承关系。
      try {
          i = a / b;
          System.out.println("try block");
      } catch (IndexOutOfBoundsException | ArithmeticException e1) {
          System.out.println("发生异常,请处理该异常!");
      }
      
  4. finally语句块

    • finally语句定义一个总是被执行的代码块,而不考虑是否出现异常

      无论try、catch是否执行,finally必定执行

    • 不执行finally语句块的特殊情况

      在执行finally之前首先执行了System.exit(0);

    • finally语句块典型应用

      回收资源

    • 多个return会返回最后一个

  5. 抛出异常

    void doA(int a) throws Exception1,Exception3{
        try{
            ......
        }catch(Exception1 e){
            throw e
        }catch(Exception2 e){
            System.out.println("出错了!");
        }
        if(a!=b){
            throw new Exception3("自定义异常");
        }
    }
    
    • throws用来抛出异常,抛给调用改方法的地方。
    • throw用来产生异常。
  6. 常见异常

    • NullPointException:空引用异常
    • NumberFormatException:数字格式异常
    • ClassNotFoundException:未找到了类异常
    • ArrayIndexOutOfBoundsException:数组下标越界异常
    • ClassCastException:类型转换异常
  7. 自定义异常

    要自己会写,一般是自己定义一个异常继承父类,这个自定义的异常类里可以重写getMessageprintStackTracetoString方法,在父类里若有使用该异常的情况,则用throw实例化自定义异常,可以用try catch处理也可以抛出去

  8. 断言(了解)

    • 使用断言的场合

      • 可以在预计正常情况下程序不会到达的地方放置断言 :assert false
      • 断言可以用于检查传递给私有方法的参数。(对于公有方法,因为是提供给外部的接口,所以必须在方法中有相应的参数检验才能保证代码的健壮性)。
      • 使用断言测试方法执行的前置条件和后置条件。
      • 使用断言检查类的不变状态,确保任何情况下,某个变量的状态必须满足。(如:age属性应大于0小于某个合适值)。
    • 不使用断言的场合

      • 断言语句不是永远会执行,可以屏蔽也可以启用。

      • 不要再public的方法里面检查参数是不是为null之类的操作。

      • 例如

      • public int get(String s){
             assert s != null;
        }
        
  • 假如需要检查也最好通过if s = null 抛出NullPointerException来检查。

  • 不要使用断言作为公共方法的参数检查,公共方法的参数永远都要执行。

    • 断言语句不可以有任何边界效应,不要使用断言语句去修改变量和改变方法的返回值。

    • 不要用assert来检查方法操作的返回值来判定方法操作的结果

      例如 assert list.removeAll();这样看起来似乎没有问题 但是想想假如assert 被disable呢,那样他就不会被执行了 所以removeAll()操作就没有被执行 可以这样代替boolean boo = list.removeAl();assert boo;

字符串

  1. // 构造方法和常量的直接赋值 这两种方法不同
    // 为了节省资源java里会有一个字符串池,所以s1和s2指向的都是一块内存
    String s1 = "abc";
    String s2 = "abc";
    System.out.println(s1 == s2); // true
    System.out.println(s1.equals(s2)) // true
        
        
    // 构造方法产生的字符串的指向一块内存是只有一个指针的
    String s1 = "abc";
    String s2 = new String("abc");
    System.out.println(s1 == s2); // false
    System.out.println(s1.equals(s2)) // true
    
  2. 常用的字符串处理方法

    注:字符串的方法使用后的返回值是字符串按照该方法操作之后的结果

    1. 字符串连接

      • concat(String str)
      • “+”运算符
    2. 字符串查找

      • indexOf (String str)

        例:.indexOf(str);

        sstr的第一个位置

      • lastIndexOf(String str)

        例:s.lastIndexOf(str);

        sstr的最后一个位置

      • charAt(int indexOf)

        例:s.charAt(i);

        s中下标为i的字符串

      • startsWith(String prefix)

        例:s.startWith(str)

        判断s是否以str开头

    3. 字符串分割

      • split(String regex):字符串分割
      • compareTo(String str):字符串比较
      • equalslgnoreCase(String str):忽略大小写
    4. 字符串替换

      • replace(char oldChar, char newChar)

        oldCharnewChar替换

    5. 字符串求子串

      • substring(int beginIndex, int endIndex)

        求下标beginIndexendIndex - 1的内容

    6. 字符串大小写转换

      • toUpperCase(): 小写转大写
      • ToLowerCase() :大写转小写
  3. StringBuffer类

    1. 字符串变量
    2. 线程安全
    3. synchronized的实现原理是在对象头里加锁
  4. StringBuilder类

    1. 字符串变量
    2. 线程不安全
  5. StringTokenizer类

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yk07Wc1w-1605661125194)(Java笔记.assets/image-20201118084823085.png)]

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值