java中常见类型的转换以及方法总结

1.char、String、int类型之间的转换

1.1 char和String的区别

  1. char是表示的是字符,定义的时候用单引号,只能存储一个字符。例如; char=‘d’.
    String表示的是字符串,定义的时候用双引号,可以存储一个或者多个字符。例如:String=“we are neuer”。
  2. char是基本数据类型,而String是个类,属于引用数据类型。String类可以调用方法,具有面向对象的特征

1.2 String转换为char、int、Integer

  1. String -> char(i) 使用String.charAt(index)(返回值为char)可以得到String中某一指定位置的char。
  2. String -> char[ ] 使用String.toCharArray()(返回值为char[ ])可以得到将包含整个String的char数组。这样我们就能够使用从0开始的位置索引来访问string中的任意位置的元素。
  3. String -> int 使用Integer.parseInt(str) 进行转换,返回str所代表的的int值大小。
  4. String -> Integer 使用Integer.valueOf(str),返回Integer对象。

1.3 char转换为String、int

char -> int 使用 (int) (char-‘0’) 转换,返回值为int值大小
char -> String :有6种方法,如下:

1. String s = String.valueOf('c'); //效率最高的方法

2. String s = String.valueOf(new char[]'c'}); //将一个char数组转换成String

// Character.toString(char)方法实际上直接返回String.valueOf(char)
3. String s = Character.toString('c');

4. String s = new Character('c').toString();

5. String s = "" + 'c';
/*** 虽然这个方法很简单,但这是效率最低的方法
Java中的String Object的值实际上是不可变的,是一个final的变量。
所以我们每次对String做出任何改变,都是初始化了一个全新的String Object并将原来的变量指向了这个String。
而Java对使用+运算符处理String相加进行了方法重载。
字符串直接相加连接实际上调用了如下方法:
	new StringBuilder().append("").append('c').toString();
***/

6. String s = new String(new char[]{'c'});

1.4 Int转换为String、Integer、char

//int型 转 String型
        String str1=Integer.toString(in);  //使用Integer.toString()
        String str2=String.valueOf(in);	//使用String.valueOf(int i);返回String
        String str3 = "" + in; //少用的方式
//int型 转 char型
        char cha=(char)(in+'0');
//int型 转 Integer型
		Integer integer=new Integer(in);

1.4 String数组转为int数组

	String[] strings = {"1", "2", "3"};
	//1. 使用stream流 
	int[] array = Arrays.asList(strings).stream().mapToInt(Integer::parseInt).toArray();
	
	//2. 或
	int[] array = Arrays.stream(strings).mapToInt(Integer::parseInt).toArray();
	
	// 3.对String数组中的每一个str进行操作
	int[] intarray = new int[strings.length];
    int i=0;
    for(String str:strings){
        intarray[i++]=Integer.parseInt(str);
    }

2.String、StringBuffer、StringBuilder的关系

  • 当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类

  • 与 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。


StringStringBufferStringBuilder
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且浪费大量优先的内存空间StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量可变类,速度更快,线程不安全
不可变可变可变
/线程安全线程不安全
/多线程操作字符串单线程操作字符串

在这里插入图片描述


2.1 String字符串常用操作:

  • length():返回字符串长度
  • string1.concat(string2):连接字符串string1和string2
  • charAt(int index):返回指定索引处的字符
  • setCharAt(index,String);将index处的字符替换为String
  • endsWith(String s):判断是否以某字符结束
  • startsWith(String s):是否以指定前缀开始
  • equals(Object s):将字符串与指定对象做比较,是否相等
  • indexOf(String s):返回指定字符串在字符串中第一次出现的位置
  • split(String s):根据指定的正则表达式匹配拆分字符串,返回字符串数组
  • substring(int a,int b):返回从a到b新的字符串
  • toCharArray():将字符串转换为字符数组
  • trim():去除字符串首尾空格
  • contains(char s):判断是否包含指定的字符系列
  • isEmpty():判断字符串是否为空
  • format(): 用来创建可复用的格式化字符串,而不仅仅是用于一次打印输出。

