从0开始读java源码

来源:互联网 发布:在淘宝上买东西的流程 编辑:程序博客网 时间:2024/05/29 04:16

1 Java.lang

1.1 Object

1.2 Serializable

1.3 String

1、  String 是由char数组构成的,声明一个Stringa=”abc”;实际的存储是char[] a={a,b,c},长度是3,永远固定死

2、  String代码如下

@Test
public void test1() {
    String str1 = "java";
    String str2 = "java";
    String str3 = "android";
    String str4 ="javaandroid";
    String str5 = "java" +"android";
    String str6 = str1 + str3;
    String str7 = newString("java");
    String str8 = "JAVA";
    println(str1 == str2);//true
    println(str1 == str7);//false
    println(str4 == str5);//true
    println(str4 == str6);//false
    println(str1.equals(str7));//true
   println(str1.equalsIgnoreCase(str8));//true
}

 

1.4 Char

1.5 Long

 

1.6 Integer

1.7 Arrays

代码如下

    int[] intArray = { 1, 2, 3, 4, 5 };String intArrayString = Arrays.toString(intArray);println(intArrayString);String[] stringArray = { "a", "b", "c", "d", "e" };ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(stringArray));println(arrayList);

部分源码

    public static String toString(int[] a) {    if (a == null)        return "null";    int iMax = a.length - 1;    if (iMax == -1)        return "[]";    StringBuilder b = new StringBuilder();    b.append('[');    for (int i = 0; ; i++) {        b.append(a[i]);        if (i == iMax)            return b.append(']').toString();        b.append(", ");    }}

 

1.7.1 功能设计

 

2 Java.util

2.1 Collection

List集成Collection,声明的方法如下

boolean

add(E e)
确保此 collection 包含指定的元素(可选操作)。

boolean

addAll(Collection<? extends E> c)
将指定 collection 中的所有元素都添加到此 collection中(可选操作)。

void

clear()
移除此 collection 中的所有元素(可选操作)。

boolean

contains(Object o)
如果此 collection 包含指定的元素,则返回true

boolean

containsAll(Collection<?> c)
如果此 collection 包含指定 collection中的所有元素,则返回true

boolean

equals(Object o)
比较此 collection 与指定对象是否相等。

int

hashCode()
返回此 collection 的哈希码值。

boolean

isEmpty()
如果此 collection 不包含元素,则返回true

Iterator<E>

iterator()
返回在此 collection 的元素上进行迭代的迭代器。

boolean

remove(Object o)
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。

boolean

removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection中的所有元素(可选操作)。

boolean

retainAll(Collection<?> c)
仅保留此 collection 中那些也包含在指定 collection的元素(可选操作)。

int

size()
返回此 collection 中的元素数。

Object[]

toArray()
返回包含此 collection 中所有元素的数组。

<T> T[]

toArray(T[] a)
返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

 

2.2 Set

2.3 HashSet

2.4 Map

2.5 HashMap

2.6 List

2.7 ArrayList

1、ArrayList里面存储了一个Object[],用于存储数据,当放入一下新的数据时,变重新声明一个数组,所以效率ArrayList的效率比数组低。

2.8 Queue

Deque接口集成了Queue,ArrayDeque实现了Deque,示例代码如下

@Test
public void test7() {
    Deque<String> deque = new ArrayDeque<>();
    deque.add("str1");
    deque.add("str2");
    deque.add("str3");
    deque.add("str4");
    println(deque.getFirst());
    println(deque.peek());
    println(deque.poll());
    println(deque.pop());
    println(deque.getFirst());
    println(deque.pollLast());
    println(deque.getLast());
}

2.9 Deque

boolean

