Java零碎知识点

Java零碎知识点

  • 数据缓存( [-128]到[127] Byte Short Integer Long [0]到[127] Character )

    • 当封装类与基本数据类型进行比较( ==与equals)时,会自动拆箱 (XXValue()) 内容相同全为true
    • 当封装类与封装类进行比较时,直接赋值会自动装箱(valueOf())在范围内内容相同为true
    • Boolean与boolean进行比较内容相同全为true
    • Integer与new Integer()永远为false
  • 重写方法的规则(两同两小一大)(发生在继承关系中)

    • 两同:方法名和参数列表必须相同
    • 两小:返回值或声明异常比父类小(或相同)
    • 一大:访问修饰符比父类大(或相同)
    • 注意:重写接口中的方法的访问修饰符只能为public
  • 重载 (发生在同一个类中)
    - 同名不同参
    - 对返回值与访问修饰符没有限制

  • 接口注意事项

    • 变量默认修饰符为public static final
    • 方法 默认修饰符为public abstract
      • JDK 1.7 public abstract 抽象方法
      • JDK 1.8 添加 public static 静态方法 public default 默认方法
      • JDK 1.9 添加 private 私有方法
  • 位运算符

    • 按位与&
    • 按位非~
    • 按位或|
    • 按位异或^
在计算机中数字参与运算使用的是补码--机器码,真值--原码,输出的结果为真值
    补码+1=反码 整数的原码、反码、补码相等 最高位为符号位0为整数1为负数
int a=5;//0000 0000 0000 0101
int b=-3;//1111 1111 1111 1101 //1111 1111 1111 1100 // 1000 0000 0000 0011
按位与(&)运算符在两个操作数对应的二进位都为 1 时,该位的结果值才为 1。有0则为0 
  a&b=1;//0000 0000 0000 0101
按位非(~)将操作数的位反转。0变为 11 变为 0~a=-6;//1111 1111 1111 1010补码  //1111 1111 1111 1001反码  //1000 0000 0000 0110原码
   ~b=2 ;//0000 0000 0000 0010  
按位或(|)运算符在其中一个或两个操作数对应的二进制位为 1 时,该位的结果值为 1。有1则为1
   a|b=-3 //1111 1111 1111 1101
按位异或(^)相同为0,不同为1
  	a^b= -8;//1111 1111 1111 1000 //1111 1111 1111 0111 //1000 0000 0000 1000
   
  • 正则表达式

    符号含义
    ^起始符号
    $结束符号
    [n-m]表示n到m范围内中的一个数字
    \d表示任何一个数字
    X{m}表示m个X
  • 父类的public/protected final方法子类不能覆盖 只有private final方法可以覆盖

  • 内部类

    • 成员内部类
    • 局部内部类
    • 匿名内部类(继承该类或实现接口的子类的对象)
  • 逗号运算符 只存在于for循环中

int i,j;
for(i=1,j=2;;)
  • switch(x) x的数据类型
