基本数据类型
8位(bit)=1字节(Bytes)
2字节=1汉字
bool类型只需要1位即可,但是计算机分配的最小单元是字节,故存储也是1字节。
基本数据类型:可以在栈中直接分配内存的类型。
引用数据类型:数据的引用在栈中,但他的对象在堆中。
常见编码方式
ASCII码
128个,0-31控制字符,32-126打印字符。
ISO-8859-1
ASCII码的扩展,仍是单字节,能表示256个。
GBK(GB2312)
汉字编码。
UTF-8
最常用的汉字编码。
UTF-16
采用两个字节表示一个字符,具体定义了Unicode字符在计算机中存取方法。
简单介绍内存模型
int与integer的区别
int是基本数据类型;integer是对象类型,是int的包装类型。
int的初始值为0,且不能赋值为null;Integer初始值为null。
int直接在栈中存储;integer则是存储在堆中,引用在栈中存储。
int是值传递,栈中的数据不可变;integer是引用传递。
new integer() == new integer(); false
int == new integer(); true–自动拆箱比较数值
integer == new integer();false–非new的指向常量池,new指向堆
integer ==integer ;在-127~128之间true
final,finally,finalize的区别
final关键字可以用于以下四个地方:
1).定义变量,包括静态的和非静态的。
2).定义方法的参数。
3).定义方法。
4).定义类。
一个类不能同时被声明为abstract抽象类的和final的类
finally是java的一种异常处理机制:
finally结构使代码总会执行,而不管无异常发生。
finalize()方法在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。
String、StringBuffer、StringBuilder区别
string是字符串常量,不可改变的对象,每次对String操作都会生成新的String对象,造成内存空间资源的浪费。
StringBuffer是字符串变量,StringBuffer对象能被多次修改,不会产生新对象,因此不会造成内存空间资源的浪费。线程安全。
StringBuilder也是字符串变量,跟StringBuffer一样,但是比StringBuffer有速度优势,多数情况建议使用StringBuilder。线程不安全。
==和equals和hashCode的区别
==
基本数据类型,比较的是值。
引用数据类型,比较的是地址,比较的是栈中对堆对象的引用是否相等。
equals
默认情况下,Object类中等效于==
String类中,对equals进行重写
1.若A==B,返回true,
2.若对比对象是string则继续,否则false,
3.判断A、B长度是否一样,否则false,
4.进行字符逐个比较,否则返回false。
hashCode
hashCode()方法返回的就是一个数值,生成一个hash码,除少数冲突外,基本上不一样。
进程和线程的区别
进程是资源分配的最小单位;线程是程序执行的最小单位。
进程都有独立的代码、数据空间;线程同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器。
操作系统中,同时运行多个进程;同一个进程中有多个线程执行(同一时间只有一个线程执行)。
重载与重写
重写是子类对父类有权限访问的方法进行重新编写。
1.参数列表不能改变
2.返回类型与被重写可以不一样,但必须是父类返回值的派生类
3.访问权限不能比父类中被重写的方法访问权限低。
4.final、static不能被重写
重载是一个类里面,方法名相同、参数不同的方法。返回值可同可不同。
1.参数列表必须不一样(个数、类型)。
2.返回值可以不一样
3.访问修饰符可以不一样
4.只有返回值不一样不可以。
多态
接口的多种不同实现方式称为多态。
简单版本:
父类或者接口定义的引用变量可以指向子类或者具体实现类的对象。
封装
将细节部分隐藏、包装起来,让使用者只能通过写好的访问方法来访问。
1.减少耦合
2.内部的结构可以自由修改
3.对成员变量更加精确的控制
4.隐藏信息,实现细节
继承
提高代码复用性
使类与类之间产生关系,多态基础。
初始化会先初始化父类。
抽象类和接口
抽象类 abstract
1.抽象类不可以实例化,它是一种概念的存在
2.可以被继承,但子类必须实现抽象方法,否则自身也是抽象类
3.抽象类中可以有普通方法
接口 interface
1.接口中属性默认为 public static final
2.接口中方法默认为 public abstract
3.一个类可以实现多个接口,但是只能继承一个类,用接口的方式实现多继承。
4.不可以实例化
序列化与反序列化
序列化把java对象转换为字节序列的过程
在传递中和保存对象时,为了保证对象的完整性和可传递性,将对象转换为有序字节流,以便在网络中传输或者保存本地。
反序列化根据字节流中保存的对象状态及描述,通过反序列化重建对象。
核心作用就是方便保存和传输
泛型
泛型,参数化类型。将类型由原来具体的类型进行参数化,在使用时传入具体的类型。
泛型有三种使用方式:泛型类、泛型接口、泛型方法。
泛型中extends和super的区别
<? extends Fruit>代表的是上界通配符,也就是说这个List中存放的对象都是Fruit以及其子类的对象,这样我们就不用因为输入的List中类型的不同而改变代码了。 List<? super Fruit>代表的是下界通配符也就是说List中存放的都是Fruit和它的父类的对象。