1、Java的8中基本类型

  • Java8中基本类型分别分为三类:
    • 整形:short (1字节) byte(2字节) int (4字节) long(8字节)
    • 字符型:char(2字节)
    • 浮点型:floot(4字节)double(8字节)
    • 布尔型:boolean(1字节)

2、Java的8种对象包装类、装箱与拆箱

  • 8种包装类分别对应的为8中基本数据类型
  • Short 、Byte、Integer、Long、Character、Floot、Double、Boolean
  • 自动装箱:将基本数据类型转化为对象包装类,好处就是能够对基本数据按照对象方式进行处理。
    • 在源码过程中是通过调用包装器的valueOf方法实现的
    • 返回值就是对象包装类
    	Integer i1 = 100;====》Integer i1 = Integer.valueOf(100);
    	Integer i2 = 100;====》Integer i2 = Integer.valueOf(100);
    	System.out.println(i1==i2);
    
    
       public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
    
    • 因为对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象,第一次调用是直接创建先缓存,如果第二次还是原来相同的数,直接从缓存中取出。
  • 自动拆箱:顾名思义就是把对对象包装类中的基本数据类型转化为基本数据类型的过程
    • 从源码中分析:自动拆箱使用的是xxxValue()方法
    • 返回值就是基本数据类型
     public int intValue() {
        return value;
    }
    

3、对象包装类和基本数据类型的区别

  • 以Integer和int为例
    • 基本数据类型int初始值默认为0,Integer默认为null
    • Integer变量实际是Integer对象的引用,采用new Integer 实际上是使用一个指针指向对象,int是直接存储数值
    • Integer只有实例化后才能使用,int可以直接使用
    • 引用类型实际上保存的内容是指对象在堆上的地址

4、重写、重载

  • 重写:
    • 父类和子类之间的关系
      • 重写的标准是:两同两小一大
      • 两同:方法名、参数列表相同
      • 两小:子类返回值类型小于等于父类返回值类型、子类声明抛出的异常要小于等于父类声明抛出的异常
      • 一大:子类的方法的访问权限大于等于父类方法访问的权限
  • 重载
    • 重载发生在一个类中
    • 重载可能是构造函数的重载、方法的重载
    • 重载的要求:一同一不同
      • 一同:方法名相同
      • 一不同:参数列表不同。其中包括参数的类型不同、参数的个数不同,参数的顺序不同、或者都不同
      • 返回值的类型和重载没有关系

5、抽象类、封装、继承、多态

  • 抽象类:
    • 将一类的对象的共性抽取出来,其中只包括类的属性和行为,对于类的行为不关注如何实现的
    • 抽象类中可以有非抽象方法,有抽象方法的一定是抽象类
    • 抽象类是不能被实例化的
  • 封装:
    • 封装就是对一个类中的数据以及对数据进行操作的方法进行封装隐藏,对外显示只是提供一种接口
  • 继承:
    • 继承是父类与子类之间的一种关系,同时也是从已有的类中创建出来一种新的类的方法,继承让软件系统有一种的延续性
  • 多态:
    • 多态其实就是不同子类型的对象,对于同一个消息做出不同的响应的过程。举个例子就是鸟类动物都具有飞的功能,但是鸵鸟子类型引用父类型对象后就具有飞的功能,但是只能在地上“飞”,而喜鹊却可以直接进行天空中的飞翔,这就是不同子类型的对象对于同一个消息做出的不同响应过程

6、String、StringBuffer、StringBuilder

  • String:

    • String类是一种不可变的类,不可变的原因可以从以下几点分析
      • String的属性和行为是由final修饰的,如果String是可变的类,那么子类继承string类之后就可以覆盖String类的方法,这样 就可以操作String的值,这样就不是不可变的
      • String类是被final修饰的,不能被继承,那么也就不能改变String的内容
      • String的长度是不可变的
      • 不可变的String可以提高效率
  • StringBuffer :

    • StringBuffer是长度可变类,线程安全的。线程安全的原因是方式使用的Synchronized修饰的
  • StringBuilder:

    • StringBuilder是长度可变的类,线程不安全的
    • 在Java中使用+号进行连接字符串的时候,其实使用的就是Stringbuilder的方法append()实现的

对于三者使用的总结:

操作少量的数据: 适用String
单线程操作字符串缓冲区下操作大量数据: 适用StringBuilder
多线程操作字符串缓冲区下操作大量数据: 适用StringBuffer