byte short int  char  enum
  • 类型转换

    • 小类型到大类型自动转换

    • 大类型到小类型需要手动强转

    • final 类型变量进行计算时不会进行类型转换,计算结果看右边类型

    • 在进行运算时,byte 、short、char会自动转换为int

    • +=会将表达式中的变量自动强转

    • 三目运算符会进行自动类型转换和自动拆箱(自动拆箱的缺点)

      	//在进行运算时,byte 、short、char会自动转换为int    
          byte a=2,b=4;
       	byte c=a+b;//编译出错
      	int i=a+b;//编译正确
      	
      	//+=会将表达式中的变量自动强转
      	a+=b//编译正确+
       	a=a+b;//编译错误
      
      	Integer integer=null;
      	System.out.println(true?integer:1.0)//编译不出错,但运行时NPE
          System.out.println((double)integer)//反编译结果,先自动拆箱再自动类型转换
          System.out.println(true?1:1.0)//输出1.0 int类型的1转换为double类型的1.0
              
          //final 类型变量进行计算时不会进行类型转换,计算结果看右边类型(自动强转)
          final byte b1=1,b2=2;
      	byte b=b1+b2;
      	int  i=b1+b3;
      
  • 变量

    • 局部变量(赋值时才创建变量–分配空间)
    • 成员变量
      • 实例变量(无static修饰的变量)
      • 静态变量(类变量)
  • 计算优先级

    • 以字符串为分界符,字符串前面的正常计算,字符串后面的当作字符拼接,有括号先计算括号里的
  • 方法

    • 静态方法

      • 静态方法中不能出现this和super关键字
    • 实例方法

    • 抽象方法

  • Java用监视器机制实现了线程之间的同步执行

  • Java中创建对象的四种方式

    • 使用new关键字创建对象

    • 使用反射创建对象

    • 使用克隆创建对象

    • 使用反序列化创建对象

        //通过构造器获得对象
              Object o1=new Object();//通过new关键字获得对象
              Object o2 = Object.class.getDeclaredConstructor().newInstance();//通过反射获得对象
              //通过内存获得对象
              Object o = new ObjectInputStream(new FileInputStream("需要获得对象的文件路径"))
                      .readObject();//通过反序列化获得对象  //通过构造器获得对象
              Object o1=new Object();//通过new关键字获得对象
              Object o2 = Object.class.getDeclaredConstructor().newInstance();//通过反射获得对象
              //通过内存获得对象
              Object o = new ObjectInputStream(new FileInputStream("需要获得对象的文件路径"))
                      .readObject();//通过反序列化获得对象
      
  • Java中方法参数传递为值传递

 public static void main(String[] args) {
        String str = "hrc";
        string(str);
        System.out.println(str);//输出结果为 hrc
        StringBuilder sb = new StringBuilder(str);
        System.out.println(sb);//输出结果为 hrc
        stringBuilder(sb);
        System.out.println(sb);//输出结果为 hrchut
    }
   
    public static void string(String str) {
        str = "hrc";
    }

    public static void stringBuilder(StringBuilder sb) {
        sb.append("hut");
    }
  • try-catch try-finally try-catch-finally 异常处理只有这三种形式

  • 对象 instanceof 类 用于判断左边对象是否为右边类的实例对象或子类的实例对象

      //用于判断左边的对象是否为右边类或其子类的实例对象
        Object o = new Object();
        if (o instanceof String) {
            String str = (String) o;
            System.out.println("该对象是其子类或其子类的实例对象,并且将该对象强转为String类");
        }
        //Java14、15为preview版,Java16为正式版
        if (o instanceof String str) {
            System.out.println("该对象是其子类或其子类的实例对象,并且将该对象强转为String类");
        }
  • 泛型
        //引入泛型原始的写法
        ArrayList<String> arrayList1 = new ArrayList<String>();
        //Java7写法
        ArrayList<String> arrayList2 = new ArrayList<>();
        //Java10的写法,只能用于局部变量,且必须初始化(数据类型只能为引用类型)和不能复合声明变量即一次只能声明一个变量
        var arrayList3 = new ArrayList<String>();
        //反编译字节码文件中写法
        ArrayList<String> arrayList4=new ArrayList();
  • API

    • round 、floor、ceil
    round(x) 返回值为 x+0.5 floor(x+0.5)  向下取整
    floor  地板 向下取整
    ceil  天花板 向上取整
    
    • 数组复制
      • System.arraycopy;
      • Arrays.copyOf
//当目标数组容量大于等于源数组时使用
public static native void arraycopy(Object src,  int  srcPos,
                                        Object dest, int destPos,
                                        int length);
//底层使用System.arraycopy,但是无需手动创建目标数组
 public static <T,U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType)
  • 程序执行顺序

如果类还没有被加载:
1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。
2、执行子类的静态代码块和静态变量初始化。
3、执行父类的实例变量初始化
4、执行父类的构造函数
5、执行子类的实例变量初始化
6、执行子类的构造函数

如果类已经被加载:
Length, Class<? extends T[]> newType)


- 程序执行顺序

如果类还没有被加载: 
**1、先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。** 
**2、执行子类的静态代码块和静态变量初始化。** 
**3、执行父类的实例变量初始化** 
**4、执行父类的构造函数** 
**5、执行子类的实例变量初始化** 
**6、执行子类的构造函数** 

如果类已经被加载: 
**则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造方法**
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值