2.2 StringBuffer字符串/StringBuilder字符串方法:

  • append:向序列中追加元素
  • reverse:将序列中元素反转
  • delete(int start, int end):移除此序列的子字符串中的字符
  • deleteCharAt(int a):删除指定下标的字符
  • insert(位置,元素):向序列中指定位置插入元素
  • replace(int start, int end, String str):用指定的str替换序列中start到end的字符
  • capacity():返回当前容量
  • int length():返回长度(字符数)
  • charAt(int index):返回指定索引处值
  • indexOf(String str):返回第一次出现该字符的索引
  • int indexOf(String str, int fromIndex):从指定下标开始,返回第一次出现该字符的索引
  • int lastIndexOf(String str):返回最右边出现的指定子字符串在此字符串中的索引
  • substring(int start, int end):返回一个新的 String,它包含此序列当前所包含的字符子序列
  • toString():返回此序列中数据的字符串表示形式

3.List接口类

  • List是Java中比较常用的集合类,关于List接口有很多实现类
  • List 是一个接口,它继承于Collection的接口。
    在这里插入图片描述

3.1 LinkedList类

  • 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址,并且允许所有元素(包括 null)。
  • 与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

以下情况使用 LinkedList :

  • 你需要通过循环迭代来访问列表中的某些元素。
  • 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
/*** 引入 LinkedList 类
LinkedList 继承了 AbstractSequentialList 类。
LinkedList 实现了 Queue 接口,可作为队列使用。
LinkedList 实现了 List 接口,可进行列表的相关操作。
LinkedList 实现了 Deque 接口,可作为队列使用。
LinkedList 实现了 Cloneable 接口,可实现克隆。
LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。
***/
import java.util.LinkedList; 

LinkedList<E> list = new LinkedList<E>();   // 普通创建方法
//或者
LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表

在这里插入图片描述


常用操作方法:

  • padd() / addLast) / offer() / offerLast():在末尾添加元素
  • addFirst() / offerFirst():在头部添加元素
  • removeFirst():移除头部元素
  • remove / removeLast():移除末尾元素
  • getFirst():获取头部元素
  • get / getLast():获取末尾元素
  • poll() :删除并返回第一个元素
  • peek():返回第一个元素
  • size():返回链表元素个数

更多API方法可查看:https://www.runoob.com/manual/jdk11api/java.base/java/util/LinkedList.html


3.2 ArrayList 类

ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。ArrayList 是一个数组队列,提供了相关的添加、删除、修改、遍历等功能。

以下情况使用 ArrayList :

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。
// 引入 ArrayList 类
import java.util.ArrayList; 

ArrayList<E> objectName =new ArrayList<>();  // 初始化

在这里插入图片描述


常用操作方法:

  • add():添加元素
  • clear():清楚所有元素
  • contains():是否包含某个元素
  • get():获得某个元素
  • indexOf():返回指定值索引
  • remove():移除元素
  • removeAll():移除所有元素
  • size():列表大小
  • isEmpty():是否为空
  • subList():截取列表
  • set():设置值
  • sort():排序
  • toArray():将 arraylist 转换为数组
  • toString():将 arraylist 转换为字符串
  • forEach():遍历 arraylist 中每一个元素并执行特定操作
  • lastIndexOf():返回指定元素在 arraylist 中最后一次出现的位置

更多 API 方法可以查看https://www.runoob.com/manual/jdk11api/java.base/java/util/ArrayList.html


3.3 Stack类

栈是Vector的一个子类,它实现了一个标准的后进先出的栈。

注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。
  • 该类和ArrayList非常相似,但是该类是同步的,可以用在多线程的情况,该类允许设置默认的增长长度,默认扩容方式为原来的2倍。

常用操作方法:

  • empty() :测试栈是否为空
  • peek( ):查看堆栈顶部的对象,但不从堆栈中移除它
  • pop( ):移除堆栈顶部的对象,并作为此函数的值返回该对象
  • push(Object element):把项压入堆栈顶部
  • search(Object element):返回对象在堆栈中的位置,以 1 为基数

4.Queue接口类

  • Queue是java中实现队列的接口,它总共只有6个方法,我们一般只用其中3个就可以了。Queue的实现类有LinkedList和PriorityQueue。最常用的实现类是LinkedList。

Queue的6个方法分类:
压入元素(添加):add()、offer()
相同:未超出容量,从队尾压入元素,返回压入的那个元素。
区别:在超出容量时,add()方法会对抛出异常,offer()返回false

弹出元素(删除):remove()、poll()
相同:容量大于0的时候,删除并返回队头被删除的那个元素。
区别:在容量为0的时候,remove()会抛出异常,poll()返回false

