java考点解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
1.字符串

1.tostring
getClass().getName() + '@' + Integer.toHexString(hashCode())
Integer.toHexString(hashCode())代表将对象的哈希值用16进制表示
2.关于String
1.是一种内容不可辨别的对象
2.直接可以用“。。。” 可变类型
一.判等
“==”除非两个引用变量引用了同一个对象,返回ture,否则false.
"equals"只判断字符串内容是否一样,一样ture,否则false.
①包含功能:contains(substring);
indexof(substring);
lastIndexof(substring);
Startswith(substring);
endsWith(substring);
②调整功能:
trim将字符串中的首尾空白字符去掉
③取字符
subString
④转换大小写
toUppercase:跳大写
toLowercase:跳小写
⑤将串中的字符转换为字符数组
toCharArray
其他:split.replace.String s=valueOf(123);
因为串不可变,如果涉及到的程序需要频繁更新,那种用Stringc操作的方式不是最好方案
二.StringBulider不涉及到线程安全/StringBuffer多线程安全的
在内存中开辟一块缓存区,用于存放字符串信息可以随时调整
2.数组
1.Java中按照不同存储方式不同,可以将数据分为两种
a.值类型: 存放数据的信息只需要块内存即可。
b.引用类型(对象):需要两块内存来配合
在栈上,存放该对象的引用变量
在堆上,存放该数值的引用变量,堆上才是该对象的实际数据
2.type [] arr 推荐定义数组方式
二维数组定义方式
type arr[][]=静态初始化的列表
例:int arr[][]={{1,2,3,4,},{5,6,7,8},{9,10,11,12},{1,2}}
3.foreach 增强循环
for(type a:arr)
{
将arr中每个元素,依次赋值给a,通过a来读取该数组的每个元素
}

3.异常处理
系统定义一个throwable类,该类用于派生各种出错
该类有两个子类
1.Error,是错误类,用户没办法处理的出错。
用户也不用做任何处理. 例如递归调用的栈溢出错误,则需要程序员去规避
2.Exception异常
a.非受检异常
程序员在编程时,可以选择处理或不处理
如果用户不处理,该异常发生时,JVM就会直接终止程序
-NullPointerException:空引用异常
b.受检异常,程序员必须处理
-IOException;输入输出读写异常
-FileNotFoundException:文件未找到异常
-SQLException ;数据库操作异常
如果程序员想要处理异常,则需要用如下的语句来:
try{
A;
}
catch(XXXException xe)
{
B1;
}
catch(YYYException ye)
{
B2;
}
catch(ZZZException ze)
{
B3;
}
finally
{
C;
}
1,上面的语句执行过程是:
依次执行A.如果有一异常,跳转匹配catch分支,匹配成功则执行Bi分支,完成后执行final
2.XXXException,YYYException,ZZZException
异常必须是从细到粗的顺序(子类到父类)
3.异常处理的原则:
①:谁调用,谁处理
②:try .....catch....finally立刻去处理
③:用throw或者throws向上抛
throw是在需要抛出异常时直接抛出
throws是在函数的头部声明,该函数会抛出某种异常对象。

4.继承中同名函数解决方法
(1.子类继承父类,实现接口,父类和接口有同名方法
子类直接继承父类和实现接口不实现接口方法不报错,说明这种情况下默认父类实现该方法)

2.一个类实现多个接口,而多个接口中出现同名方法(需要看同名方法的返回值是否相同)
1.如果该同名方法的返回值也一样,即同名方法的方法名、参数名、参数个数、返回值都一样,那么该类只需要实现其中一个方法就可以了。
2.如果多个接口有同名方法,但是它们的返回值不一样,那么需要分别实现返回值不同的同名方法。如果只实现一个是无法编译的。
3. 创建一个内部类

5.static关键字
stactic是Java类的重要关键字;
1.static是类的成员,由该类的所有对象共享,在系统中只有一个数据
2.static的访问可见性问题
非静态的成员声明周期只从new开始,到系统自动回收,静态的成员声明和程序共生死
静态的方法可以访问非静态的成员?不可以 该非静态的对象可能还没有相应的对象产生
非静态的方法可以访问静态成员?可以 (非静态)对象方法静态数据已存在

6.集合类
set也是继承自collection的另一个接口
1.无序
2.不能存放重复的元素
要在set集合中,对每个元素做到恰当处理
1.集合中对象的元素显示,需要重载对象类中toString方法
使用sout打印集合时,系统会调用对象的Tosting进行显示
系统自带的tostring的返回信息如下
public String toString() {
return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
}
2.equal()用于比较两个对象是否相等,系统提供的方法
遵守5条规律:
a.自反律
b.对称律
c.传递律
d.一致性
e.非空对象和NULL比较返回false
7.实现集合元素的比较相关
在set中,如何判断某个对象是否具有相同的hashcode
1.是否具有hashcode
2.否则调用equal()判断重复
需要定义排序方式
2种方式
1.继承comparator类
可以定制多个排序标准
2.实现Comparable接口
只有一个排序标准
8.逆波兰运算
1.逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)
2.基础支持 出栈入栈+操作符

9.输入输出流
/**
* 缓冲字节输入流
* BufferedInputStream
* @throws Exception
*/
public static void testBufferedInputStream() throws Exception{
//文件字节输入流对象
FileInputStream in = new FileInputStream("D:\\testdemo\\demo\\src\\day13\\tt.txt");

//把文件字节输入流放到缓冲字节输入流对象
BufferedInputStream br = new BufferedInputStream(in);

byte[] b = new byte[10];

int len = 0;

while((len = br.read(b)) != -1){
System.out.println(new String(b,0,len));
}

//关闭流的时候,本着一个最晚开的最早关,依次关
br.close();
in.close();
}

/**
* 缓冲字节输出流
* BufferedOutputStream
*/
public static void testBufferedOutputStream() throws Exception{
//创建字节输出流对象
FileOutputStream out = new FileOutputStream("D:\\testdemo\\demo\\src\\day13\\tt1.txt");

//把字节输出流对象放到缓冲字节输出流中
BufferedOutputStream bo = new BufferedOutputStream(out);

String s = "hello world";

bo.write(s.getBytes());//写到内存中

bo.flush();//刷到硬盘上

//关闭流的时候,本着一个最晚开的最早关,依次关
bo.close();
out.close();

}

10.socket编程
1.套接字(socket)是“open—write/read—close”模式的一种实现
2. Socket socket = new Socket("127.0.0.1", 5000);

new ClientInputThread(socket).start();
new ClientOutputThread(socket).start();

11.object类
1. clone()

保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。

2. getClass()

final方法,返回Class类型的对象,反射来获取对象。

3. toString()

该方法用得比较多,一般子类都有覆盖,来获取对象的信息。

4. finalize()

该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。

5. equals()

比较对象的内容是否相等

6. hashCode()

该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。

7. wait()

wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

调用该方法后当前线程进入睡眠状态,直到以下事件发生。

其他线程调用了该对象的notify方法。
其他线程调用了该对象的notifyAll方法。
其他线程调用了interrupt中断该线程。
时间间隔到了。
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。

8. notify()

该方法唤醒在该对象上等待的某个线程。

9. notifyAll()

该方法唤醒在该对象上等待的所有线程。