收藏 分销(赏)

2023年JAVA面试知识点总结.doc

上传人:二*** 文档编号:4515513 上传时间:2024-09-26 格式:DOC 页数:29 大小:197.54KB
下载 相关 举报
2023年JAVA面试知识点总结.doc_第1页
第1页 / 共29页
本文档共29页,全文阅读请下载到手机保存,查看更方便
资源描述
L 课程知识点调查表 (填表说明:在各知识点后的掌握限度栏内画“√”即可,掌握限度分为A、B、C三类,其中A为:可以依据相关知识点完毕笔试中的填空、判断、代码补全及概念简答等;B为:可以根据程序需求运用相关知识点编写完整的程序代码;C为:可以用语言准确、完整的表述相关知识点及该知识点的典型应用实例。每个知识点的A、B、C三项均可选。) 编号 知识点名称 01 classpath的设立及作用 类文献搜索途径。 可以设立为目录,也可以设立为.(即当前目录) 作用:告诉java虚拟机到哪去寻找用户定义的类和第三方提供的类。当设立了classpath变量之后,JVM会沿着classpath变量中指定的目录去查找要执行的类文献。classpath变量的值可以有多个,值与值之间必须用“;”隔开 如何理解GC: 垃圾回收机制(garbage collection)回收失去引用的内存,程序员不能强制的执行垃圾清理,但是可以建议其回收机制,一般情况下都会按照建议进行。由于程序语句不负责建立和释放内存,jvm自动完毕。涉及到一个方法Finallize();来进行垃圾整理,在清理垃圾是整理内存,不需要我们手动完毕。GC之前执行内存整理的工作的。(一般假如cpu已经占用很多,那么不会去启动释放程序;假如跟建议的垃圾很一致,但是占用内存却很少,垃圾回收机制) 02 path的设立及作用 内部文献搜索途径 设立为javac.exe应用程序所在目录,即..\java\jdk\bin目录 作用:当在命令行窗口中之机运营javac.exe应用程序时,系统一方面会在当前目录(即c:\Documents and Setting\admin)下查找这个程序,然后会沿着path变量中设立的途径继续查找。假如path没有设立,会出现“’javac’不是内部或外部命令,也不是可运营的程序或批解决文献”错误 03 JAVA数据类型( 涉及基本类型和引用类型) 8种基本数据类型:byte,short,int,long,float,double,char,boolean(分别相应8种基本数据类型包装类,finally,不可被继承。此外String和StringBuffer类也是finally的。) 3种引用数据类型:类,接口,数组 04 JAVA基本运算符号 1、算术运算符:+,-,*,/,%,++,-- 2、关系运算符:<,>,>=,<=,==,!= 3、逻辑运算符:&,|,&&,|| 4、位运算符:>>,<<,>>>,~,^,&,|,! 5、赋值运算符:=,+=,-=,*=,/=,%= 6、字符串连接:= 7、条件运算符:? a>b?x:y (也可按照单目、双目、三目分类) 05 JAVA程序基本控制语句(if……else、switch……case、while、for) Java程序设计语言的程序流程控制与C/C++基本相同,总共有三种执行方式:顺序结构、选择结构和循环结构。 选择语句即条件语句有两种:if…else,switch…case 循环语句:while,do…while,for(注意while和do…while区别,for的三个条件) swtich里支持的数据类型有那四种? byte short char int 以及JDK5.0中的枚举类型 06 数组的概念及使用 数组类型属于复合数据类型,它是由类型相同的元素组成的有序数据集合。因此数组的最重要的特点:元素类型相同;元素有序;所有元素公用一个名称。根据组织数据的结构不同,数组可以分为一维数组、二维数组、……。 一维数组声明:arraytype arrayName[];或arraytype[] arrayName; 初始化分为:1、静态初始化。如:String str[ ] = {“aaa”,”bbb”,”ccc”}; String[ ] str1 = {“111”,”222”,”333”}; 2、动态初始化。如:char[ ] charName = new char[5]; 注意:动态初始化必须给出长度,否则报错:缺少数组维数。 二维数组声明:arraytype arrayName[][];或arraytype[][] arrayName; 初始化:1、静态初始化。2、动态初始化:可以只指定第一位的长度而不指定第二维的。 此外,数组具有length属性。 当数组是引用数据类型是,必须为每个元素实例化,否则会出现空指针异常。 07 方法的声明及使用 声明:修饰符 返回值类型 方法名 (参数列表){方法体}; 在非静态方法中可以直接调用非静态方法 在非静态方法中可以直接调用静态方法 在静态方法中可以直接调用静态方法 在静态方法中调用非静态方法,则需要通过对象调用。 08 方法的重载 方法的重载是多态的实现手段之一,解决了命名空间问题(在类中实现相同功能的方法) 满足条件:1、方法名相同 2、方法的参数类型不同或参数个数不同或参数类型顺序不同 3、返回值类型可以相同也可以不同 09 类的定义 定义:修饰符 class 类名{ 成员变量; 方法 } 10 对象的产生与使用 Java语言中使用关键字new调用构造方法来创建新对象。 类名 对象名 = new 类名(); 通过对象调用方法或修改属性值。 11 匿名对象 不定义对象的引用名称,而直接调用方法。只能一次性使用。 好处:节省空间(GC) 假如对一个对象需要进行一次调用,可以使用匿名对象。 常用匿名对象作为一个实参传给方法调用,用完之后抛弃。 12 实现类的封装性 面向对象的特性之一(封装、继承、多态、抽象是面向对象的四大特性) 封装是一种信息隐蔽技术: 1、采用接口隐藏类的实现细节 2、在类中对属性封装。由于Java中对属性的操作很弱(例如年龄的问题,可以在set方法中控制),实现程序健壮性。 成员变量使用private关键字修饰,提供setter和getter方法进行设立和返回属性值。 13 构造方法的定义与使用 1、 构造方法定义:方法名与类名相同;无返回值类型;方法中不能使用return返回一个值。 2、 构造方法在实例化对象时自动调用,重要用来为类中属性赋值。 3、 假如一个类的构造方法用private修饰,那么它不能有子类 4、 当使用new关键字创建对象时,会调用构造方法。 14 对象的比较(“==”、“equals()”) “==”是运算符。比较的是值(基本数据类型)和引用的地址(引用数据类型) Equals()是 Object中的方法、没有复写情况下和== 同样(用来比较两个对象的hashCode码(散列码)即地址)、String类复写了object类的equals方法,比较的是两个对象的内容 String类覆写equals,一方面比较内存地址(引用),假如相同,返回真;假如不同,继续比较,比较字符串的每个字符,相等返回真,不相等返回假 15 在类内部调用本类方法 静态方法中可以直接调用静态方法,但不能直接调用非静态方法,需要通过对象调用。 非静态方法中可以直接调用,或使用this关键字调用。 16 this关键字的使用 用于区别成员变量和局部变量; 1、 调用本类中的方法:a、一般方法 this.方法名(实参列表) b、构造方法 this(实参列表),位于构造方法首行 2、 调用本类重的属性(this.属性名) 3、 可以用来表达当前对象 4、 不能与super关键字同时出现在构造方法中 5、 不能用在static修饰的方法或代码块中 17 构造方法的重载 规则与一般方法重载一致。(参见08题) 当采用new关键字创建对象时,会自动调用构造方法,重要用来为类中的属性初始化。 每个类中都有一个默认的无参构造器,当在类中添加一个有参数的构造方法,则默认的构造方法遗失。 18 对象的引用传递 在Java中,参数传递分为基本类型参数传递与对象类型(即引用类型)参数传递。 基本类型参数传递意味着当将一个实参值传递给一个方法时,假如方法修改了该参数,改变的形参,而原始的实参的值保持不变。 引用类型变量传递将一个参数传递给一个方法后,方法接受的是一个引用变量的值,这个值为某个对象的内存地址值。引用变量的参数传递仍然是值传递。 19 static的使用(方法、属性) 可声明成静态变量(全局变量,相对于这个类中的所有实例化对象,只要一个对象改变了它的值,其他对象的所值都改变) 静态方法(不能直接调用非静态方法,要用对象.方法来调用;在非静态方法中能直接调用静态方法,用类名.方法调用) 静态代码块(对静态成员进行初始化),同一个类中优先于主函数和构造方法执行。 (三者的关系是:静态成员声明>静态代码块>构造方法 ) 静态方法的好处:便于调用,对于Java虚拟机性能更好 哪些类中全是静态方法:Math,Collections, Arrays Collection和Collections区别: Collection是一个接口,不通过键值对来存放对象,是一一存入的,其下有很对子接口来继承,常用的有set,list. set不能存放反复对象,list可以;set决定存放位置,list可以手动。存放的方法是用ADD();取值用iterator取 (同一对象的hashcode相同。不同对象的hashcode也会相同,反例就是: String s=”abc” String s1=new String(“abc”); s与s1的hashcode同样) collections是一个类,内部全是静态方法。用来解决集合对象,可以将解决好的对象存放到另一个类中 20 对象数组的使用(静态初始化、动态初始化) 1、 声明及静态初始化: Person[] ps = Person{ p1,p2,p3 }; //p1,p2,p3分别为Person的对象 2、声明及动态初始化 Person[] p;//对象数组声明 p=new 类名[3];//动态初始化 ps[0]=new Person();//分别对每个元素初始化 ps[0].name=”zhangsan”; ps[0].age=13; …… 21 类的继承 通过继承可以简化类的定义,扩展类的功能。 extends java只支持单继承。 继承是“is a”的关系。 子类继承父类中非private属性和方法。 子类对象实例化时默认调用父类无参构造方法(子类构造方法首行)。 22 子类对象的实例化过程 当采用new关键字实例化子类对象时,一方面会默认调用父类无参构造方法,接着调用子类构造方法。 23 方法的覆写 作用:扩展父类方法的功能。 1、 只有发生在子类和父类之间 2、 子类方法和父类的方法名、参数、返回值类型都必须一致。 3、 规定子类方法的访问权限不能小于父类的访问权限。 4、 子类实例化父类对象,子类调用父类的方法时,会默认调用子类中覆写父类的那个方法 5、 子类继承父类的方法,访问权限只能扩大不能缩小,可用public,protected,或default,其中protected和default的区别就是后者必须在同一个包里。private的使用的好处,代码隐藏,安全;对赋值的限制。假如只是在本类中使用,不想外界得到,只要写SET方法就可以,不写GET方法(对赋值限制的体现)。 public,protected,default,private的区别 (1)public:是公用的,不同包也可访问 (2)protected;doGet()和doPost()就是protected的,是在不同包内的,但继承了不是同一个包的方法,子类是能访问的 (3)default(默认的);只是在同一个包内才可以被访问。 (4 private;只有在本内中才可访问 24 super的使用 super调用父类的属性:super.属性名; super调用父类的方法:super.方法名(实参列表); 调用父类中特定构造方法:super(实参列表); 调用父类中构造方法时,super()必须放在子类构造方法的首行。this和super不能同时调用构造方法。 用super调用父类中的方法时,会调用子类中被覆写了的方法。假如子类中没有覆写父类中的方法,仍能用super调用父类中的方法 Ps:一个类的构造方法假如用private修饰,那么它不能有子类。 25 this与super的区别 this用于调用本类的属性和方法,或代表当前对象。 super用于调用父类的属性和方法。 两者不能同时调用构造方法。 26 final关键字 修饰符。可以修饰变量、方法、类。 final修饰的变量为常量,只能被赋值一次 final修饰的方法不能被复写 final修饰的类不能被继承(构造方法不能被复写)String,Maths都是用final修饰的类。 27 抽象类的使用 抽象类用abstract关键字修饰。抽象类仅提够一个类的部分实现。抽象类可以有实例变量,可以同时有抽象方法和具体方法,它提供一个继承的出发点,不能呢个被实例化。因此,抽象类只能用来继承。 不能被直接实例化 抽象类的子类,要么是抽象类,要么实现抽象父类的所有抽象方法(复写) 抽象类可以有构造方法。 28 接口的使用 接口是常量和抽象方法的集合。 接口中不能有普通方法和变量。常量必须被赋值。 接口可以实现多继承(即接口可以继承一个到多个接口,但不能继承类) 一个类可以实现多个接口 接口不能有构造方法 extends和implements同时出现,extends写在implements前面 抽象类可以实现接口,并且不必实现接口中的所有抽象方法。 Ps:抽象类和接口的区别 抽象类和接口是Java面向对象体系当中非常重要的两个元素,在语法和使用方面都有很多的区别,下面我就从这两个方面来回答这个问题: 第一, 接口和抽象类在语法上的区别重要体现在以下的几个方面: a) 一个类可以实现多个接口,而除了Object之外,一个类只能继承一个父类; b) 接口当中所有的方法都是抽象方法,并且默认为public权限,而抽象类当中可以有抽象方法,也可以没有抽象方法 c) 接口当中的变量所有为全局常量,而抽象类当中可以定义任何类型的变量; d) 抽象类当中有构造函数,而接口没有; 第二, 在使用方面,接口使用的会更多一些,由于接口可以更好的隐藏实现的细节,减少系统的耦合度,从而提高可扩展性,下面就谈一下我在开发中所理解的抽象类和接口的区别: a) 在我经常使用的设计模式当中,如工厂模式,依赖诸如模式,DAO模式等,重要使用的是接口,而抽象类只在模板模式当中有一些比较局限的应用; b) 在我经常使用的Spring和Hibernate当中,接口的使用也占了很大的比例,特别是在Spring当中,模板模式也被改导致使用接口实现; 所以说在平常的开发当中,接口的使用更加的频繁,由于它可以更好的解除耦合,现在的面向对象也提倡少用继承,使用面向接口的编程方法会更好。 29 对象的多态性,向上转型及向下转型的概念 对象的多态性表现为转型(即向上转型和向下转型)及方法的重载和复写。 1、转型:规定两个转型的对象有继承或实现关系。。 向上转型:子类对象转换成父类对象,自动转换。 父类对象用子类实例化。 转型后的对象不能调用子类对象特有的方法。但调用的方法为子类自身的方法。 向下转型:父类对象转换成子类对象,需要强制转换。 只有发生过向上转型,才干发生向下转型。 使用什么方法时,需要使用向下转型:getAttribute();arraylist 和 hashmap等任何connection对象里的get()方法;过滤器里的方法 2、方法的重载是多态的实现手段之一,解决了命名空间问题(在类中实现相同功能的方法) 满足条件:A、方法名相同 B、方法的参数类型不同或参数个数不同或参数类型顺序不同 C、返回值类型可以相同也可以不同 3、方法的覆写,作用:扩展父类方法的功能 A、只有发生在子类和父类之间 B、子类方法和父类的名称、参数、返回值类型都必须一致。 C、规定子类方法的访问权限不能小于父类的访问权限。 转型时,会容易发生classCastException错误。为什么要设计向上转型:ArrayList是一个类,可以方其他的很多类型的对象,如称arr,但在开发时只放一个单一的类型,相称于重新分派空间。否则取的时候很麻烦。存放时的用add()方法,放的是Object类型的对象,即只要属于引用对象就能放入。如放入一个字符串,在放入arr.add()那一刻,发生了向上转型,好处是实现更多类型的兼容,对象的具体特性丢失,即精度丢失。要从多种类型中取出具体的对象类型,即找回精度,就要发生向下转型。 30 对象多态性在抽象类及接口上的应用 面向接口编程的优点:1、调用者不用知道其使用对象的具体所属类 2、一个对象可以很容易被另一个对象(同样实现了接口)所替换 3、对象间的连接不必硬绑定到一个类的对象上,因此增长了灵活性 4、松耦合性 5、提高可扩展性 缺陷:设计复杂性有所增长 工厂模式是面向接口编程的一个典型应用。 工厂模式是OCP(开放封闭法则)的一种解决方案 工厂模式原理: 1、采用面向接口编程的设计思想 2、减少系统的耦合度 3、提高程序的可扩展性 组成部分: 1、产品(抽象产品),用接口或抽象类实现 2、具体产品,是抽象类(产品)的子类或实现了接口(产品)的类 3、生产者(工厂),负责生成产品对象 应用产品:需求改变时只需要改变工厂,得到不同的产品实例。 31 异常的概念及使用 异常是程序中断错误中断了正常指令流的一种事件。通过异常解决机制,可以用一种结构化的可控方式来解决运营时的错误。在Java中所有的异常都用类来表达,并且所有的异常类都是继承自java.lang包中的Throwable类。 Throwable类有两个直接子类:Error(用来表达编译和运营错误,如程序进入死循环,内存溢出等,Error解决一般由系统承担,java自身不提供相应的Error解决机制)和Exception(用来表达由程序活动所导致的错误,如运算时除数为零等。当程序运营出现Exception时,在程序中加入异常解决代码,仍可使程序继续运营直至程序结束。由于Exception是可以检测和解决的,因此产生了相应的异常解决机制)。 java编译器规定方法必须声明抛出也许发生的非运营时异常,但是并不规定必须声明抛出未被捕获的运营时异常。 异常(即exception和error,两者是平级的,且都是继承自throwable) (代码有错不能容易捕获异常,否则容易存在一直存着NULL值的问题,例如:表单中有一控件名为name1(用户名,应当是name,写错成name1),但servlet取的name值,则name的值为null,会报空指针异常的错误,若此时用异常捕获,虽然不报错,但数据库里却插入的数据,且用户名的值都是null) 常见运营时异常:算数运算异常,空指针,数组下标越界,数字格式化异常,类转换异常 常见异常:IO异常(必须捕获和抛出),SQLException , ServletException, ClassNotFoundExceptiom 异常的使用: 1、捕获异常:try…catch() 2、抛出异常:在捕获一个异常对象之前,try代码块中必须生成一个异常对象并把它抛出。异常既可以由java虚拟机自动抛出,也可以通过throw语句手动抛出异常。(throw语句必须为异常创建一个对象,不能仅抛出一个类型。) 3、异常声明:在某些情况下,假如一个方法产生自己不解决的异常,它就必须在throws字句中声明该异常,它属于方法声明的一部分,紧跟在形参列表之后。 4、自定义异常:继承自Exception类。不推荐使用。 32 Java类的编写规范 1、 名字必须为一个标记符 2、 类名或接口名首字母大写,其余每个单词的首字母大写 3、 方法名的首字母小写,其余单词的首字母大写,方法名尽量用动词。如:getName 4、 变量名与方法名一致,变量名尽量用名词, 5、 临时变量简朴即可 6、 尽也许采用故意义的单词 7、 包名小写 33 try…catch语句的使用 try代码块中是一段也许产生异常的代码,又称“监控区域”;catch语句的参数涉及一个异常类型和一个异常对象。该异常类型指明了catch语句所解决的异常类型,异常对象则在try中产生。{}中为对异常的解决。 与一个try相关的catch语句可以有一个或多个,异常的类型决定了要执行那个catch语句。 执行顺序:1、一方面执行try代码块中的所有语句 2、 假如try{}中无异常产生,不执行catch(){},直接执行catch之后的语句 3、 假如try{}中有异常产生,则发生异常之后的语句不会被执行,直接跳到catch(){}中执行。之后顺序执行。 4、 假如catch(){}中的异常类型与产生的不同,则执行顺序与未捕获异常同样。 34 throws与throw 的使用方法 throws用在方法的声明处,表达此方法不解决该类异常,而是交给方法的调用处解决。 throw用在方法的内部,用来手动的抛出异常对象。要么与try…catch一起使用,要么与throws一起使用。 35 finally关键字 对于一些代码,也许会希望无论try中的异常是否被抛出,它们都能得到执行。可以在异常解决程序后加上finally子句。那么退出try…catch后,无论发生异常或者不发生异常,都会执行该段代码。 finally必须用在异常中,不能孤立的使用,至少必须有TRY语句(但只有try,没有catch和finally会报错,即try,catch和finally都不能单独使用;一个try可以有多个catch;try没有catch也行,但必须要有finally;不管之前是否抛出异常,都会执行finally;现在try中加一个return语句 ,但finally仍然会执行,且先执行finally再执行return;finally的作用是关闭资源),finalize()是在GC清理垃圾前做的整理工作,是一个方法 final是修饰符 39 List、ArrayList的使用 List接口继承自Collection接口,以定义一个允许反复项的有序集合。此接口不仅可以对列表的一部分进行解决,还添加了面向位置的操作。 List有两个重要的实现类,分别为:ArrayList和LinkedList。使用哪种取决于特定的需求,假如要支持随机访问,而不必在除尾部的任何位置插入或删除元素,那么可以选用ArrayList;如贵哦要频繁的从列表的中间位置添加和删除元素,并且只规定顺序的访问列表元素,那么LinkedList是更好的选择。 LinkedList类添加了一些解决列表两端元素的方法,可以轻松的把LinkedList当作一个堆栈、队列或其他面向端点的数据结构,来实现堆栈或队列的操作。 ArrayList类封装了一个动态再分派的Object[]数组。每个ArrayList对象有一个数值,这个数值用来表达存储列表中元素的数组的容量。当元素添加到ArrayList时,这个数值会在常量时间内自动增长。 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增长和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 Arraylist的使用 将A,B,C存入arraylist,并取出Arraylist str = new Arraylist(); str.add("A"); str.add("B"); str.add("C"); 遍历取出:for(int i = 0;i<str.size();i++){ str.get(i);} 或者str.get(0);str.get(1);str.get(2); Arraylist作用是便于传对象,且该对象可以存放别的类型的对象,什么时候涉及到,什么时候传递多个对象的时候使用,此时才干发挥他的价值 40 Map、HashMap的使用 Map接口不是Collection接口的继承。Map接口用于维护键-值对。该接口描述了从不反复的键到值的映射。(注意:键和值都可认为null,但是不能把Map作为一个键或值添加给自身,由于映射中键的集合必须是唯一的,用Set来支持)。 集合框架中提狗狗两种常规的Map实现:HashMap和TreeMap(TreeMap实现SortedMap接口)。在Map中插入、删除和定位元素,HashMap是最佳选择。而假如要按自然顺序或自定义顺序遍历键,那么TressMap更好。 HashMap与HashTable区别: HashMap是HashTable的轻量级实现(非线程安全的实现),他们都完毕了Map接口,重要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上也许高于Hashtable。 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把HashTable的contains方法去掉了,改成containsValue和containsKey。由于contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,HashTable的方法是Synchronize的,而HashMap不是,在多个线程访问HashTable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 HashTable和HashMap采用的hash/rehash算法都大约同样,所以性能不会有很大的差异。 41 Set、TreeSet、HashSet Set接口继承自Collection接口,并且它不允许集合中存在反复项,每个具体的Set实现类依赖添加对象的equals()方法来检查唯一性。Set没有引入新方法,所以Set就是一个Collection,只但是其行为不同。 TreeSet和HashSet是集合框架支持Set接口两种普通的实现。多数情况下,使用HashSet存储反复自由的容器。 HashSet是为快速查找而设计的Set,存入HashSet的对象必须定义hashCode()。 TreeSet是保持顺序的Set,底层为树结构,使用它可以从Set中提取有序的序列。 42 Iterator的使用 Iterator可以遍历各种不同集合中的元素。该接口描述的是以统一方式对各种集合元素进行遍历/迭代的工具,又称迭代器。该接口中值定义了几个简朴的方法:hasNext()用于判断集合中是否仍有元素可以迭代,next()用于返回迭代的下一个元素,remove()将当前迭代到的元素从迭代器指向的集合中移除。 我们一般不直接创建Iterator对象,而是通过调用集合对象的iterator()方法来获取,实际返回的是Iterator接口不同实现类的对象。 43 String与StringBuffer的区别及使用 String类和StringBuffer类都可以实现储存和操作字符串,即包含多个字符的字符数据。 (1) String是由final修饰的,不能被继承. String 是不可改变的类,如String a=”b”; String a=”c”;这两个a是不同的 ,是2个对象,a=”c”时,是又重新定义了一个对象。String a=new String(”b”);有2个对象,都是在堆内存里的;而栈内存里存的是a (2) StringBuffer(为了解决创建对象耗时的问题),它是可变的,其有一个方法,append的方法。append的方法,使用的时候将StringBuffer a=new StringBuffer();a.append(“abc”);a.append(“efg”);最后用a.toString();就可得到一个字符串,将StringBuffer变成String来使用。有另一个方法StringBuilder(),是一个不安全的方法,实现起来,不安全的执行速度快。------StringBuffer类表达的是内容可以修改的Unicode编码字符序列,其对象创建后,所保存的字符串内容和长度都可以修改。事实上每个StringBuffer对象都拥有一个可变容量的字符串缓冲区,该缓冲区的容量可以随着内容的增长自动扩充,也可以直接设定。 ---------------StringBuilder是JDK5.0后增长的一个字符串解决类,该类可以提够与StringBuffer相同的功能。区别在于StringBuffer是线程安全的,而StringBuilder不是,即不保证其对象的同步性。因此,StringBuilder拥有更高的效率。 常见的类: 1. Sting;2. ArrayList; 3. HashMap;4. HttpServlet(抽象类);5 .Math;6. Date;7. StringBuffer; 8.Exception String里的常用方法: 1.Equals();2、charAt();3.length();(List里的length是属性,,而String里的是方法,又括号的) 4.substring();5.indexOf(int ch);6.trim();7.replace();(在javaScript里只替换一个);8.replaceAll();(在javaScript里就是替换多个);9.valueOf();(把各种基本数据类型转化为String型) Srtring a="";和String b;的区别:String a=""是空字符串,可以调用String类的任何方法,,而Stirng b;是null,值,并没有给他开辟任何空间。 Clone: 把一个对象复制给一个对象,如:在百度收信息,需要记录用户每次查询的关键字,先是存内存(把关键字放入Static ArrayList内,他是,具有共享性,用Static来修饰,可以每次用户来输入关键字时,就不用每次都要new新的ArrayList而是直接共享),再入库() 44 Date、Calendar的使用 45 多线程 两种实现方式 场景 涉及的术语 1、实现方法:继承Thread类或实现Runnable接口。 区别:a、Runnable是Thread的接口,多数情况下推荐使用继承接口的方式生成线程。由于接口可以实现多线程,并且Runnable只有一个run()方法,适合继承。 b、在继承Thread时只需new一个实例,调用start()方法即可以启动一个线程;而在使用Runnble的时候需要先new一个实现Runnable的实例,之后用子类Thread调用。 2、线程状态转换:新建态(new();),就绪态(start();),运营态,阻塞态,终止态。 3、线程调度:Java线程的调度不一定是分时的,必须保证代码中的线程会不是地给其它线程运营的机会。以下方法可以做到: A、让处在运营状态的线程调sleep()方法 线程睡眠; B、让处在运营状态的线程调用yeild()方法 线程让步; C、让处在运营状态的线程调用另一个线程的join()方法(非静态) 当一个正在运营的线程调用了另一个线程的join()方法,那么这个正在运营的线程转到阻塞状态,直至另一个线程运营结束才会恢复运营。 sleep()和yield()的区别: A、 sleep()方法会其他线程的运营机会,而不考虑其它线程的优先级,而yield()方法智慧给相同优先级或更高优先级的线程运营机会。 B、 当线程执行sleep()方法会转到阻塞状态,而执行yield()方法会转到可运营状态(就绪状态) C、 Sleep()声明会抛出异常,而yield()方法不会 D、 Sleep()比yield()方法具有更好的移植性,由于yield()方法的实现依赖于底层操作系统对线程的调度策略。 5、 线程同步(Thread Synchronization)通过synchronized关键字实现。 线程同步的特点:a、一把锁可以锁住多个同步代码块; b、锁对非同步代码块无效; c、当一个线程进入同步代码块,并不意味着指定代码必须不以中断的方式运营; d、当一个线程占有了某个对象的锁,其它需要获得这个锁的线程就进入到锁池中,等待获得锁的机会。 6、线程的通信:wait()和notify()/notifyAll() 7、死锁:当一个线程等待由另一个线程持有的锁,而后者正在等待已被第一个线程持有的锁时,就会发生死锁(必须手动结束)。 46 I/O 基本读写文本文献操作 FileInputStream和FileoutStream public void read(){ FileInputStream in; try { in = new FileInputStream("E:\\ss.txt"); int data; while((data = in.read()) != -1){ System.out.println(data + " abc"); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void write(){ try { FileOutputStream fo = new FileOutputStream("e:\\asd.txt"); fo.write("你好".getBytes()); fo.close(); } catch (FileNotFoundException) e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 字节流:InputStream、OutputStream 字符流:Reader、Writer 通过Inp
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 考试专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服