获取队头元素(不删除):element()、peek()
相同:容量大于0的时候,都返回队头元素。但是不删除。
区别:容量为0的时候,element()会抛出异常,peek()返回null。


4.1 Deque

  • Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
  • 特点
    1.插入、删除、获取操作支持两种形式:快速失败和返回null或true/false
    2.既具有FIFO特点又具有LIFO特点,即是队列又是栈
    3.不推荐插入null元素,null作为特定返回值表示队列为空
    4.未定义基于元素相等的equals和hashCode

Deque的三种用途

//普通队列(一端进另一端出):
Queue queue = new LinkedList()Deque deque = new LinkedList()
//双端队列(两端都可进出)
Deque deque = new LinkedList()
//堆栈
Deque deque = new LinkedList()

常用操作方法:
addFirst(): 向队头插入元素,如果元素为空,则发生NPE(空指针异常)
addLast(): 向队尾插入元素,如果为空,则发生NPE
offerFirst(): 向队头插入元素,如果插入成功返回true,否则返回false
offerLast(): 向队尾插入元素,如果插入成功返回true,否则返回false
removeFirst(): 返回并移除队头元素,如果该元素是null,则发生NoSuchElementException
removeLast(): 返回并移除队尾元素,如果该元素是null,则发生NoSuchElementException
pollFirst(): 返回并移除队头元素,如果队列无元素,则返回null
pollLast(): 返回并移除队尾元素,如果队列无元素,则返回null
getFirst(): 获取队头元素但不移除,如果队列无元素,则发生NoSuchElementException
getLast(): 获取队尾元素但不移除,如果队列无元素,则发生NoSuchElementException
peekFirst(): 获取队头元素但不移除,如果队列无元素,则返回null
peekLast(): 获取队尾元素但不移除,如果队列无元素,则返回null
pop(): 弹出栈中元素,也就是返回并移除队头元素,等价于removeFirst(),如果队列无元素,则发生NoSuchElementException
push(): 向栈中压入元素,也就是向队头增加元素,等价于addFirst(),如果元素为null,则发生NPE,如果栈空间受到限制,则发生IllegalStateException


4.2 ArrayDeque类

ArrayDeque是Deque接口的一个实现,使用了可变数组,所以没有容量上的限制。
同时,ArrayDeque是线程不安全的,在没有外部同步的情况下,不能再多线程环境下使用。
ArrayDeque是Deque的实现类,可以作为栈来使用,效率高于Stack;
也可以作为队列来使用,效率高于LinkedList。
需要注意的是,ArrayDeque不支持null值。

常用操作方法:

  • addFirst(E e)在数组前面添加元素
  • addLast(E e)在数组后面添加元素
  • offerFirst(E e) 在数组前面添加元素,并返回是否添加成功
  • offerLast(E e) 在数组后天添加元素,并返回是否添加成功
  • removeFirst()删除第一个元素,并返回删除元素的值,如果元素为null,将抛出异常
  • pollFirst()删除第一个元素,并返回删除元素的值,如果元素为null,将返回null
  • removeLast()删除最后一个元素,并返回删除元素的值,如果为null,将抛出异常
  • pollLast()删除最后一个元素,并返回删除元素的值,如果为null,将返回null
  • removeFirstOccurrence(Object o) 删除第一次出现的指定元素
  • removeLastOccurrence(Object o) 删除最后一次出现的指定元素
  • getFirst() 获取第一个元素,如果没有将抛出异常
  • getLast() 获取最后一个元素,如果没有将抛出异常
  • add(E e) 在队列尾部添加一个元素
  • offer(E e) 在队列尾部添加一个元素,并返回是否成功
  • remove() 删除队列中第一个元素,并返回该元素的值,如果元素为null,将抛出异常(其实底层调用的是removeFirst())
  • poll() 删除队列中第一个元素,并返回该元素的值,如果元素为null,将返回null(其实调用的是pollFirst())
  • element() 获取第一个元素,如果没有将抛出异常
  • peek() 获取第一个元素,如果返回null

5.Map接口类

参考链接:https://blog.csdn.net/qq_34316768/article/details/99296332
java为数据结构中的映射定义了一个接口java.util.Map,而HashMap Hashtable和TreeMap就是它的实现类。Map是将键映射到值的对象,一个映射不能包含重复的键;每个键最多只能映射一个一个值。
在这里插入图片描述