add(E e)
将指定元素插入此双端队列所表示的队列(换句话说,此双端队列的尾部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用空间,则抛出IllegalStateException

void

addFirst(E e)
将指定元素插入此双端队列的开头(如果可以直接这样做而不违反容量限制)。

void

addLast(E e)
将指定元素插入此双端队列的末尾(如果可以直接这样做而不违反容量限制)。

boolean

contains(Object o)
如果此双端队列包含指定元素,则返回 true

Iterator<E>

descendingIterator()
返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。

E

element()
获取,但不移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。

E

getFirst()
获取,但不移除此双端队列的第一个元素。

E

getLast()
获取,但不移除此双端队列的最后一个元素。

Iterator<E>

iterator()
返回以恰当顺序在此双端队列的元素上进行迭代的迭代器。

boolean

offer(E e)
将指定元素插入此双端队列所表示的队列(换句话说,此双端队列的尾部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用的空间,则返回false

boolean

offerFirst(E e)
在不违反容量限制的情况下,将指定的元素插入此双端队列的开头。

boolean

offerLast(E e)
在不违反容量限制的情况下,将指定的元素插入此双端队列的末尾。

E

peek()
获取,但不移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null

E

peekFirst()
获取,但不移除此双端队列的第一个元素;如果此双端队列为空,则返回 null

E

peekLast()
获取,但不移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null

E

poll()
获取并移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素);如果此双端队列为空,则返回 null

E

pollFirst()
获取并移除此双端队列的第一个元素;如果此双端队列为空,则返回 null

E

pollLast()
获取并移除此双端队列的最后一个元素;如果此双端队列为空,则返回 null

E

pop()
从此双端队列所表示的堆栈中弹出一个元素。

void

push(E e)
将一个元素推入此双端队列所表示的堆栈(换句话说,此双端队列的头部),如果可以直接这样做而不违反容量限制的话;如果成功,则返回 true,如果当前没有可用空间,则抛出IllegalStateException

E

remove()
获取并移除此双端队列所表示的队列的头部(换句话说,此双端队列的第一个元素)。

boolean

remove(Object o)
从此双端队列中移除第一次出现的指定元素。

E

removeFirst()
获取并移除此双端队列第一个元素。

boolean

removeFirstOccurrence(Object o)
从此双端队列移除第一次出现的指定元素。

E

removeLast()
获取并移除此双端队列的最后一个元素。

boolean

removeLastOccurrence(Object o)
从此双端队列移除最后一次出现的指定元素。

int

size()
返回此双端队列的元素数。

 

2.10 RuntimeException

2.11 BigInteger

2.12 BigDecimal

@Testpublic void test6(){    BigInteger big1 =BigInteger.valueOf(123456132);    BigDecimal big2 = new BigDecimal("2569.23127456123");    println(big1);    println(big2);    println(big2.round(new MathContext(5)));    println(big2.setScale(4,  RoundingMode.HALF_UP));    Double dou1 = 2.5535;    DecimalFormat df = new DecimalFormat("#.000");    println(df.format(dou1));}

 

2.13 Math

 

3 Java原生注解

Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。
注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。

元注解是指注解的注解。包括  @Retention @Target @Document @Inherited四种。

3.1 Retention

1 @Retention: 定义注解的保留策略

2 @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中,在class字节码文件中不包含

3 @Retention(RetentionPolicy.CLASS)     // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,

4 @Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在,在运行时可以通过反射获取到

 

3.2 Target注解

@Target:定义注解的作用目标

其定义的源码为: 

1.  @Documented  

2.  @Retention(RetentionPolicy.RUNTIME)  

3.  @Target(ElementType.ANNOTATION_TYPE)  

4.  public @interface Target {  

5.      ElementType[] value();  

6.  }  

@Target(ElementType.TYPE)   //接口、类、枚举、注解

@Target(ElementType.FIELD) //字段、枚举的常量

@Target(ElementType.METHOD) //方法

@Target(ElementType.PARAMETER) //方法参数

@Target(ElementType.CONSTRUCTOR)  //构造函数

@Target(ElementType.LOCAL_VARIABLE)//局部变量

@Target(ElementType.ANNOTATION_TYPE)//注解

@Target(ElementType.PACKAGE) ///包   

 由以上的源码可以知道,他的elementType 可以有多个,一个注解可以为类的,方法的,字段的等等

3.3 Documented

@Documented:说明该注解将被包含在javadoc中

 

3.4 @Interface

4 Spring