2022年Java面向对象基础知识复习.docx
名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -复习 1 保留字 goto 2.标识符 数字、 字母、 下划线、 $组成, 不能以数字开头,不能使用关键字或保留字,不能包含空格,不能包含除 $以外的符号,不能包含中文起名规范:包名:全部字母小写:aaabbbccc 类名 / 接口名:全部单词首字母大写:AaaBbbCcc 变量名 / 函数名:第一个字母全小写,后面单词首字母大写:aaaBbbCcc 常量名:全部字母大写,单词之间用下划线连接:AAA_BBB_CCC 3.基本数据类型、字节数、大小、包装类byte 1 字节27-1 Byte short 2 字节215-1 Short int 4 字节231-1 Integer long 8 字节263-1 Long float 4 字节231-1 Float double 8 字节263-1 Double char 2 字节215-1 Character boolean 1 位Boolean 4.a+、+a b=a+:temp=a ,a=a+1,b=temp b=+a:a=a+1,b=a 5.&和 && 的区分 &:无论左侧结果是什么,两侧都需要进行运算 && :当左侧为 false 时,右侧不参加运算 6.最有效的方式运算 2 乘以 8 2<<3 7.if 和 switch 的区分式if 后面是条件表达式,返回的是boolean 类型, switch 后面是 byte/short/int/char类型的表达8.能被 switch 的数据类型有哪些 boolean 、short 、int 、char(jdk1.7 之后增加了 String)9.for 循环执行次序细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 1 页,共 9 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -for初始化表达式1;循环条件表达式2;循环后操作表达式3 执行语句(循环体) ; 执行次序: 先执行表达式 1 进行初始化; 依据表达式 2 判定是否执行循环体,假如返回 true 执行循环体,假如 false 退出循环;执行完循环体一次后,执行表达式 3,这个过程修转变量;再执行表达式 2 以此循环10.数组和链表的区分查数组链表快慢改慢快增删慢快11.面对对象三大特点 封装:将数据等集合在一个单元内,称之为类,被封装的对象被称之为抽象数据类型 继承: 可传递性,假如 C从 B 类中派生, B 又从 A 类中派生, 那么 C 既继承了 B 类中声明的 成员,也继承了 A 类中的成员 多态:指同一操作作用于不同的对象可以有不同的说明,也会产生不同的结果12.类中主要包含哪几个元素,分别有什么作用 属性:用来定义对象的数据 方法:用来定义对象的行为构造方法:用来创建对象 内部类:作为类的一个成员存在,能够拜访外部类的属性和方法代码块:用来在类加载时执行操作或者在每次实例化前执行通用操作13.成员变量(全局变量)和局部变量的区分 1.定义的位置:成员变量:定义在类中 局部变量:定义在方法体内,语句中2.生命周期:成员变量:也称为实例变量,随着对象的显现而显现,随着对象的消逝而消逝 局部变量:一旦作用域终止立刻释放 3.内存的位置:成员变量:储备在堆内存中局部变量:储备在栈内存中 4.初始值:细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -成员变量:可以不赋初值,有默认的初始值,数据类型的默认值 局部变量:可以不赋初值;但是不能使用,一旦使用就会报错,所以必需赋初值 5.局部变量会掩盖掉全局变量 14.拜访掌握修饰符的作用域 public :不同包中都可以 protected :包中的类和包外的子类 default :包中的类 private :只能本类中使用 15.静态变量和实例变量的区分 1.生命周期:成员变量:又叫实例变量,是随着对象的显现而显现,随着对象的消逝而消逝 静态变量:又叫类变量,是随着类的加载而显现,随着类的消逝而消逝 2.内存中的储备位置:成员变量:储备 在堆内存的对象中 静态变量:储备在方法区的静态区中 3.储备的数据特点:成员变量:储备的数据是对象的特有数据 静态变量:储备的数据是对象的共享数据 4.调用方式:成员变量:只能被对象所调用 静态变量:能被对象调用,也可以被类名调用 16.final abstract String 不能被继承,由于被final 修饰,被final 修饰的类不能被继承final 修饰的方法不能final 和 abstract 不能共存: abstract 修饰的方法需要依靠子类实现,而 被继承17.GC 垃圾回收 垃圾回收机制负责的是回收内存中的对象,不回收任何资源 程序员负责释放内存,System.gc 进行垃圾回收 程序无法精准的掌握垃圾回收的运行,垃圾回收会在任何时间自动执行,程序不能指定在 什么时间回收,只能系统自己打算回收时间垃圾回收之前会执行 finalize 再次激活,一旦回收永久失去引用 垃圾回收的回收机制:分代复制垃圾回收、标记垃圾回收、增量垃圾回收 18.单例模式:细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -1.构造函数私有化 2.供应一个静态的自己的全局变量 3.供应一个 get方法,用来猎取这个全局变量饿汉式:public class TestSingle / 构造函数私有化 private TestSingle / 供应一个静态的全局变量 private static TestSingle instance = new TestSingle; / 供应一个 get 方法猎取全局变量 public static TestSingle getInstance return instance; 懒汉式:public class TestSingleton / 构造函数私有化 private TestSingleton / 供应一个静态的全局变量 private static TestSingleton instance=null; / 供应一个 get 方法猎取全局变量 public static TestSingleton getInstance ifinstance=null instance =new TestSingleton; return instance; 测试类(饿汉式和懒汉式都适用):public class Go public static void mainString args 细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -estSingleton t1=TestSingleton.getInstance; TestSingleton t2=TestSingleton.getInstance; System.out.printlnt1=t2; 19.override 和 overlord 的区分 1.override 是方法的掩盖,overlord 是方法的重载 方法名相同, 形式参数不同 (1.参数个数不同, 2.参数类型不同, 3.参数位置不同) 叫重载,和修饰符、返回值无关子类继承父类,并在子类写一个与父类相同名称的方法叫掩盖 2.方法掩盖 override 关键字,方法名不能转变 3.方法掩盖子类的作用域范畴大于父类 4.方法掩盖子类抛出反常必需遵循两小原就(比父类少,比父类小)5.被掩盖的方法不能被 private 修饰 6.被掩盖的方法返回值必需和掩盖的方法一样 20.String、StringBuffer、StringBuilder 的区分 1.长度是否固定:String 长度不行转变,StringBuffer 和 StringBuilder 长度可转变 2.是否线程安全:StringBuffer 线程安全, StringBuilder 线程担心全3.效率: String 每次都要在内存中开创一个新的空间,效率低;始终只有一个对象,效率较高21.判定输出结果 String s1="AAA" String s2="AAA" String s3=new String"AAA" / 在内存中开创一个新的空间 String s4=new String"AAA" System.out.printlns1=s2; / true System.out.printlns1=s3; / false System.out.printlns3=s4; / false System.out.printlns1.equalss2; / true System.out.printlns2.equalss3; / true System.out.printlns3.equalss3; / true StringBuffer 和 StringBuilder细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -/ “ =” 判定的是内容跟内存地址是否都一样 /equals 判定的是内容是否一样 22.String s="aaa"在内存中产生几个对象 String s="aaa"/ 创建了一个对象 String s1="aaa"String s2="aaa"/ 仍是创建了一个对象 String s="aaa"+"bbb"/ 仍是创建了一个对象,等价于 String s="aaabbb" String s=new String"aaa"/ 创建了 2 个对象,一个是 23.String 与基本数据类型之间的转换 基本数据类型 ->String :String.valueOf String->基本数据类型:包装类 .parseXXX 如: String->int :Integer.parseInt 24.数组和集合的区分 1.长度是否固定:数组长度固定;集合长度可变aaa,一个是实例对象2.能否储存映射关系:数组可以储存映射关系:张三->北京;集合可以 map 3.是否可以储存基本数据类型:数组既能储存基本数据类型,也能储存对象;集合可以储存一个对象 User,要储存基本类型只能储存包装类4.是否有方法:数组没有方法;集合有方法25.ArrayList、Vector 和 LinkedList的区分1.线程安全: Vector 线程安全; ArrayList 线程担心全2.储备结构: Vector 和 ArrayList 是数组结构;LinkedList 是链表结构3.效率: ArrayList 改查快,增删慢;26.MyArrayList public class MyArrayList / 定义一个数组储备数据 private Object data; / 定义大小private int size; public MyArrayList data=new Object10; / 实现 add 方法 public void addObject obj LinkedList 改查慢,增删快细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -ifsize>=data.length / 扩容 data=Arrays.copyOfdata, data.length*2; datasize+=obj; / 完成扩容 public void ensureCapity / 判定是否越界 ifsize>=data.length / 扩容 /1. 创建一个新的数组 Object newData=new Objectdata.length*2; /2. 把原有的数据拷贝到新的数组 for int i = 0; i < data.length; i+ newDatai=datai; / 把 data 指向新的数组 data=newData; 27.final 修饰类、方法、属性 修饰类:类不能被继承 修饰方法:方法不能被重写(掩盖)修饰属性:属性变成一个常量,常量不能被更换或重新赋值28.final 修饰属性如要重新赋值 1.直接等于某个值 2.在构造函数中指定 3.在代码块中指定 29.什么是抽象类,什么是抽象方法细心整理归纳 精选学习资料 被 abstract 修饰的类是抽象类,被abstract 修饰的方法是抽象方法 第 7 页,共 9 页 - - - - - - - - - - - - - - - - - - - - - - - - 名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -抽象类可以有抽象方法,也可以有一般方法 抽象方法不能有方法体:pubic abstract void f1; 一般方法可以调用抽象方法 抽象类不能有自己的对象,即不能被 new 抽象类中定义的方法需依靠子类实现,部方法定义的抽象方法在子类实现时必需实现抽象类中的全abstract 能修饰类和方法,不能修饰属性 30.接口和抽象类的异同 共性:两者都不能有自己的实例化对象 区分:抽象类能供应方法的声明,接口不行以抽象类只能是单继承,接口可多实现抽象类中定义的变量就是变量,接口中定义的变量是常量 31.HashMap 和 TreeMap 的区分,比较倾向于使用哪一个一个平稳树的性能是Ologn ;Java里的 TreeMap 用一个红黑树来保证key/value 的排序;红黑树是平稳二叉树;保证二叉树的平稳性,使得插入,删除和查找都比较快,时间复杂度都是Olog n;不过它没有 HashMap 快,HashMap 的时间复杂度是里面键值是排过序的,这样就供应了一些其他的很有用的功能;O1,但是 TreeMap 的优点在于它使用无序的 HashSet 和 HashMap,仍是使用有序的 TreeSet 和 TreeMap,主要取决于你的实际使用场景, 肯定程度上仍和数据的大小以及运行环境有关;比较实际的一个缘由是,假如插入和更新都比较频繁的话,那么保证元素的有序可以提高快速和频繁查找的性能;假如对于排序操作(例如产生一个报表合作者运行一个批处理程序)的要求不是很频繁的话,那么把数据以无序的方式储备,然后在需要排序的时候用 Collections.sort. 来进行排序,会比用有序的方式来储备可能会更加高效; 这个只是一种可选的方式,没人能给你一个准确的答案;即使是复杂度的理论,例如 On,成立的前提也是在 n 足够大的情形下;只要在 n 足够小的情形下,就算是 On的算法也可能会比 O(log n的算法更加高效;另外,一个算法可能在 AMD 处理器上的速度比在 Intel处理器上快; 假如你的系统有交换区的话,那么你仍要考虑磁盘的性能;唯独可以确定的性能测试途径是用大小合适的数据来测试和衡量程序的性能和内存使用量;这两种指标,是最合适的方法;32.HashMap 和 HashTable的去呗在你所挑选的硬件上来测试1.继承: HashMap:继承于 AbstractMap ;HashTable:继承于 Dictionary 2.线程安全: HashMap 线程担心全;HashTable 线程担心全3.null :HashMap 答应 key 和 value 为 null ,但 key 值只能有一个 不答应 key 或 value 为 null 33.final、finally 和 finalize 的区分null ,否就会掩盖; HashTablefinal:修饰符(关键字)假如一个类被声明为 final ,意味着它不再派生出新的子类,不能作为父类被继承, 因此一个类不能既被声明为 abstract 又被声明为 final ,将变量或方法声明为 final , 第 8 页,共 9 页 - - - - - - - - - 可以保证它们在使用中不被转变,被声明为final 的变量必需在声明时给定初值,而在以后的引用中只能读取,不行修改,被声明为final 的方法也同样只能使用,不能重载finally :在反常处理时供应 finally 块来执行任何清除操作,假如抛出一个反常,那么相匹配的 catch 语句就会执行,然后掌握就会进入 finally 块细心整理归纳 精选学习资料 - - - - - - - - - - - - - - -名师归纳总结 精品学习资料 - - - - - - - - - - - - - - -finalize:方法名, Java 技术答应使用 finalize 方法在垃圾收集器将对象从内存中清除出去之 前做必要的清理工作,这个方法是由垃圾收集器在确定这个对象没有被引用且未删除前对这个对象进行调用,它是在Object 类中定义的, 因此全部的类都继承了它,子类掩盖 finalize 方法来整理系统资源或者执行其他清理工作细心整理归纳 精选学习资料 - - - - - - - - - - - - - - - 第 9 页,共 9 页 - - - - - - - - -