(1) Map 是“键值对”映射的抽象接口。
(2) AbstractMap 实现了Map中的绝大部分函数接口。它减少了“Map的实现类”的重复编码。
(3) SortedMap 有序的“键值对”映射接口。
(4) NavigableMap 是继承于SortedMap的,支持导航函数的接口。
(5) HashMap, Hashtable, TreeMap, WeakHashMap4个类是“键值对”映射的实现类。它们各有区别!
	  HashMap 是基于“拉链法”实现的散列表。一般用于单线程程序中。
	  Hashtable 也是基于“拉链法”实现的散列表。它一般用于多线程程序中。
	  WeakHashMap 也是基于“拉链法”实现的散列表,它一般也用于单线程程序中。相比HashMapWeakHashMap中的键是“弱键”,当“弱键”被GC回收时,它对应的键值对也会被从WeakHashMap中删除;而HashMap中的键是强键。
	  TreeMap 是有序的散列表,它是通过红黑树实现的。它一般用于单线程中存储有序的映射。

( 拉链法又叫链地址法,Java中的HashMap在存储数据的时候就是用的拉链法来实现的,拉链发就是把具有相同散列地址的关键字(同义词)值放在同一个单链表中,称为同义词链表。)

常用操作方法:

  • clear() 删除 hashMap 中的所有键/值对
  • clone() 复制一份 hashMap
  • isEmpty() 判断 hashMap 是否为空
  • size() 计算 hashMap 中键/值对的数量
  • put() 将键/值对添加到 hashMap 中
  • putAll() 将所有键/值对添加到 hashMap 中
  • putIfAbsent() 如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。
  • remove() 删除 hashMap 中指定键 key 的映射关系
  • containsKey() 检查 hashMap 中是否存在指定的 key 对应的映射关系。
  • containsValue() 检查 hashMap 中是否存在指定的 value 对应的映射关系。
  • replace() 替换 hashMap 中是指定的 key 对应的 value。
  • replaceAll() 将 hashMap 中的所有映射关系替换成给定的函数所执行的结果。
  • get() 获取指定 key 对应对 value
  • getOrDefault() 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
  • forEach() 对 hashMap 中的每个映射执行指定的操作。
  • entrySet() 返回 hashMap 中所有映射项的集合集合视图。
  • keySet() 返回 hashMap 中所有 key 组成的集合视图。
  • values() 返回 hashMap 中存在的所有 value 值。
  • merge() 添加键值对到 hashMap 中

5.1 HashMap类

  • Hashmap 是一个最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。
  • HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程的同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。
  • 如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力.
  • 用链表或者红黑树实现HashMap
    在这里插入图片描述
  • HashMap:数组+链表+红黑树
    在这里插入图片描述

5.2 Hashtable类

它和HashMap类很相似,但是它支持同步。
像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。
该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。

HashtableHashMap类似,但是主要有6点不同。
        1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像VectorArrayList一样。   
        2.HashTable不允许null值,key和value都不可以,HashMap允许null值,key和value都可以。HashMap允许key值只能由一个null值,因为hashmap如果key值相同,新的key, value将替代旧的。   
        3.HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。   
        4.HashTable使用EnumerationHashMap使用Iterator5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1HashMap中hash数组的默认大小是16,而且一定是2的指数。   
        6.哈希值的使用不同,HashTable直接使用对象的hashCode。

- Hashtable支持contains(Object value)方法,而且重写了toString()方法;
-HashMap不支持contains(Object value)方法,没有重写toString()方法。

5.3 TreeMap类

TreeMap是SortedMap的实现类,是一个红黑树的数据结构,每个key-value对作为红黑树的一个节点。TreeMap存储key-value对时,需要根据key对节点进行排序。

  • TreeMap能够把它保存的记录根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。
    在这里插入图片描述

TreeMap: 红黑树在这里插入图片描述


6.Set接口类

Set集合类似于一个罐子,程序可以依次把多个对象“丢进”Set集合,而Set集合通常不能记住元素的添加顺序。实际上Set就是Collection只是行为略有不同(Set不允许包含重复元素)。
Set集合不允许包含相同的元素,如果试图把两个相同元素加入同一个Set集合中,则添加操作失败,add()方法返回false,且新元素不会被加入

