java基础

封装性:权限修饰符。把该隐藏在的隐藏起来,该暴露的暴露出来。这就是封装性的设计思想。 继承性: 多态性:父类的引用指向子类的对象。(方法:编译看左边,运行看右边。属性:编译运行左边) 重写:父子类之间,子类的方法将覆盖父类的方法。(特殊情况private修饰不构成重写,重写的修饰符不小于父类修饰符。返回值类型,父类void-----子类void,父类Object-------子类可以是Object的子类) 重载:本类,方法名必须相同,参数列表不同,访问修饰符可同可不同。在同一个类中允许一个以上同名方法,参数个数或者类型不同 异常:强转时:ClassCastException. 使用关键字instanceof判断. #### String字符串 ​ string:字符串,使用一对""引起来表示。 - String声明为final的,不可被继承 - String实现了Serializable接口:表示字符串是支持序列化的。 ​ 实现了Comparable接口:表示String可以比较大小 - String内部定义了final char[ ] value用于存储字符串数据 - String:代表不可变的字符序列。简称:不可变性。 #### 多线程: 关于同步方法的总结: - ​ 同步方法仍然涉及到同步监视器,只是不需要我们显式的声明。 - ​ 非静态的同步方法,同步监视器是: this ​ 静态的同步方法,同步监视器是:当前类本身 #### 异常 ​ 1.编译时异常: ​ IOException ​ FileNotFoundExceptionl ​ classNotFoundException ​ 2.运行时异常: ​ NullPointerException ​ ArrayIndexOutOfBoundsExceptioni ​ c1asscastException ​ NumberFormatExceptioni ​ InputMismatchExceptioni ​ ArithmeticException 自动装箱:基本数据类型---->包装类 自动拆箱:包装类----->基本数据类型 基本数据类型、包装类转换String -----------valueof() String 转换基本数据类型、包装类----------parsexxx(parseInt) 静态代码块: 类的加载而执行只加载一次 非静态代码块:每创建一次对象加载一次 final修饰:可以修饰类,方法,变量,不能被继承 abstract抽象的:一旦类抽象了,不可实例化 #### 集合 - Collection接口:单列数据,定义了存取一组对象的方法的集合 - List:元素有序、可重复的集合: - Set:元素无序、不可重复的集合 - Map接口:双列数据,保存具有映射关系“key-value对”的集合 ##### 集合框架 / ----colLection接口:单列集合,用来存储一个一个的对象 / ----List接口:存储有序的、可重复的数据。 -->“动态”数组 ​ /----ArrayList. 线程不安全,效率高。底层使用Object[] elementData数组存储 ​ /----LinkedList. 频繁的插入、删除操作,此类比ArrayList高。底层使用双向链表存储 ​ /----Vector 线程安全,效率低底层使用Object[] elementData数组存储 总结:常用方法 增: add(Object obj) 删: remove (int index) / remove(object obj)改: set(int index, object ele) 查: get(int index) 播: add(int index,object ele)长度: size() 遍历: Iterator迭代器方式 增强for循环 普通的循环 ​ /----Set接口:存储无序的、不可重复的数据-->高中讲的"集合” ​ l ----HashSet: 主要实现类,线程不安全,可以存储null值, 底层数组+链表 ​ l ----LinkedHashSet:HashSet子类,遍历内部数据时,可以按照添加的的顺序遍历 ​ 频繁遍历效率高HashSet ​ l ---- TreeSet:可以按照添加对象的指定属性,进行排序。 set:存储无序的、不可重复的数据以Hashset为例说明: 1.无序性:不等于随机性。存储的数据在底层数组中并非按照数组索引的顺序添加,而是根据数据的哈希值 2.不可重复性:保证添加的元素按照equals()判断时,不能返回true.即:相同的元素只能添加一个. 添加元素的过程:以Hashset为例: 我们向HashSet中添加元素a,首先调用元素a所在类的hashCode()方法,计算元素a的哈希值,此哈希值接着通过某种算法计算出在HashSet底层数组中的存放位置(即为:索引位置),判断数组此位置上是否已经有元素: 如果此位置上没有其他元素,则元素a添加成功。--->情况1 如果此位置上有其他元素b(或以链表形式存在的多个元素),则比较元素a与元素b的hash值: 如果hash值不相同,则元素a添加成功。--->情况2 如果hash值相同,进而需要调用元素a所在类的equLas()方法: equals()返回true,元素α添加失败 equals()返回false,则元素α添加成功。--->情况3 对于添加成功的情况2和情况3而言:元素α与已经存在指定索引位置上数据以链表的方式存储。 jdk 7 ︰元素α放到数组中,指向原来的元素。 jdk 8:原来的元素在数组中,指向元素a 总结:七上八下 /----Map接口:双列集合,用来存储一对(key - value)一对的数据―-->高中函数: y = f(x) / ----HashMap:Map主要实现类;线程不安全,效率高;可以存储null的key和value ​ / ----LinkedHashMap:保证在遍历map元素时,可以按照添加的顺序实现遍历。 ​ 原因:在原有的HashMap底层结构基础上,添加了一对指针,指向前 一个和后一个对于频繁的遍历操作,此类执行效率高于HashMap . ​ / ----TreeMap:保证按照添加的key-value对进行排序,实现排序遍历。底层红黑树 ​ / ----Hashtable:线程安全,效率低;不能存储null的key和value ​ / ----Properties:常用来处理配置文件。key和value都是String类型 HashMap的底层:数组+链表(jdk7及之前) 数组+链表+红黑树(jdk 8) #### I/O 一、流的分类: 1.操作数据单位:字节流、字符流 2.数据的流向:输入流、输出流 3.流的角色:节点流、处理流 二、流的体系结构 抽象基类 节点流(或文件流) 缓冲流(处理流的一种) Inputstream FileInputStream BufferedInputstream outputStream FileoutputStream BufferedOutputStream Reader FiLeReader BufferedReader writer FiLewriter Bufferedwriter ##### 一、==和equals区别: ###### ==可以使用在基本数据类型变量和引用数据类型变量中 ###### 1.基本数据类型中,类型不一定要相同 ###### 2.引用数据类型中,比较两个地址值是否相同 ###### equals ​ 1. Object类中equals相当于== 比较两个地址值 ​ 2. String中equals重写过比较内容是否相同 ##### 二、抽象类与接口有哪些异同 都不能实例化 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。 构造函数:抽象类可以有构造函数;接口不能有。 main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。 访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。 ##### 三、常见的异常 四、synchronized 和lock异同 ​ 相同:都能解决线程安全问题 ​ 不同:synchronized机制在执行完同步代码后自动释放同步监视器 ​ lock需要手动启动lock()同时结束同步也需要手动调用unlock() 五、解决线程安全几种方式(同步方法 同步代码块 lock) 六、sleep()和wait()异同 ​ 相同点:执行方法都会进入阻塞状态 ​ 不同点:两方法声明的位置不同。Thread中声明sleep() Object中声明wait() ​ 调用要求sleep在任何地方调用。wait必须在同步方法同步代码块中调用 ​ sleep不会释放同步监视器,wait释放 七、面试题: ArrayList、 LinkedList. Vector三者的异同? 同:三个类都是实现了List接口,存储数据的特点相同:存储有序的、可重复的数据 ​ 不同: 八、HashMap的底层实现原理? ​ HashMap的底层:数组+链表(jdk7及之前) ​ 数组+链表+红黑树(jdk 8) 九、HashMap和HashtabLe的异同? ​ HashMap:Map主要实现类;线程不安全,效率高;可以存储null的key和value ​ Hashtable:线程安全,效率低;不能存储null的key和value 十、Java 序列化,标记不用序列化的字段 关键字:tranisant修饰