JAVA知识点(整理版).doc_第1页
JAVA知识点(整理版).doc_第2页
JAVA知识点(整理版).doc_第3页
JAVA知识点(整理版).doc_第4页
JAVA知识点(整理版).doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档顶端JAVA知识点(整理版)Core JAVA4Java的特点4java序列化4面向对象语言的特征4封装:4继承:4多态:(polymorphism)5Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?5同步和异步有何异同,在什么情况下分别使用他们?举例说明。5支不支持地址传递?6InterFace6接口的好处6针对接口进行编程:6还有就是接口、抽象类的区别,为什么要有这两种 (描述特征,定义功能)6abstract class&interface(抽象类与接口的区别)?7java里的集合7(1)集(Set)8(2)列表(List)8(3)映射(Map)92.HashMap&Hashtable?10(4)Queue10其他:11数据类型、逻辑判断等问题11基本类型取值11String类12Split的使用12Static声明13&和&运算符的区别13switch的取值范围?可以作用在byte上吗?long呢?String呢?14内部类14Fina、finally、finalize区别14垃圾收回收机制14堆栈Stack15线程Thread15实现Runnable接口相对于继承Thread类的好处:15线程同步方法:16Synchronized16网络协议 Tcp/UDP16TCP:传输控制协议(Transmission Control Protocol)16UDP:用户数据报协议(User Datagram Protocol)16TCP编程:17反射Reflection17字符集概念17什么是字符集?什么是编码?17编码(Encoding):17ASCII:18字符集18Exception 异常18error和exception有什么区别?18常见Exception:18JAVA语言如何进行异常处理19Oracle19Oracle性能优化19A建库:20B建表:20C索引:20Dsql语句的优化:20E多表查询21Foralce访问表中的数据三种方式21G查询的SQL22H大容量数据表优化(分区表)22常用sql语句集22备 份:22建表:22删除主键:23添加约束23使约束失效23添加列和约束23使约束生效23创建序列23查看序列23查看序列当前可用的值24修改序列24创建视图24创建复杂视图24创建复杂视图224创建复杂视图325查看视图25更改视图25建立索引25创建表和约束26SQL语句优化(补充)26SQL书写的影响 共享SQL语句27WHERE后面的条件顺序影响28查询表顺序的影响28应用ORACLE的HINT(提示)处理29递归查询上级机构29数据库分页30删除重复数据30删除重复数据:30保留一条30drop,truncate和delete:31索引的类型31B-树索引31位图索引(Bitmap)31解释数据归档和非归档?32游标32存储过程和函数的区别32事务是什么?32原子性32一致性32隔离性32持久性33游标的作用?如何知道游标已经到了最后?33触发器分为事前触发和事后触发,这两种触发有和区别。33物化视图33物化视图例子35Oracle部分问题对答36Core JAVAJava的特点答:1) 简单(Java语法是C+语法的一个“纯净”版本); 2) 可移植性 3) 面向对象 4) 分布式(Java把打开套接字连接等繁琐的网络任务变得非常容易) 5) 健壮性(Java编译器会检查出很多其他语言在运行时刻才显示出来的错误;Java采用的指针模型可以消除重写内存和数据崩溃的可能) 7) 多线程(多线程编程的简单性是Java成为流行的服务器端开发语言的主要原因之一) 8) 安全(用Java可以构建防病毒和防篡改的系统) 9) 动态(Java可随意增加新的方法以及实例变量,而客户端却不需做任何的更改)10)体系结构中立(字节码与计算机体系结构无关,只要存在运行时系统,可在多种处理器上执行)java序列化是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流化进行读写操作时所引发的问题.实现Serializable接口面向对象语言的特征Private,default,protected,publicObject: toString,equals,finalize抽象:忽略掉一个对象或实体的细节而只关注其本质特征的过程.封装: 封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。对使用者屏蔽实现细节,暴露接口.使用者不必了解具体的实现细节,而只需要通过设计者提供的外部接口来操作它。增强使用的安全性,使对象的属性尽可能私有,对象的方法尽可能的公开.封装的基本要求:有外部接口,有特定的访问权限作用:封装可以隐藏实现细节,使得代码模块化;继承: 在现有类的基础上构建新的类。当继承一个现有类时,就重用(继承)了那个类的方法和属性,同时,还可以向新类中增添新的方法和属性。实现代码的重用.可以通过“继承”(Inheritance)和“组合”(Composition)来实现。多态:(polymorphism)一个对象多种表现方式.多态指的是编译时类型变化,而运行时类型不变。多态分两种:1.编译时多态:编译时动态重载;2.运行时多态:指一个对象可以具有多个类型。是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。实现多态,有二种方式,覆盖,重载。Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?方法的重写(覆盖)Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被屏蔽了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。作用:我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了代码重用。而多态则是为了实现另一个目的接口重用!使得程序更加灵活,最终带来很大的自由.多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。同步和异步有何异同,在什么情况下分别使用他们?举例说明。如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。支不支持地址传递?假如在一个方法中传递的是一个对象,对象里属性的值可不可以改变?不支持,java只支持值传递,如果传的是一个对象,实际传递的是这个对象的引用,通过方法的调用,可以改变对象的内容,但是对象的引用是不能改变.如果要改变对象的引用,可以把对象指向另一块内存,即指向将另一个对象赋给它.InterFace接口的好处a 实现多继承。b 类和类之间可以动态的切换。c 通过将接口暴露给调用者,能够将接口的实现屏蔽掉。更好的实现封装。针对接口进行编程:返回值尽量抽象,参数尽量抽象,避免了跟底层的接触,减少程序间的耦合度和类之间的依赖性,使程序更加灵活,可扩展性更强。还有就是接口、抽象类的区别,为什么要有这两种 (描述特征,定义功能)1 一个类可以实现任意多个接口,但它最多只能扩展一个抽象类。2 一个抽象类可以含有抽象方法和若干个非抽象方法,而一个接口的所有方法都是抽象的,无论是否将它的方法显式地声明为抽象的。3 抽象类可以声明和使用字段;接口却不能,尽管接口可以创建static final常量。4 抽象方法的可见性修饰符可以是public,protected,privatea 或者无修饰符(表示包内可见);而接口方法的可见性修饰符只能是public。5 抽象类可以定义构造器;而接口不行。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法接口实际上是定义一个规范、标准。1 通过接口可以实现不同层次、不同体系对象的共同属性;以JAVA数据库连接为例子:JDBC制定标准;数据厂商实现标准;用户使用标准。接口通常用来屏蔽底层的差异。接口也因为上述原因被用来保持架构的稳定性而接口(对象必须实现的承诺)与实现(对象如何履行这些承诺)相分离,允许多个类提供相同的功能,允许一个类同时实现多个接口,最终带来很大的自由。OOP面向对象的编程,如果要提高程序的复用率,增加程序的可维护性,可扩展性,就必须是面向接口的编程,面向抽象的编程,正确地使用接口、抽象类这些太有用的抽象类型做为你结构层次上的顶层。在我们对一个实体进行抽象的时候将他先分类处理,把他的属性跟主要方法划分为一个类,我们这时候就用到了ABSTRACT CLASS,而INTERFACE则是用来增加功能的直接对外的。我觉得抽象类可以理解为一个框架,根据他来派生出活生生的具体的类,基类。由这些具体的类在派生出新的类来适应新的要求。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法而Java接口做不到这一点,如果向一个Java接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点 而接口(对象必须实现的承诺)与实现(对象如何履行这些承诺)相分离,允许多个类提供相同的功能,允许一个类同时实现多个接口,最终带来很大的自由。举例:业务有个需求,获得数据库连接,抽象类的getConnection,返回oracle的连接。接口的getConnection方法是有子类去实现的。abstract class&interface(抽象类与接口的区别)?声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。 接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。java里的集合Collection接口:集合中每一个元素为一个对象,这个接口将这些对象组织在一起,形成一维结构。List接口代表按照元素一定的相关顺序来组织(在这个序列中顺序是主要的),List接口中数据可重复Set接口是数学中集合的概念:其元素无序,且不可重复。(正好与List对应) 集合类是放在java.util.*;这个包里。集合类存放的都是对象的引用,而非对象本身,为了说起来方便些,我们称集合中的对象就是指集合中对象的引用(reference)集合类型主要有3种:set(集)、list(列表)和map(映射)。(1)集(Set)集(set)是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。集也有多种变体,可以实现排序等功能,如TreeSet,它把对象添加到集中的操作将变为按照某种比较规则将其插入到有序的对象序列中。它实现的是SortedSet接口,也就是加入了对象比较的方法。通过对集中的对象迭代,我们可以得到一个升序的对象集合。HashSet: 使用HashMap的一个集的实现。虽然集定义成无序,但必须存在某种方法能相当高效地找到一个对象。使用一个HashMap对象实现集的存储和检索操作是在固定时间内实现的. HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同)而且元素不可重复。HashSet底层用的也是数组。如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。TreeSet: 在集中以升序对对象排序的集的实现。这意味着从一个TreeSet对象获得第一个迭代器将按升序提供对象。TreeSet类使用了一个TreeMap. SortedSet可自动为元素排序。SortedSet的实现类是TreeSet:它的作用是字为添加到TreeSet中的元素排序。如果要查询集合中的数据,使用Set必须全部遍历,所以查询的效率低。 (2)列表(List)列表的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,当然,它与根本没有顺序的集是不同的。列表在数据结构中分别表现为:数组和向量、链表、堆栈、队列。排序:可以让自定义对象实现Comparable接口,这个接口只有一个方法comparableTo(Object o)List:LinkedList,ArrayList,Vector,StackVector: 实现一个类似数组一样的表,自动增加容量来容纳你所需的元素。使用下标存储和检索对象就象在一个标准的数组中一样。你也可以用一个迭代器从一个Vector中检索对象。Vector是唯一的同步容器类?当两个或多个线程同时访问时也是性能良好的。 Stsck: 这个类从Vector派生而来,并且增加了方法实现栈。一种后进先出的存储结构。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。LinkedList: 实现一个链表。 在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。双向循环链表的查询效率低但是增删效率高。所以LinkedList具有查询效率低但增删效率高的特点。LinkedList经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。队列:先进先出的数据结构。堆栈:后进先出的数据结构。注意:使用堆栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在 LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。此实现不是同步的ArrayList: 实现一个数组,它的规模可变并且能像链表一样被访问。它提供的功能类似Vector类但不同步。ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList和数组非常类似,其底层也用数组组织数据,ArrayList是动态可变数组。ArrayList底层是object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。ArrayList和Vector的区别?在考虑并发的情况下用Vector(保证线程的安全)。在不考虑并发的情况下用ArrayList(不能保证线程的安全)。底层都是数组,查询快增删慢1.Vector同步,ArrayList不同步.2.Vector默认增长时增长为1倍,ArrayList为一半.它们是可变大小的列表,底层是数组,比较适合构建,存储和操作任何类型对象的元素列表。list适用于按数值索引访问元素的情形。(3)映射(Map)map提供了一个更通用的元素存储方法,用于存储元素对(键和值)其中每个键隐射到一个值。映射(Map)它里面的东西是键值对(key-value)出现的,键值对是什么呢?举个例子,比如我们查字典,用部首查字法。目录那个字就是键,这个字的解释就是值。键和值成对出现。这样说可以理解吧。这也是很常用的数据结构哦。映射与集或列表有明显区别,映射中每个项都是成对的。映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的。关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值,散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。理想情况下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。HashTable: 实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。 HashMap: 实现一个映象,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个)。 WeakHashMap: 实现这样一个映象:通常如果一个键对一个对象而言不再被引用,键/对象对将被舍弃。这与HashMap形成对照,映象中的键维持键/对象对的生命周期,尽管使用映象的程序不再有对键的引用,并且因此不能检索对象。 TreeMap: 实现这样一个映象,对象是按键升序排列的。2.HashMap&Hashtable?1.HashMap和HashTable都实现了Map接口.Hashtable是Dictionary的子类,HashMap是AbstractMap的子类,;2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:Map Collections.synchronizedMap(Map m)这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。hashMap是无序的.其底层的实现机制不同,hashmap的访问速度要快于hashtable,因为它不需要进行同步检验,建议在非多线程环境中使用hashmap代替hashtable(4)Queue 在jdk5.0以前,通常的实现方式是使用java.util.List集合来模仿Queue.Queue的概念通过把对象添加(称为enqueuing的操作)到List的尾部(即Queue的后部)并通过从List的头部(即Queue的前部)提取对象而从 List中移除(称为dequeuing的操作)来模拟。你需要执行先进先出的动作时可以直接使用Queue接口就可以了。其他:set Set具有和Collection完全一样的接口,没有任何额外的功能。它是一种不包含重复的元素的CollectionHashSet此类实现Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。此类为基本操作提供了稳定性能,此实现不是同步的。 LinkedHashSet具有可预知迭代顺序的Set 接口的哈希表和链接列表实现。此实现与HashSet的不同之处在于,它维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,即按照将元素插入到set中的顺序(插入顺序)进行迭代。注意,插入顺序不受在set中重新插入的元素影响。此实现不是同步的。TreeSet基于TreeMap的NavigableSet实现。使用元素的自然顺序对元素进行排序,或者根据创建set时提供的 Comparator 进行排序,具体取决于使用的构造方法。此实现为基本操作(add、remove 和 contains)提供受保证的 log(n) 时间开销。此实现不是同步的。数据类型、逻辑判断等问题基本类型取值byte 8位 -128-127short 16位 的取值范围应为 - (2的15次方) 2的15次方-1;int 32位 的取值范围应为 - (2的31次方) 2的31次方-1;long 64位 float 32位double 64位short s1=1,s1=s1+1有什么错?s1+=1呢?因为S1是short型的,占2个字节,而1是int型的,占4个字节。在两个类型的值相加的时候,会发生自动类型的提升。也就是说s1+1后,其结果是int型的,而不是short型的,所以可以想想看,把4个字节的东西放在两个字节的空间里,肯定编译不通过。 后面的那个不会发生类型的提升,JAVA规范上说 e1+=e2 实际上是 e1=(T1)(e1+e2),其中T1是e1的数据类型。 s1+=1等效于 s1=(short)(s1+1),所以是正确的。String类Integer.parseInt(String s) Integer.valueOf(int i)Integer.toBinaryString(133);/二进制Integer.toHexString(133);/十六进制Integer.toOctalString(133);/八进制toLowerCase();/转换为小写toUpperCase()/转换为大写toCharArray();/将此字符串转换为一个新的字符数组。length();/获得长度charAt(int index)/返回指定索引处的 char 值substring(int beginIndex,int endIndex)返回一个新字符串,它是此字符串的一个子字符串.copyValueOf(char data, int offset, int count)返回指定数组中表示该字符序列的字符串getBytes() indexOf(String str) 返回第一次出现的指定子字符串在此字符串中的索引。lastIndexOf(String str) 返回在此字符串中最右边出现的指定子字符串的索引。replace(char oldChar, char newChar) 返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 而生成的。replaceAll(String regex, String replacement) 使用给定的 replacement 字符串替换此字符串匹配给定的正则表达式的每个子字符串split(String regex)trim() valueOf(int i)stringBufferappend(String str) insert(int offset, String str) reverse() 将此字符序列用其反转形式取代。Split的使用String str = ;System.out.println(str);String s = str.split(.);/正则表达式String result = ;for(int i=0;i调用start()进入Runnable状态-获得CPU时间片进入Running状态-调用sleep(),join()进入Block状态-interrupt()进入Runnable-wait(),yield()进入Waiting queue(等待队列)-notify notifyAll进入lock pool-synchronized -进入lock pool 从lock pool竞争获得CPU时间片,进入Runnable-Dead一个线程使用yield()就马上交出执行权,回到可运行状态,等待OS的再次调用。两个线程同时访问一个数据资源(临界资源),形成数据发生不一致和不完整。线程同步方法:wait 使一个线程处于等待状态,并释放锁标记sleep 使线程处于睡眠状态,不释放锁标记,sleep方法捕获InterruptedException。notify 唤醒一个处于等待状态的线程.notifyAll 唤醒所有处于等待状态的线程。让他们竞争锁标记SynchronizedSynchronized是以牺牲程序运行的效率为代价的,因此应该尽量控制互斥代码块的范围。同步:发送一个请求,等待返回,然后再发送下一个请求 异步:发送一个请求,不等待返回,随时可以再发送下一个请求 并发:同时发送多个请求网络协议 Tcp/UDPTCP:传输控制协议(Transmission Control Protocol)TCP/IP是Internet所遵循的协议,是网络应用程序的首选协议,大多数网路程序都是以这个协议为基础。TCP/IP是面向连接的通信协议,TCP提供两台计算机之间的可靠无差错的数据传输。应用程序利用TCP进行通信时,源和目标之间会建立一个虚拟连接。这个连接一旦建立,两台计算机之间就可以把数据当作一个双向字节流进行交换.就像打电话一样,互相能听到对方在说什么,也知道对方的回应是什么。UDP:用户数据报协议(User Datagram Protocol)UDP是无连接通信协议,UDP不保证可靠数据传输,但是能够像若干个目标发送数据,并接收发自若干个源的数据。Java的net包中存放了这两种协议的编程类,UDP对应的是DatagramSocketTCP对应的是ServerSocket(用于服务器端),Socket(客户端)TCP编程:服务器端调用ServerSocket.accept方法等待客户的连接请求,一旦accept接收了客户连接请求,该方法将返回一个与该客户建立了专线连接的Socekt对象,不用程序去创建这个Socket对象。当客户端和服务器端的两个Socket建立了专线连接后,连接的一端能向另一端连续写入字节,也能从另一端连续读入字节,也就是建立了专线连接的两个Socket是一IO流的方式进行数据交换的。java提供Socket.getInputStream方法返回Socket的输入流对象。Socket.getOutputStream方法返回Socket的输出流对象。反射ReflectionReflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用 Class.forName 载入指定的类使用它能获得 Java 类中各成员的名称并显示出来。Example:Class cl = Class.forName(com.list.DoubleLinkedList);com.list.DoubleLinkedList dll = (com.list.DoubleLinkedList)cl.newInstance();dll.add(张曼玉);字符集概念在Java应用程序特别是Web应用中,经常遇到字符的编码问题。为了防止出现乱码,首先需要了解字符编码的基本概念以及Java是如何处理字符编码的,这样就可以有目的地在输入/输出环节中增加必要的转码。什么是字符集?什么是编码?字符(Character):是文字与符号的总称,包括文字、图形符号、数学符号等。字符集(Charset):就是一组抽象字符的集合。字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。一组有共同特征的字符也可以组成字符集,比如繁体汉字字符集、日文汉字字符集。字符集的子集也是字符集。计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码(Encoding):制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。根据字符集内字符的多少,会确定用几个字节来编码。每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Character Set),这是字符集的另外一个含义。通常所说的字符集大多是这个含义。ASCII:American Standard Code for Information Interchange,美国信息交换标准码。目前计算机中用得最广泛的字符集及其编码,由美国国家标准局(ANSI)制定。 它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。 ASCII字符集由控制字符和图形字符组成。 在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。字符集String bookname = new String(request.getParameter(bookname).getBytes(iso-8859-1),GB2312);要熟悉字符操作,必须明白一个概念,就是字符集,其实字符在程序中是以数字的形式存在的,一个数字对应一个字符,例如a对应97,这种数字和字符的对应关系叫做字符集。常见的字符集有很多,例如ASCII、GB2312、ISO8859-1等。 Java语言为了更好的支持国际化,所以使用了Unicode字符集。字符集转换的基本思想很简单,用某种字符编码规则编码,就用什么编码规则解码在java系统里,内存中的数据必须用unicode编码,所以读取各种存储设备的数据时,都需要先根据存储设备中的数据的编码规则进行解码读取;存储数据时,需要根据存储设备要求的编码规则进行编码存储否则会出现乱码。Exception 异常error和exception有什么区别?JAVA会将所有的错误封装成为一个对象,其根本父类为Throwable。Throwable有两个子类:Error和Exception。一个Error对象表示一个程序错误,指的是底层的、低级的、不可恢复的严重错误exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。可以由程序员控制的.常见Exception:ArithmeticException:除数不能为0ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常IndexOutOfBoundsException:指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出NullPointerException:空指针异常SystemException,DOMException:即不能执行操作时(由于逻辑原因,因为丢失数据或因为实现变得不稳定)。通常,DOM 方法在普通处理情况下返回特定的错误值,如使用 NodeList 时的超出边界错误。 EmptyStackException:表明堆栈为空IllegalArgumentException:抛出的异常表明向方法传递了一个不合法或不正确的参数IllegalPathStateException:如果操作在处于非法状态的路径上执行JAVA语言如何进行异常处理JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。用try来指定一块预防所有异常的程序。紧跟在try程序后面,应包含一个catch子句来指定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论