Conllection——>Set——>TreeSet和HashSet在这里插入图片描述
常用操作方法

  • add(Object obj):向Set集合中添加元素,添加成功返回true,否则返回false。
  • size():返回Set集合中的元素个数。
  • remove(Object obj): 删除Set集合中的元素,删除成功返回true,否则返回false。
  • isEmpty():如果Set不包含元素,则返回 true ,否则返回false。
  • clear(): 移除此Set中的所有元素。
  • iterator():返回在此Set中的元素上进行迭代的迭代器。
  • contains(Object o):如果Set包含指定的元素,则返回 true,否则返回false。

6.1 HashSet类

HashSet是Set接口的典型实现,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法来存储集合中的元素,因此具有很好的存取和查找性能。底层数据结构是哈希表

HashSet具有以下特点:

  • 不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也可能发生变化;
  • HashSet不是同步的;
  • 集合元素值可以是null;

6.2 LinkedHashSet类

  • LinkedHashSet集合也是根据元素的hashCode值来决定元素的存储位置,但它同时使用链表维护元素的次序,这样使得元素看起来是以插入的顺序保存的,也就是说当遍历集合LinkedHashSet集合里的元素时,集合将会按元素的添加顺序来访问集合里的元素。
  • 输出集合里的元素时,元素顺序总是与添加顺序一致。但是LinkedHashSet依然是HashSet,因此它不允许集合重复。

6.3 TreeSet类

  • TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态。
  • TreeSet内部实现的是红黑树,默认整形排序为从小到大。
  • TreeMap内部对元素的操作复杂度为O(logn)
    在这里插入图片描述
TreeSet的底层是这样的一个二叉树(如上图所示)

当我们存储的第一个元素的时候,会把第一个元素存在“根”的位置,存储第二个元素的时候,TreeSet 底层会调用 compareTo() 方法:

1)如果 compareTo()的返回结果为 0 则这两个元素是一样的,就不会存储,

2)如果返回负数,则第二个元素比第一个元素小,把第二个元素存储在左孩子的位置。

3)如果返回正数,则第二个元素比第一个元素大,把第二个元素存储在右孩子的位置。

