Skip to content

Commit 61746b1

Browse files
committed
commit
0 parents  commit 61746b1

763 files changed

Lines changed: 34915 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# 我的 Java 学习笔记
2+
3+
笔记内容主要是对一些基础特性和编程细节进行总结整理,适合了解 Java 基础语法,想进一步深入学习的人
4+
5+
**博客讲解****源码实例**,采用 maven 构建,分模块学习,涉及反射,代理,多线程,IO,集合类等核心知识。
6+
不定时进行调整和补充,需要关注更新的请 watch、star、fork
7+
-----
8+
# 仓库目录
9+
10+
**点击相应的模块能看到每个目录的说明文档**
11+
12+
- [blogs](/blogs):博客文档
13+
- [java-base](/java-base):Java 基础巩固模块的 Java 源码
14+
- [java-multithread](/java-multithread):多线程模块的 Java 源码
15+
- [java-container](/java-container):容器类模块的 Java 源码
16+
- [java-io](/java-io):IO 模块的 Java 源码
17+
- [java-jvm](/java-jvm): JVM 模块的 Java 源码
18+
- [java8](/java8): Java 8 模块的源码
19+
20+
21+
# 博客文档
22+
23+
如果你只是单纯要阅读的话,建议移步 CSDN 或者 oschina 上观看,访问速度快很多:
24+
25+
>* CSDN:[我的java&javaweb学习笔记(汇总)](http://blog.csdn.net/h3243212/article/details/50659471)
26+
>* oschina:[我的java&javaweb学习笔记(汇总)](http://my.oschina.net/brianway/blog/614355)
27+
28+
29+
**博客目录**
30+
31+
- [Java SE](/blogs/javase)
32+
- [java基础巩固笔记(1)-反射.md](/blogs/javase/java基础巩固笔记(1)-反射.md)
33+
- [java基础巩固笔记(2)-泛型.md](/blogs/javase/java基础巩固笔记(2)-泛型.md)
34+
- [java基础巩固笔记(3)-类加载器.md](/blogs/javase/java基础巩固笔记(3)-类加载器.md)
35+
- [java基础巩固笔记(4)-代理.md](/blogs/javase/java基础巩固笔记(4)-代理.md)
36+
- [java基础巩固笔记(4)-实现AOP功能的封装与配置的小框架.md](/blogs/javase/java基础巩固笔记(4)-实现AOP功能的封装与配置的小框架.md)
37+
- [java基础巩固笔记(5)-多线程之传统多线程.md](/blogs/javase/java基础巩固笔记(5)-多线程之传统多线程.md)
38+
- [java基础巩固笔记(5)-多线程之共享数据.md](/blogs/javase/java基础巩固笔记(5)-多线程之共享数据.md)
39+
- [java基础巩固笔记(5)-多线程之线程并发库.md](/blogs/javase/java基础巩固笔记(5)-多线程之线程并发库.md)
40+
- [java基础巩固笔记(6)-注解.md](/blogs/javase/java基础巩固笔记(6)-注解.md)
41+
- [Java Web](/blogs/javaweb)
42+
- [javaweb入门笔记(1)-Tomcat.md](/blogs/javaweb/javaweb入门笔记(1)-Tomcat.md)
43+
- [javaweb入门笔记(2)-http入门.md](/blogs/javaweb/javaweb入门笔记(2)-http入门.md)
44+
- [javaweb入门笔记(3)-Servlet.md](/blogs/javaweb/javaweb入门笔记(3)-Servlet.md)
45+
- [javaweb入门笔记(4)-request和response.md](/blogs/javaweb/javaweb入门笔记(4)-request和response.md)
46+
- [javaweb入门笔记(5)-cookie和session.md](/blogs/javaweb/javaweb入门笔记(5)-cookie和session.md)
47+
- [javaweb入门笔记(6)-JSP技术.md](/blogs/javaweb/javaweb入门笔记(6)-JSP技术.md)
48+
49+
50+
-----
51+
52+
# TODO
53+
54+
计划将这个仓库进行重构,逐步扩充并实现下面的功能。
55+
56+
* [x] 整理成 maven 的结构,使用聚合和继承特性(2016.4.12 完成)
57+
* [ ] 原有的 Java SE 部分代码重构为 java-base 模块,并逐步上传代码
58+
* [x] 多线程部分使用 java-multithread 模块(2016.4.17 完成雏形)
59+
* [ ] 容器类部分使用模块 java-container
60+
* [ ] IO 部分使用模块 java-io
61+
* [x] Java 虚拟机相关部分使用模块 java-jvm(2017.3.20 完成雏形)
62+
* [x] Java 8 新特性使用模块 java8(2017.3.29 完成)
63+
64+
65+
-----
66+
67+
# 联系作者
68+
69+
Email: 13051015619@163.com
70+
71+
-----
72+
73+
# Lisence
74+
75+
Lisenced under [Apache 2.0 lisence](http://opensource.org/licenses/Apache-2.0)

blogs/README.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# 博客
2+
3+
参考资料:
4+
5+
>* CSDN:[我的java&javaweb学习笔记(汇总)](http://blog.csdn.net/h3243212/article/details/50659471)
6+
>* oschina:[我的java&javaweb学习笔记(汇总)](http://my.oschina.net/brianway/blog/614355)
7+
8+
9+
# 目录
10+
11+
- [javase](/blogs/javase)
12+
- [java基础巩固笔记(1)-反射.md](/blogs/javase/java基础巩固笔记(1)-反射.md)
13+
- [java基础巩固笔记(2)-泛型.md](/blogs/javase/java基础巩固笔记(2)-泛型.md)
14+
- [java基础巩固笔记(3)-类加载器.md](/blogs/javase/java基础巩固笔记(3)-类加载器.md)
15+
- [java基础巩固笔记(4)-代理.md](/blogs/javase/java基础巩固笔记(4)-代理.md)
16+
- [java基础巩固笔记(4)-实现AOP功能的封装与配置的小框架.md](/blogs/javase/java基础巩固笔记(4)-实现AOP功能的封装与配置的小框架.md)
17+
- [java基础巩固笔记(5)-多线程之传统多线程.md](/blogs/javase/java基础巩固笔记(5)-多线程之传统多线程.md)
18+
- [java基础巩固笔记(5)-多线程之共享数据.md](/blogs/javase/java基础巩固笔记(5)-多线程之共享数据.md)
19+
- [java基础巩固笔记(5)-多线程之线程并发库.md](/blogs/javase/java基础巩固笔记(5)-多线程之线程并发库.md)
20+
- [java基础巩固笔记(6)-注解.md](/blogs/javase/java基础巩固笔记(6)-注解.md)
21+
- [javaweb](/blogs/javaweb)
22+
- [javaweb入门笔记(1)-Tomcat.md](/blogs/javaweb/javaweb入门笔记(1)-Tomcat.md)
23+
- [javaweb入门笔记(2)-http入门.md](/blogs/javaweb/javaweb入门笔记(2)-http入门.md)
24+
- [javaweb入门笔记(3)-Servlet.md](/blogs/javaweb/javaweb入门笔记(3)-Servlet.md)
25+
- [javaweb入门笔记(4)-request和response.md](/blogs/javaweb/javaweb入门笔记(4)-request和response.md)
26+
- [javaweb入门笔记(5)-cookie和session.md](/blogs/javaweb/javaweb入门笔记(5)-cookie和session.md)
27+
- [javaweb入门笔记(6)-JSP技术.md](/blogs/javaweb/javaweb入门笔记(6)-JSP技术.md)
Lines changed: 178 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,178 @@
1+
# java基础巩固笔记(1)-反射
2+
3+
标签: java
4+
5+
---
6+
7+
**Contents**
8+
9+
- [java基础巩固笔记(1)-反射](#java基础巩固笔记1-反射)
10+
- [反射基本使用](#反射基本使用)
11+
- [数组的反射](#数组的反射)
12+
- [配置文件加载](#配置文件加载)
13+
- [内省(Instropector) & JavaBean](#内省instropector--javabean)
14+
15+
16+
17+
---
18+
19+
20+
**反射:将类的属性和方法映射成相应的类。**
21+
22+
## 反射基本使用
23+
24+
获取Class类的三种方法:
25+
26+
- 类名.class
27+
- 对象名.getClass()
28+
- Class.forName("要加载的类名")
29+
30+
根据API写就行了,大致流程就是:
31+
32+
- 用上述三种方式之一获取特定类的`Class`类,即该类对应的字节码
33+
- 调用`Class`对象的`getConstructor(Class<?>... parameterTypes)`获取构造方法对象
34+
- 调用是构造方法类`Constructor``newInstance(Object... initargs)`方法新建对象
35+
- 调用`Class`对象的`getMethod(String name, Class<?>... parameterTypes)`获取方法对象
36+
- 调用方法对象类`Method``invoke(Object obj, Object... args)`方法,调用对象上相应方法
37+
38+
*用方法的参数类型唯一标识一个方法,依据:方法的重载*
39+
40+
41+
## 数组的反射
42+
下面这个例子主要说明几点:
43+
44+
- 对于元素同类型的数组,同维数组,class一样
45+
- 不同维,class不同
46+
- 不同维的,父类都是Object,一样
47+
- 基本类型一维数组不能直接转换为Object[]
48+
- `java.util.Arrays``asList`方法API看看
49+
50+
```java
51+
public class ReflectTest {
52+
public static void main(String[] args) {
53+
int [] a1 = new int[]{1,2,3};
54+
int [] a2 = new int[5];
55+
int [][] a3 = new int[2][3];
56+
System.out.println(a1.getClass() == a2.getClass());//true
57+
System.out.println(a1.getClass());//class [I
58+
System.out.println(a3.getClass());//class [[I
59+
System.out.println(a1.getClass().getSuperclass() == a3.getClass().getSuperclass());//true
60+
System.out.println(a2.getClass().getSuperclass());//class java.lang.Object
61+
62+
//下句编译不通过:Error:(15, 42) java: 不可比较的类型: java.lang.Class<capture#1, 共 ? extends int[]>和java.lang.Class<capture#2, 共 ? extends int[][]>
63+
//System.out.println(a1.getClass() == a3.getClass());
64+
65+
Object []b3 = a3;//通过
66+
//下句编译不通过 Error:(17, 24) java: 不兼容的类型: int[]无法转换为java.lang.Object[]
67+
//Object [] b1 = a1;
68+
69+
String s1 = "abc";
70+
System.out.println(Arrays.asList(a1));//[[I@1540e19d]
71+
System.out.println(Arrays.asList(s1));//[abc]
72+
}
73+
}
74+
```
75+
76+
77+
78+
输出:
79+
80+
```
81+
true
82+
class [I
83+
class [[I
84+
true
85+
class java.lang.Object
86+
[[I@1540e19d]
87+
[abc]
88+
```
89+
90+
乱入:
91+
hashcode与内存泄露问题
92+
参考java api:
93+
94+
>* hashcode一旦生成,不要变
95+
>* 对象equals方法返回true,则hashcode要一致
96+
>* 反之,equals方法返回false,hashcode不一定互异
97+
98+
如果参与hashcode计算的成员变量中途发生变化,则后面remove时失败,造成内存泄露
99+
100+
101+
----
102+
103+
## 配置文件加载
104+
105+
- 类加载器加载只读配置文件
106+
107+
`类名.class.getClassLoader().getResourceAsStream(str);`
108+
109+
- 类名.class.getResourceAsStream(str),实质还是调用类加载器。
110+
源码截取(java.lang包下的Class.java):
111+
112+
```java
113+
public InputStream getResourceAsStream(String name) {
114+
name = resolveName(name);
115+
ClassLoader cl = getClassLoader0();
116+
if (cl==null) {
117+
// A system class.
118+
return ClassLoader.getSystemResourceAsStream(name);
119+
}
120+
return cl.getResourceAsStream(name);
121+
}
122+
```
123+
124+
关于路径str,写法有点讲究。
125+
126+
- 不加斜杠,相对路径:
127+
`str = "config.properties";`
128+
- 加斜杠,从classpath的根路径找:
129+
`str = "/org/iot/ui/config.properties";`
130+
131+
*以前编译java代码时,有些`conf/`文件夹还要添加进依赖或者标记成source文件夹,里面明明都是xml文件,没Java源码。从这里,我现在知道了,是使用反射加载配置文件的缘故*
132+
133+
---
134+
135+
## 内省(Introspector) & JavaBean
136+
JavaBean读取属性x的值的流程:变大写、补前缀、获取方法。
137+
138+
```
139+
"x"-->"X"-->"getX"-->"MethodGetX"
140+
```
141+
142+
- 自己用内省操作
143+
144+
我目前没用上,所以不贴代码了,只附上核心类
145+
146+
简单实现:
147+
使用`java.beans.PropertyDescriptor`
148+
149+
麻烦实现:
150+
使用`java.beans.Introspector`类,遍历`getBeanInfo`方法的返回值
151+
152+
**JavaBean必须有一个不带参数的构造函数**
153+
154+
- 使用BeanUtils工具包
155+
156+
- 字符串和整数转换(对比(PropertyUtils)
157+
- 属性级联操作
158+
- 操作map
159+
160+
161+
162+
163+
164+
165+
166+
167+
168+
169+
170+
171+
172+
173+
174+
175+
176+
177+
178+

0 commit comments

Comments
 (0)