从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
- 从0开始读java源码
- 从今天开始阅读Java源码吧!
- Java从0开始
- JAVA 从0开始 一
- JAVA 从0开始 二
- JAVA 从0开始 三
- JAVA 从0开始 四
- Java从0开始 1
- 从源码开始编译spring
- EventBus从源码开始探究
- Java 从0开始……
- java从0开始开发网站
- 从0开始复习java(1)
- 从0开始复习java(2)
- 从0开始复习java(3)
- java关于IO从0开始【第一节】
- Java 大堆排序从0开始
- JAVA 从注释开始
- 10分钟学会在windows-Linux下设置ASP.Net Core开发环境并部署应用
- linux下ssh连接不上
- poI导excel
- slaltstack入门
- 小程序https Android (安卓) 可以发请求,IOS (苹果)发请求失败问题
- 从0开始读java源码
- 浅析栈区和堆区内存分配的区别
- 【练习赛补题】问题 E: 花生采摘 【模拟】
- ListView添加加载动画
- 折半(二分查找)中,使用int mid = low+((high-low)>>>1)的原因
- ionic3 — 标题居中以及添加button的方法,修改图标大小
- LCP与NCP
- speex与webrtc回声消除小结
- (记录合并)union和union all 的区别