以此类推~

  • 32
    点赞
  • 194
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。 2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。 3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。 4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。 4、String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。 5、运行时异常与一般异常有何异同? 异常表示程序运行过程可能出现的非正常状态,运行时异常表示虚拟机的通常操作可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。 与cgi的区别在于servlet处于服务器进程,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。 7、说出ArrayList,Vector, LinkedList的存储性能和特性 ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。 EJB包括Session Bean、Entity Bean、Message Driven Bea
Java 基础核心总结Java 概述 什么是 Java2 Java 的特点Java 开发环境 JDK JRE Java 开发环境配置 Java 基本语法 数据类型基础语法运算符 Java 执行控制流程条件语句 if 条件语句 if...else 条件语句if...else if 多分支语句switch 多分支语句 循环语句 while 循环语句do...while 循环for 循环语句 跳转语句 break 语句 continue 语句面向对象 类也是-种对象对象的创建 属性和方法 构造方法 方法重载 方法的重写 初始化 类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 Throwable 常见的 Exception 与 Exception 有关的 Java 关键字 throws 和 throw try 、finally 、catch 什么是 Error 内部类 创建内部类集合 Iterable 接口顶层接口 ArrayList Vector LinkedList 类Stack HashSet TreeSet LinkedHashSet 类 PriorityQueue HashMap TreeMap 类 LinkedHashMap 类 Hashtable 类IdentityHashMap 类WeakHashMap 类 Collections 类集合实现类特征图 泛形 泛型的使用 用泛型表示类 用泛型表示接口泛型方法 泛型通配符 反射 Class 类Field 类Method 类ClassLoader 类 枚举 枚举特性 枚举和普通类-样枚举神秘之处 枚举类 I/O File 类 基础 IO 类和相关方法InputStream OutputStream Reader 类Writer 类 InputStream 及其子类 OutputStream 及其子类Reader 及其子类Writer 及其子类 注解 关于 null 的几种处理方式大小写敏感 null 是任何引用类型的初始值 null 只是-种特殊的值使用 Null-Safe 方法null 判断 关于思维导图 Java.IO Java.lang Java.math Java.net Java 基础核心总结 V2.0 IO 传统的 BIO BIO NIO 和 AIO 的区别什么是流 流的分类 节点流和处理流 Java IO 的核心类 File Java IO 流对象 字节流对象InputStream OutputStream 字符流对象Reader Writer 字节流与字符流的转换新潮的 NIO 缓冲区(Buffer)通道(Channel) 示例:文件拷贝案例 BIO 和 NIO 拷贝文件的区别操作系统的零拷贝 选择器(Selectors) 选择键(SelectionKey) 示例:简易的客户端服务器通信 集合 集合框架总览 -、Iterator Iterable ListIterator 二、Map 和 Collection 接口Map 集合体系详解 HashMap LinkedHashMap TreeMap WeakHashMap Hashtable Collection 集合体系详解 Set 接口 AbstractSet 抽象类SortedSet 接口HashSet LinkedHashSet TreeSet List 接口 AbstractList 和 AbstractSequentialList Vector Stack ArrayList LinkedList Queue接口Deque 接口 AbstractQueue 抽象类LinkedList ArrayDeque PriorityQueue 反射的思想及作用 反射的基本使用 获取类的 Class 对象构造类的实例化对象获取-个类的所有信息 获取类的变量(Field) 获取类方法(Method) 获取类的构造器(Constructor) 获取注解 通过反射调用方法反射的应用场景 Spring 的 IOC 容器反射 + 抽象工厂模式 JDBC 加载数据库驱动类反射的优势及缺陷 增加程序的灵活性破坏类的封装性 性能损耗 代理模式 静态代理与动态代理常见的动态代理实现JDK Proxy CGLIB JDK Proxy 和 CGLIB 的对比动态代理的实际应用 Spring AOP 变量 变量汇总实例变量 实例变量的特点全局变量 静态变量 静态变量的特点类变量 局部变量
目 录 第一章 JAVA入门 10 计算机语言发展史 10 机器语言 10 汇编语言 10 高级语言 10 其他高级语言 11 JAVA发展简史 12 JAVA为什么能够流行? 13 JAVA各版本的含义 13 JAVA技术体系架构 14 JAVA的特性和优势 14 JAVA应用程序的运行机制 15 JVM(JAVA VIRTUAL MACHINE) 16 Java运行时环境JRE(Java Runtime Environment) 17 JAVA语言应用范围 18 第一个JAVA程序 18 JAVA开发环境搭建 18 一个典型的JAVA程序的编写和运行过程 19 第一个程序常见错误 20 第一个JAVA程序的总结和提升 20 常用Java开发工具 20 常用dos命令 21 本章笔试作业 21 本章上机操作 21 第二章(1) 编程的基本概念 22 注释 22 标识符 22 关键字/保留字 23 变量(variable) 24 常量(Constant) 25 命名规则(规范) 25 基本数据类型(primitive data type) 26 整型变量 26 浮点型 27 字符型(2个字节): 28 boolean类型 29 运算符(operator) 29 二元运算符 29 一元运算符 30 布尔逻辑表达符 30 位运算符 30 扩展运算符 31 字符串连接符 31 三目条件运算符 31 运算符优先级的问题 31 自动类型转换 32 基本类型转化时常见错误和问题 33 方法 33 简单的键盘输入和输出 33 本章思考作业 34 上机操作 34 第二章(2) 控制语句 35 顺序结构 35 选择结构 35 if单选择结构 35 if-else双选择结构 35 If-elseif-else多选择结构 36 switch多选择结构 37 循环结构 39 While和dowhile的区别 41 For循环 42 break语句和continue语句 47 语句块 48 递归结构 49 本章作业 50 本章上机操作 51 第三章 JAVA面向对象程序开发 52 编程语言发展史 52 类和对象是如何产生发展的?如何进化的? 52 面向对象思想初步(OOP初步Object Oriented Programming) 53 面向对象编程的语言的三大特征简介 56 对象和类的概念 56 类和对象初步 57 测试类的定义方式 57 简单的学生类编写示例 58 内存分析 59 属性(field,或者叫成员变量) 59 引用类型 60 类的方法 60 对象的创建和使用 60 构造器(或者叫做构造方法,constructor) 60 垃圾回收机制(Garbage Collection) 63 方法的重载(overload),构造方法的重载 63 this关键字 65 static 关键字 66 静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK的主要包 68 import 68 eclipse的使用 69 继承(extend, inheritance) 70 为什么需要继承?继承的作用? 70 继承介绍 70 如何实现继承? 70 继承使用要点 71 Object类 72 toString方法 72 equals方法 73 super关键字 74 方法的重写(override) 74 隐藏/封装(encapsulation) 75 为什么需要封装?封装的作用和含义? 75 使用访问控制符,实现封装 76 封装的使用细节 76 多态(polymorphism) 76 为什么需要多态? 76 如何实现多态? 77 方法绑定(method binding) 77 静态绑定 77 动态绑定 77 多态的使用要点 78 对象的转型(casting) 79 final 81 抽象类 82 抽象类的使用要点 83 接口 83 为什么需要接口? 84 如何定义接口? 84 接口的本质探讨 84 接口使用要点 85 接口的多继承 86 面向接口编程 87 OOP更多应用 87 组合 87 内部类(innerclasses) 88 字符串(java.lang.String类)的使用 90 字符串相等的判断 92 思考作业 93 上机作业 94 第四章 异常机制 95 导引问题 95 异常(Exception)的概念 96 异常分类 96 Error 97 Error和Exception的区别 97 Exception 97 异常的处理办法之一,捕获异常 99 try块 99 catch 99 finally 100 try, catch,finally ,return 执行顺序 100 异常的处理办法之二,声明异常:
其他还有很多异常,我就不一一列举了,我要说明的是,一个合格的程序员,需要对程序常见的问题有相当的了解和相应的解决办法,否则仅仅停留在写程序而不会改程序的话,会极大影响到自己的开发的。关于异常的全部说明,在api里都可以查阅。 算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeArrayException 数组下标越界异常:ArrayIndexOutOfBoundsException 违背安全原则异常:SecturityException 文件已结束异常:EOFException 文件未找到异常:FileNotFoundException 字符串转换为数字异常:NumberFormatException 操作数据库异常:SQLException 输入输出异常:IOException 方法未找到异常:NoSuchMethodException java.lang.AbstractMethodError 抽象方法错误。当应用试图调用抽象方法时抛出。 java.lang.AssertionError 断言错。用来指示一个断言失败的情况。 java.lang.ClassCircularityError 类循环依赖错误。在初始化一个类时,若检测到类之间循环依赖则抛出该异常。 java.lang.ClassFormatError 类格式错误。当Java虚拟机试图从一个文件读取Java类,而检测到该文件的内容不符合类的有效格式时抛出。 java.lang.Error 错误。是所有错误的基类,用于标识严重的程序运行问题。这些问题通常描述一些不应被应用程序捕获的反常情况。 java.lang.ExceptionInInitializerError 初始化程序错误。当执行一个类的静态初始化程序的过程,发生了异常时抛出。静态初始化程序是指直接包含于类的static语句段。 java.lang.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用其方法,但是又违反域或方法的可见性声明,则抛出该异常。 java.lang.IncompatibleClassChangeError 不兼容的类变化错误。当正在执行的方法所依赖的类定义发生了不兼容的改变时,抛出该异常。一般在修改了应用的某些类的声明定义而没有对整个应用重新编译而直接运行的情况下,容易引发该错误。 java.lang.InstantiationError 实例化错误。当一个应用试图通过Java的new操作符构造一个抽象类或者接口时抛出该异常. java.lang.InternalError 内部错误。用于指示Java虚拟机发生了内部错误。 java.lang.LinkageError 链接错误。该错误及其所有子类指示某个类依赖于另外一些类,在该类编译之后,被依赖的类改变了其类定义而没有重新编译所有的类,进而引发错误的情况。 java.lang.NoClassDefFoundError 未找到类定义错误。当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误。 java.lang.NoSuchFieldError 域不存在错误。当应用试图访问或者修改某类的某个域,而该类的定义没有该域的定义时抛出该错误。 java.lang.NoSuchMethodError 方法不存在错误。当应用试图调用某类的某个方法,而该类的定义没有该方法的定义时抛出该错误。 java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。 java.lang.StackOverflowError 堆栈溢出错误。当一个应用递归调用的层次太深而导致堆栈溢出时抛出该错误。 java.lang.ThreadDeath 线程结束。当调用Thread类的stop方法时抛出该错误,用于指示线程结束。 java.lang.UnknownError 未知错误。用于指示Java虚拟机发生了未知严重错误的情况。 java.lang.UnsatisfiedLinkError 未满足的链接错误。当Java虚拟机未找到某个类的声明为native方法的本机语言定义时抛出。 java.lang.UnsupportedClassVersionError 不支持的类版本错误。当Java虚拟机试图从读取某个类文件,但是发现该文件的主、次版本号不被当前Java

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值