【Java】每日一点Java小知识 --- day7

每日一点Java基础小知识 — day7

欢迎来到叮当猫学编程的Java基础小知识系列~在这里,你将会看到叮当猫每日关于Java的基础知识总结,欢迎大家的点赞关注喔

  1. 1静态代码块 2构造代码块 3构造方法的执行顺序是:1>2>3

    • 静态代码块:是在类的加载过程的第三步初始化的时候进行的,主要目的是给类变量赋予初始值
    • 构造代码块:是独立的,必须依附载体才能运行,Java会把构造代码块放到每种构造方法的前面,用于实例化一些共有的实例变量,减少代码量
    • 构造方法:用于实例化变量

    1是类级别的,2、3是实例级别的,自然1要优先23

    对子类的主动使用会导致对其父类的主动使用,所以尽管实例化的是子类,但也会导致父类的初始化和实例化,且优于子类执行

  2. 关于throw和throws:

    • throws出现在方法头,throw出现在方法体
    • throws表示出现异常的一种可能性,并不一定会发生异常;throw则是抛出了异常,执行throw则一定抛出了某种异常
    • 两者都是消极的异常处理方式,只是抛出或者可能抛出异常,是不会由函数处理,真正的处理异常由它的上层调用处理
  3. 线程执行效率和线程优先级无关,但是高优先级线程会抢占低优先级线程资源,使得自己优先执行完毕

  4. inputstream的:

    • close() 方法用来关闭流
    • skip() 用来跳过一些字节
    • mark() 用来标记流
    • reset() 复位流
  5. Thread.sleep()Object.wait(),都可以抛出 InterruptedException。这个异常是不能忽略的,因为它是一个检查异常(checked exception)

    • checked exception:指的是编译时异常,该类异常需要本函数必须处理的,用try和catch处理,或者用throws抛出异常,然后交给调用者去处理异常
    • runtime exception:指的是运行时异常,该类异常不必须本函数必须处理,当然也可以处理

    Thread.sleep()抛出的InterruptException属于checked exception;IllegalArgumentException属于Runtime exception

  6. 关于 String.split() 方法:

    //String split 这个方法默认返回一个数组,如果没有找到分隔符,会把整个字符串当成一个长度为1的字符串数组
    private static void testStringSplit(){
            String str = "12,3";
            String str2 = "123";
            System.out.print(str.split(",").length);  // 2
            System.out.print(str2.split(",").length);  // 1
        }
    }
    
  7. 牛客原题:

    Boolean flag = false;
    if (flag = true)
    {
        System.out.println("true");
    }
    else
    {
        System.out.println("false");
    }
    // 最终输出结果为:true
    

    Boolean修饰的变量为包装类型,初始化值为false,进行赋值时会先调用 Boolean.valueOf(boolean b) 方法自动装箱,然后在if条件表达式中再自动拆箱为基本数据类型,因此赋值后flag值为true,输出文本true。 如果使用==比较,则输出文本false。if的语句比较,除boolean外的其他类型都不能使用赋值语句,否则会提示无法转成布尔值

  8. 关于后台线程与前台线程:

    • 后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程
    • 前台线程:是指接受后台线程服务的线程,其实前台后台线程是联系在一起,就像傀儡和幕后操纵者一样的关系。傀儡是前台线程、幕后操纵者是后台线程。由前台线程创建的线程默认也是前台线程。可以通过isDaemon()和setDaemon()方法来判断和设置一个线程是否为后台线程
  9. 通过阅读源码可以知道,string与stringbuffer都是通过字符数组实现的。其中string的字符数组是final修饰的,所以字符数组不可以修改。stringbuffer的字符数组没有final修饰,所以字符数组可以修改。string与stringbuffer都是final修饰,只是限制他们所存储的引用地址不可修改。至于地址所指内容能不能修改,则需要看字符数组可不可以修改

  10. Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节

  11. 不同的编码之间是可以转换的,通常流程如下:将字符串S以其自身编码方式分解为字节数组,再将字节数组以你想要输出的编码方式重新编码为字符串。例:String newUTF8Str = new String(oldGBKStr.getBytes("GBK"), "UTF8");

  12. Java虚拟机中通常使用UTF-16的方式保存一个字符char类型

  13. ResourceBundle能够依据Local的不同,选择性的读取与Local对应后缀的properties文件,以达到国际化的目的

  14. super() 必须在第一行的原因是:子类是有可能访问父类对象的,比如在构造函数中使用父类对象的成员函数和变量,在成员初始化使用了父类,在代码块中使用了父类等等,所以为保证在子类可以访问父类对象之前,一定要完成对父类对象的初始化

  15. this() 必须在第一行的原因是:我们假设这样一种情况,类B是类A的子类, 如果 this() 可以在构造函数的任意行使用,那么当程序运行到构造函数 B() 的第一行,发现没有调用 this()super(),那么就会自动在第一行补齐 super() 来完成对父类对象的初始化,然后返回子类的构造函数继续执行, 当运行到构造函数 B() 的 this(); 时, 调用B类对象的构造函数,还会对父类对象再次初始化,这就造成了资源的浪费,以及某些意想不到的错误

    super()this() 必须在构造函数第一行,所以这一点也表明他俩不能在一个构造函数中

  16. 无论是 this() 还是 super() 指的都是对象,而static环境中是无法使用非静态变量的,因此这两个关键字都不可以在static环境中使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值