呵呵,有点乱,也有点重复的,但总比少的好了!
Java 基础知识<o:p></o:p>
<o:p> </o:p>
面向对象的特征:<o:p></o:p>
抽象,封装、继承、多态<o:p></o:p>
面向对象的特征 <o:p></o:p>
1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。<o:p></o:p>
2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。<o:p></o:p>
3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。<o:p></o:p>
4. 多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。<o:p></o:p>
<o:p></o:p>
int Integer 的区别:<o:p></o:p>
Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。<o:p></o:p>
原始类型封装类<o:p></o:p>
booleanBoolean<o:p></o:p>
charCharacter<o:p></o:p>
byteByte<o:p></o:p>
shortShort<o:p></o:p>
intInteger<o:p></o:p>
longLong<o:p></o:p>
floatFloat<o:p></o:p>
doubleDouble<o:p></o:p>
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。<o:p></o:p>
<o:p> </o:p>
String类和StringBuffer类的区别<o:p></o:p>
<o:p></o:p>
它们都是处理字符串的类,但是它们有一个最大的区别,那就是,String对象是存储你不能改动的文本字符<o:p></o:p>
串,相反,如果你希望改动,则应使用StringBuffer类作为替换<o:p></o:p>
StringBuffer是可变的而String是不可变的.<o:p></o:p>
而且String用得多个的话会占用不同的内存.<o:p></o:p>
如:String str = "bb";<o:p></o:p>
str = "aa";<o:p></o:p>
前一个bb的内存地址不变,当又给它赋值为aa时它又指向aa的地址.<o:p></o:p>
而StringBuffer就不会这样. <o:p></o:p>
:"=="比较的是两个对象的地址,"equals()"比较的是两个对象的值.<o:p></o:p>
<o:p> </o:p>
集合<o:p></o:p>
Collection 层次结构 中的根接口<o:p></o:p>
Collection 表示一组对象,这些对象也称为 collection 的元素<o:p></o:p>
Java集合的缺点:类型未知<o:p></o:p>
总的说来,Java API中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:<o:p></o:p>
<o:p> </o:p>
Collection<--List<--Vector<o:p></o:p>
Collection<--List<--ArrayList<o:p></o:p>
Collection<--List<--LinkedList<o:p></o:p>
Collection<--Set<--HashSet<o:p></o:p>
Collection<--Set<--HashSet<--LinkedHashSet<o:p></o:p>
Collection<--Set<--SortedSet<--TreeSet<o:p></o:p>
<o:p> </o:p>
List 是基于Array,可以有重复的值<o:p></o:p>
Vector : 基于Array的List很重要的一点就是Vector“sychronized”的,这个也是Vector和ArrayList的唯一的区别<o:p></o:p>
<o:p> </o:p>
ArrayList:基于Array上的链表,但是不同的是ArrayList不是同步的<o:p></o:p>
LinkedList:它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势<o:p></o:p>
<o:p> </o:p>
HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储<o:p></o:p>
Set总结:<o:p></o:p>
1. Set实现的基础是Map(HashMap);<o:p></o:p>
2. Set中的元素是不能重复的,如果使用add(Object obj)方法添加已经存在的对象,则会覆盖前面的对象;<o:p></o:p>
<o:p></o:p>
性能时Map所要面对的一个大问题。如果你知道get()时怎么工作的,你就会发觉(比方说)在ArrayList里面找对象会是相当慢的。而这正是 HashMap的强项。它不是慢慢地一个个地找这个键,而是用了一种被称为hash code的特殊值来进行查找的。散列(hash)时一种算法,它会从目标对象当中提取一些信息,然后生成一个表示这个对象的“相对独特”的int。 hashCode()是Object根类的方法,因此所有Java对象都能生成hash code。HashMap则利用对象的hashCode()来进行快速的查找。这样性能就有了急剧的提高。