Repository navigation
Expand file tree
/
Copy pathatom.xml
More file actions
805 lines (606 loc) · 141 KB
/
Copy pathatom.xml
File metadata and controls
805 lines (606 loc) · 141 KB
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
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>秀秀专属</title>
<subtitle>秀秀的git博客</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://xu-github.github.io/"/>
<updated>2019-04-03T12:13:37.781Z</updated>
<id>https://xu-github.github.io/</id>
<author>
<name>徐秀芳</name>
<email>624428656@qq.com</email>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>【转】linq相关</title>
<link href="https://xu-github.github.io/2019/02/01/linq/"/>
<id>https://xu-github.github.io/2019/02/01/linq/</id>
<published>2019-02-01T02:30:16.000Z</published>
<updated>2019-04-03T12:13:37.781Z</updated>
<content type="html"><![CDATA[<p><strong>查询主体中的from…let…where片段</strong></p>
<p>可选的from…let…where部分是查询主体的第一部分,可以由任意数量的3个子句来组合–from子句、let子句和where子句。</p>
<p><strong>from子句</strong></p>
<p>查询表达式从必需的from子句开始,后面跟查询主体。主体本身可以从任何数量的其他from子句开始,每个from子句都指定了一个额外的源数据集合并引入了要在之后运算的迭代变量,所有from子句的语法和含义都一样。 </p>
<p>例:from子句示例</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div></pre></td><td class="code"><pre><div class="line">class Program</div><div class="line">{</div><div class="line"> static void Main()</div><div class="line"> {</div><div class="line"> var groupA=new[]{3,4,5,6};</div><div class="line"> var groupA=new[]{6,7,8,9};</div><div class="line"> var someInts=from a in groupA</div><div class="line"> from b in groupB</div><div class="line"> where a>4&&b<=8</div><div class="line"> select new{a,b,sum=a+b};//匿名类型对象</div><div class="line"> foreach(var a in someInts)</div><div class="line"> {</div><div class="line"> Console.WriteLine(a);</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p><strong>let子句</strong></p>
<p>let子句接受一个表达式的运算并且把它赋值给一个需要在其他运算中使用的标识符。let子句的语法如下:</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">let Identifier=Expression</div></pre></td></tr></table></figure>
<p>例:let子句示例</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div></pre></td><td class="code"><pre><div class="line">class Program</div><div class="line">{</div><div class="line"> static void Main()</div><div class="line"> {</div><div class="line"> var groupA=new[]{3,4,5,6};</div><div class="line"> var groupA=new[]{6,7,8,9};</div><div class="line"> var someInts=from a in groupA</div><div class="line"> from b in groupB</div><div class="line"> let sum=a+b //在新的变量中保存结果</div><div class="line"> where sum==12</div><div class="line"> select new{a,b,sum};</div><div class="line"> foreach(var a in someInts)</div><div class="line"> {</div><div class="line"> Console.WriteLine(a);</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p><strong>where子句</strong></p>
<p>where子句根据之后的运算来筛选指定项。<br>只要是在from…let…where部分中,查询表达式可以有多个where。</p>
<p>例:where子句示例</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div></pre></td><td class="code"><pre><div class="line">class Program</div><div class="line">{</div><div class="line"> static void Main()</div><div class="line"> {</div><div class="line"> var groupA=new[]{3,4,5,6};</div><div class="line"> var groupA=new[]{6,7,8,9};</div><div class="line"> var someInts=from a in groupA</div><div class="line"> from b in groupB</div><div class="line"> let sum=a+b </div><div class="line"> where sum>=11 ←条件1</div><div class="line"> where a==4 ←条件2</div><div class="line"> select new{a,b,sum};</div><div class="line"> foreach(var a in someInts)</div><div class="line"> {</div><div class="line"> Console.WriteLine(a);</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p><strong>orderby子句</strong></p>
<p>orderby子句根据表达式按顺序返回结果项。<br>orderby子句语法如下图。可选的ascending和descending关键字设置了排序方向。表达式通常是项的一个字段。该字段不一定非得是数值字段,也可以是字符串这样的可排序类型。</p>
<p>例:按照学生年龄排序</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div></pre></td><td class="code"><pre><div class="line">class Program</div><div class="line">{</div><div class="line"> static void Main()</div><div class="line"> {</div><div class="line"> var students=new[]</div><div class="line"> {</div><div class="line"> new{LName="Jones",FName="Mary",Age=19,Major="History"},</div><div class="line"> new{LName="Smith",FName="Bob",Age=20,Major="CompSci"},</div><div class="line"> new{LName="Fleming",FName="Carol",Age=21,Major="History"},</div><div class="line"> };</div><div class="line"> var query=from student in students</div><div class="line"> orderby student.Age</div><div class="line"> select student;</div><div class="line"> foreach(var s in query)</div><div class="line"> {</div><div class="line"> Console.WriteLine("{0},{1}: {2} - {3}",s.LName,s.FName,s.Age,s.Major);</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p><strong>group子句</strong></p>
<p>group子句把select的对象根据一些标准进行分组。例如,之前示例的学士数组,程序可以根据它们的主修课程进行分组。</p>
<ul>
<li>如果项包含在查询的结果中,它们就可以根据某个字段的值进行分组。作为分组依据的属性叫做<em>键</em>(key)</li>
<li>group子句返回的不是原始数据源中项的枚举,而是返回可以枚举已经形成的项的分组的可枚举类型</li>
<li>分组本身是可枚举类型,它们可以枚举实际的项</li>
</ul>
<p>例:根据学士的主修课程进行分组</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div></pre></td><td class="code"><pre><div class="line">using System;</div><div class="line">using System.Linq;</div><div class="line">class Program</div><div class="line">{</div><div class="line"> static void Main()</div><div class="line"> {</div><div class="line"> var students=new[]</div><div class="line"> {</div><div class="line"> new{LName="Jones",FName="Mary",Age=19,Major="History"},</div><div class="line"> new{LName="Smith",FName="Bob",Age=20,Major="CompSci"},</div><div class="line"> new{LName="Fleming",FName="Carol",Age=21,Major="History"},</div><div class="line"> };</div><div class="line"> var query=from s in students</div><div class="line"> group s by s.Major;</div><div class="line"> foreach(var s in query)</div><div class="line"> {</div><div class="line"> Console.WriteLine("{0}",s.Key);</div><div class="line"> foreach(var t in s)</div><div class="line"> {</div><div class="line"> Console.WriteLine(" {0},{1}",t.LName,t.FName);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p><strong>查询延续:into子句</strong></p>
<p>查询延续子句可以接受查询的一部分结果并赋予一个名字,从而可以在查询的另一部分中使用。 </p>
<p>例:连接groupA和groupB并命名为groupAandB</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div></pre></td><td class="code"><pre><div class="line">class Program</div><div class="line">{</div><div class="line"> static void Main()</div><div class="line"> {</div><div class="line"> var groupA=new[]{3,4,5,6};</div><div class="line"> var groupA=new[]{6,7,8,9};</div><div class="line"> var someInts=from a in groupA</div><div class="line"> join b in groupB on a equals b</div><div class="line"> into groupAandB</div><div class="line"> from c in groupAandB</div><div class="line"> select c;</div><div class="line"> foreach(var a in someInts)</div><div class="line"> {</div><div class="line"> Console.WriteLine(a);</div><div class="line"> }</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<h3 id="标准查询运算符"><a href="#标准查询运算符" class="headerlink" title="标准查询运算符"></a>标准查询运算符</h3><hr>
<p>标准查询运算符由一系列API方法组成,它能让我们查询任何.NET数组或集合。<br>标准查询运算符的重要特性如下:</p>
<ul>
<li>被查询的集合对象叫做序列,它必须实现<code>IEnumerable<T></code>接口,T是类型</li>
<li>标准查询运算符使用方法语法</li>
<li>一些运算符返回IEnumerable对象(或其他序列),而其他的一些运算符返回标量。返回标量的运算符立即执行,并返回一个值</li>
<li>很多操作都以一个谓词作为参数。谓词是一个方法,它以对象为参数,根据对象是否满足某条件而返回true或false</li>
</ul>
<p>例:Sum和Count运算符的使用</p>
<figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div></pre></td><td class="code"><pre><div class="line">class Program</div><div class="line">{</div><div class="line"> static int[] numbers=new int[]{2,4,6};</div><div class="line"> static void Main()</div><div class="line"> {</div><div class="line"> int total=numbers.Sum();</div><div class="line"> int howMany=number.Count();</div><div class="line"> Console.WriteLine("Total: {0},Count: {1}",total,howMany);</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p>转自:<a href="http://www.cnblogs.com/moonache/p/6552843.html" target="_blank" rel="external">http://www.cnblogs.com/moonache/p/6552843.html</a></p>
]]></content>
<summary type="html">
查询主体中的from… let… where片段可选的from… let… where部分是查询主体的第一部分,可以由任意数量的3个子句来组合–from子句、let子句和where子句。
</summary>
<category term=".net" scheme="https://xu-github.github.io/categories/net/"/>
<category term="linq" scheme="https://xu-github.github.io/tags/linq/"/>
<category term="sql" scheme="https://xu-github.github.io/tags/sql/"/>
<category term="db" scheme="https://xu-github.github.io/tags/db/"/>
<category term=".net" scheme="https://xu-github.github.io/tags/net/"/>
</entry>
<entry>
<title>【原创】SDK与 IDE等名词解释</title>
<link href="https://xu-github.github.io/2019/01/25/SDK&IDE/"/>
<id>https://xu-github.github.io/2019/01/25/SDK&IDE/</id>
<published>2019-01-25T09:00:16.000Z</published>
<updated>2019-04-03T12:12:37.661Z</updated>
<content type="html"><![CDATA[<p>全称 Software Development Kit ,软件开发工具包。<br>IDE:全称 Integrated Development,集成开发环境。<br>SDK是一个能够进行开发的环境,是一个基本的环境,可以添加一些其他的功能,添加插件帮助实现想要的功能。<br>这种将想要的插件安装在SDK上的环境称为IDE</p>
]]></content>
<summary type="html">
SDK:全称 Software Development Kit ,软件开发工具包。IDE:全称 Integrated Development,集成开发环境。SDK是一个能够进行开发的环境,是一个基本的环境,可以添加一些其他的功能,添加插件帮助实现想要的功能。这种将想要的插件安装在SDK上的环境称为IDE
</summary>
<category term="名词解释" scheme="https://xu-github.github.io/categories/%E5%90%8D%E8%AF%8D%E8%A7%A3%E9%87%8A/"/>
<category term="SDK" scheme="https://xu-github.github.io/tags/SDK/"/>
<category term="IDE" scheme="https://xu-github.github.io/tags/IDE/"/>
</entry>
<entry>
<title>【原创】BigDecimal判断两值是否相等</title>
<link href="https://xu-github.github.io/2018/12/11/BigDecimal/"/>
<id>https://xu-github.github.io/2018/12/11/BigDecimal/</id>
<published>2018-12-11T09:10:16.000Z</published>
<updated>2019-04-03T12:48:52.748Z</updated>
<content type="html"><![CDATA[<p>1、用compareTo方法</p>
<p>用compareTo方法来判断BigDecimal两值是否相等,判断结果为0则相等,否则不等,如下:</p>
<p>if(amt == null|| amt.compareTo(BigDecimal.ZERO)==0){}</p>
<p>2、不能用==</p>
<p>因为BigDecimal不是基本类型,它只是把你的数值(基本类型)封装到了intCompact(Long类型)这个属性中,是对象类型,==只能比较基本类型。</p>
<p>3、不能用equals方法</p>
<p>equals方法被BigDecimal重写了,源码如下<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div></pre></td><td class="code"><pre><div class="line"><span class="meta">@Override</span></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">boolean</span> <span class="title">equals</span><span class="params">(Object x)</span> </span>{</div><div class="line"> <span class="keyword">if</span> (!(x <span class="keyword">instanceof</span> BigDecimal))</div><div class="line"> <span class="keyword">return</span> <span class="keyword">false</span>;</div><div class="line"> BigDecimal xDec = (BigDecimal) x;</div><div class="line"> <span class="keyword">if</span> (x == <span class="keyword">this</span>)</div><div class="line"> <span class="keyword">return</span> <span class="keyword">true</span>;</div><div class="line"> <span class="keyword">if</span> (scale != xDec.scale)</div><div class="line"> <span class="keyword">return</span> <span class="keyword">false</span>;</div><div class="line"> <span class="keyword">long</span> s = <span class="keyword">this</span>.intCompact;</div><div class="line"> <span class="keyword">long</span> xs = xDec.intCompact;</div><div class="line"> <span class="keyword">if</span> (s != INFLATED) {</div><div class="line"> <span class="keyword">if</span> (xs == INFLATED)</div><div class="line"> xs = compactValFor(xDec.intVal);</div><div class="line"> <span class="keyword">return</span> xs == s;</div><div class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (xs != INFLATED)</div><div class="line"> <span class="keyword">return</span> xs == compactValFor(<span class="keyword">this</span>.intVal);</div><div class="line"></div><div class="line"> <span class="keyword">return</span> <span class="keyword">this</span>.inflated().equals(xDec.inflated());</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure></p>
<p>从上面代码中,其中有一个判断scale 值是否相等的过程,scale 这个值是BigDecimal的私有属性,表示BigDecimal小数点位数,所以equals判断两个值是否相等,会先判断这两个数值是否小数点位数是否相等,然后在判断大小是否相等。</p>
]]></content>
<summary type="html">
1、用compareTo方法,用compareTo方法来判断BigDecimal两值是否相等,判断结果为0则相等,否则不等,如下:if(amt == null|| amt.compareTo(BigDecimal.ZERO)==0){}
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
<category term="BigDecimal" scheme="https://xu-github.github.io/tags/BigDecimal/"/>
</entry>
<entry>
<title>【原创】ireport主子报表传参问题</title>
<link href="https://xu-github.github.io/2018/12/11/ireport/"/>
<id>https://xu-github.github.io/2018/12/11/ireport/</id>
<published>2018-12-11T02:17:16.000Z</published>
<updated>2019-04-03T12:53:30.816Z</updated>
<content type="html"><![CDATA[<p><img src="/uploads/ireport/1.png" alt="原创】ireport主子报表传参问题"><br>主子报表相关几个问题小结,选中子报表,在属性中看到上图</p>
<p>1、子报表向主报表传参,在Return Values配置</p>
<p>2、主报表向子报表传参,在Parameters中配置</p>
<p>3、Data Source Expression中配置主报表向子报表传要显示的数据源,subData为数据集名称</p>
<p>new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{subData})</p>
]]></content>
<summary type="html">
SDK:1、子报表向主报表传参,在Return Values配置;2、主报表向子报表传参,在Parameters中配置;3、Data Source Expression中配置主报表向子报表传要显示的数据源,subData为数据集名称
</summary>
<category term="ireport" scheme="https://xu-github.github.io/categories/ireport/"/>
<category term="ireport" scheme="https://xu-github.github.io/tags/ireport/"/>
<category term="报表" scheme="https://xu-github.github.io/tags/%E6%8A%A5%E8%A1%A8/"/>
</entry>
<entry>
<title>【原创】删除 List 元素的几种方法</title>
<link href="https://xu-github.github.io/2018/09/25/delete-javalist/"/>
<id>https://xu-github.github.io/2018/09/25/delete-javalist/</id>
<published>2018-09-25T07:04:16.000Z</published>
<updated>2019-04-03T12:25:36.581Z</updated>
<content type="html"><![CDATA[<p>删除 List 中的元素会产生两个问题:<br>1、删除元素后 List 的元素数量会发生变化; </p>
<p>2、对 List 进行删除操作可能会产生并发问题; </p>
<p>现总结出五种可行方法</p>
<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div><div class="line">125</div><div class="line">126</div><div class="line">127</div><div class="line">128</div><div class="line">129</div><div class="line">130</div><div class="line">131</div><div class="line">132</div><div class="line">133</div><div class="line">134</div><div class="line">135</div><div class="line">136</div><div class="line">137</div><div class="line">138</div><div class="line">139</div><div class="line">140</div><div class="line">141</div><div class="line">142</div><div class="line">143</div><div class="line">144</div><div class="line">145</div><div class="line">146</div><div class="line">147</div><div class="line">148</div><div class="line">149</div><div class="line">150</div><div class="line">151</div><div class="line">152</div><div class="line">153</div><div class="line">154</div><div class="line">155</div><div class="line">156</div><div class="line">157</div><div class="line">158</div><div class="line">159</div><div class="line">160</div><div class="line">161</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">package</span> com.xxx.list;</div><div class="line"></div><div class="line"><span class="keyword">import</span> java.util.ArrayList;</div><div class="line"><span class="keyword">import</span> java.util.Iterator;</div><div class="line"><span class="keyword">import</span> java.util.List;</div><div class="line"><span class="keyword">import</span> java.util.concurrent.CopyOnWriteArrayList;</div><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">ArrayListRemove</span> </span>{</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</div><div class="line"> ArrayList<String> list = <span class="keyword">new</span> ArrayList<String>();</div><div class="line"> list.add(<span class="string">"aaa"</span>);</div><div class="line"> list.add(<span class="string">"bbb"</span>);</div><div class="line"> list.add(<span class="string">"bbb"</span>);</div><div class="line"> list.add(<span class="string">"ccc"</span>);</div><div class="line"> list.add(<span class="string">"ddd"</span>);</div><div class="line"> remove1(list, <span class="string">"bbb"</span>);</div><div class="line"></div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="function"><span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">print</span><span class="params">(List<String> list)</span></span>{</div><div class="line"> <span class="keyword">for</span> (String item : list) {</div><div class="line"> System.out.println(<span class="string">"列表值:"</span> + item);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 错误 </div><div class="line"> * java.lang.IndexOutOfBoundsException</div><div class="line"> * 由于int size = list.size();提前获取了 List 的大小,for 循环中删除了两个元素,导致出现数组越界问题。</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove11</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> <span class="keyword">int</span> size = list.size();</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i < size; i++){</div><div class="line"> String item = list.get(i);</div><div class="line"> <span class="keyword">if</span>(target.equals(item)){</div><div class="line"> list.remove(item);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 错误</div><div class="line"> *该方法解决了数组越界问题,但没有解决彻底删除数据的问题。List 删除元素的逻辑是将目标元素之后的元素往前移一个索引位置,最后一个元素置为 null,同时 size - 1;这也就解释了为什么第二个“bbb”没有被删除。</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove12</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i < list.size(); i++){</div><div class="line"> String item = list.get(i);</div><div class="line"> <span class="keyword">if</span>(target.equals(item)){</div><div class="line"> list.remove(item);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 正确</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove13</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> <span class="keyword">int</span> size = list.size();</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = size - <span class="number">1</span>; i >= <span class="number">0</span>; i--){</div><div class="line"> String item = list.get(i);</div><div class="line"> <span class="keyword">if</span>(target.equals(item)){</div><div class="line"> list.remove(item);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 正确</div><div class="line"> *remove13 与 remove14没有区别,但是 remove11 与 remove12 有区别,remove12 中每次for(int i = 0; i < list.size(); i++)执行都会计算 size 值,比较耗性能。</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove14</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = list.size() - <span class="number">1</span>; i >= <span class="number">0</span>; i--){</div><div class="line"> String item = list.get(i);</div><div class="line"> <span class="keyword">if</span>(target.equals(item)){</div><div class="line"> list.remove(item);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 错误</div><div class="line"> *java.lang.IndexOutOfBoundsException</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove15</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> <span class="keyword">int</span> size = list.size();</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i < size; i++){</div><div class="line"> String item = list.get(i);</div><div class="line"> <span class="keyword">if</span>(target.equals(item)){</div><div class="line"> list.remove(item--);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 正确</div><div class="line"> * List 删除元素的逻辑是将目标元素之后的元素往前移一个索引位置,先删除i减一向前移一位</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove16</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i = <span class="number">0</span>; i < list.size(); i++){</div><div class="line"> String item = list.get(i);</div><div class="line"> <span class="keyword">if</span>(target.equals(item)){</div><div class="line"> list.remove(item--);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 错误 底层为Iterator</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove21</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> <span class="keyword">for</span>(String item : list){</div><div class="line"> <span class="keyword">if</span>(target.equals(item)){</div><div class="line"> list.remove(item);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 正确</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove22</span><span class="params">(ArrayList<String> list, String target)</span> </span>{</div><div class="line"> <span class="keyword">final</span> CopyOnWriteArrayList<String> cowList = <span class="keyword">new</span> CopyOnWriteArrayList<String>(list);</div><div class="line"> <span class="keyword">for</span> (String item : cowList) {</div><div class="line"> <span class="keyword">if</span> (item.equals(target)) {</div><div class="line"> cowList.remove(item);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(cowList);</div><div class="line"> }</div><div class="line"> </div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 错误</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove31</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> Iterator<String> iter = list.iterator();</div><div class="line"> <span class="keyword">while</span> (iter.hasNext()) {</div><div class="line"> String item = iter.next();</div><div class="line"> <span class="keyword">if</span> (item.equals(target)) {</div><div class="line"> list.remove(item);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"> <span class="comment">/*</span></div><div class="line"> * 正确</div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">remove32</span><span class="params">(List<String> list, String target)</span></span>{</div><div class="line"> Iterator<String> iter = list.iterator();</div><div class="line"> <span class="keyword">while</span> (iter.hasNext()) {</div><div class="line"> String item = iter.next();</div><div class="line"> <span class="keyword">if</span> (item.equals(target)) {</div><div class="line"> iter.remove();</div><div class="line"> }</div><div class="line"> }</div><div class="line"> print(list);</div><div class="line"> }</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure>]]></content>
<summary type="html">
删除 List 中的元素会产生两个问题: 1、删除元素后 List 的元素数量会发生变化; 2、对 List 进行删除操作可能会产生并发问题;
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
<category term="List" scheme="https://xu-github.github.io/tags/List/"/>
</entry>
<entry>
<title>【转载】Eclipse快捷键 10个最有用的快捷键</title>
<link href="https://xu-github.github.io/2018/09/19/Eclipse-keymap/"/>
<id>https://xu-github.github.io/2018/09/19/Eclipse-keymap/</id>
<published>2018-09-19T03:22:16.000Z</published>
<updated>2019-04-03T12:48:15.786Z</updated>
<content type="html"><![CDATA[<p>Eclipse中10个最有用的快捷键组合 </p>
<p>一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。</p>
<p> <strong>1. ctrl+shift+r:打开资源</strong></p>
<p> 这可能是所有快捷键组合中最省时间的了。这组快捷键可以让你打开你的工作区中任何一个文件,而你只需要按下文件名或mask名中的前几个字母,比如applic*.xml。美中不足的是这组快捷键并非在所有视图下都能用。</p>
<p><img src="/uploads/eclipse/1.jpg" alt="【转】eclipse快捷键 10个最有用的快捷键"></p>
<p><strong>2. ctrl+o:快速outline</strong></p>
<p> 如果想要查看当前类的方法或某个特定方法,但又不想把代码拉上拉下,也不想使用查找功能的话,就用ctrl+o吧。它可以列出当前类中的所有方法及属性,你只需输入你想要查询的方法名,点击enter就能够直接跳转至你想去的位置。</p>
<p><img src="/uploads/eclipse/2.jpg" alt="【转】eclipse快捷键 10个最有用的快捷键"></p>
<p><strong>3. ctrl+e:快速转换编辑器</strong></p>
<p> 这组快捷键将帮助你在打开的编辑器之间浏览。使用ctrl+page down或ctrl+page up可以浏览前后的选项卡,但是在很多文件打开的状态下,ctrl+e会更加有效率。</p>
<p><img src="/uploads/eclipse/3.jpg" alt="eclipse快捷键 10个最有用的快捷键"></p>
<p><strong>4. ctrl+2,L:为本地变量赋值</strong></p>
<p> 开发过程中,我常常先编写方法,如Calendar.getInstance(),然后通过ctrl+2快捷键将方法的计算结果赋值于一个本地变量之上。 这样我节省了输入类名,变量名以及导入声明的时间。Ctrl+F的效果类似,不过效果是把方法的计算结果赋值于类中的域。</p>
<p> <strong>5. alt+shift+r:重命名</strong></p>
<p> 重命名属性及方法在几年前还是个很麻烦的事,需要大量使用搜索及替换,以至于代码变得零零散散的。今天的Java IDE提供源码处理功能,Eclipse也是一样。现在,变量和方法的重命名变得十分简单,你会习惯于在每次出现更好替代名称的时候都做一次重命名。要使 用这个功能,将鼠标移动至属性名或方法名上,按下alt+shift+r,输入新名称并点击回车。就此完成。如果你重命名的是类中的一个属性,你可以点击alt+shift+r两次,这会呼叫出源码处理对话框,可以实现get及set方法的自动重命名。</p>
<p> <strong>6. alt+shift+l以及alt+shift+m:提取本地变量及方法</strong></p>
<p> 源码处理还包括从大块的代码中提取变量和方法的功能。比如,要从一个string创建一个常量,那么就选定文本并按下alt+shift+l即可。如果同 一个string在同一类中的别处出现,它会被自动替换。方法提取也是个非常方便的功能。将大方法分解成较小的、充分定义的方法会极大的减少复杂度,并提 升代码的可测试性。</p>
<p> <strong>7. shift+enter及ctrl+shift+enter</strong></p>
<p> Shift+enter在当前行之下创建一个空白行,与光标是否在行末无关。Ctrl+shift+enter则在当前行之前插入空白行。</p>
<p> <strong>8. Alt+方向键</strong></p>
<p> 这也是个节省时间的法宝。这个组合将当前行的内容往上或下移动。在try/catch部分,这个快捷方式尤其好使。</p>
<p> <strong>9. ctrl+m</strong></p>
<p> 大显示屏幕能够提高工作效率是大家都知道的。Ctrl+m是编辑器窗口最大化的快捷键。</p>
<p> <strong>10. ctrl+.及ctrl+1:下一个错误及快速修改</strong></p>
<p> ctrl+.将光标移动至当前文件中的下一个报错处或警告处。这组快捷键我一般与ctrl+1一并使用,即修改建议的快捷键。新版Eclipse的修改建 议做的很不错,可以帮你解决很多问题,如方法中的缺失参数,throw/catch exception,未执行的方法等等。</p>
<p><img src="/uploads/eclipse/4.jpg" alt="eclipse快捷键 10个最有用的快捷键"></p>
<p>更多快捷键组合可在Eclipse按下ctrl+shift+L查看。</p>
<p>让我们按照使用频率来看看我最爱用的一些热键组合。(注:以下内容在Eclipse3.02及一上版本通过测试)</p>
<p>\1. <strong>Control-Shift-T: 打开类型(Open type)。</strong>如果你不是有意磨洋工,还是忘记通过源码树(source tree)打开的方式吧。用eclipse很容易打开接口的实现类的,按ctrl+t会列出接口的实现类列表</p>
<p>\2. <strong>Control-Shift-R: 打开资源(不只是用来寻找Java文件)。</strong>小提示:利用Navigator视图的黄色双向箭头按钮让你的编辑窗口和导航器相关联。这会让你打开的文件对应显示在导航器的层级结构中,这样便于组织信息。如果这影响了速度,就关掉它。</p>
<p>\3. <strong>F3: 打开申明(Open declaration)。</strong>或者,利用Declaration Tab(在Java视图模式下,选择Windows –> Show View – > Declaration)。当你选中代码中的一个方法,然后按这个按键,它会把整个方法在申明方框里显示出来。</p>
<p>\4. <strong>Alt-left arrow: 在导航历史记录(Navigation History)中后退。</strong>就像Web浏览器的后退按钮一样,在利用F3跳转之后,特别有用。(用来返回原先编译的地方)</p>
<p>\5. <strong>Alt-right arrow: 导航历史记录中向前。</strong></p>
<p>\6. <strong>Control-Q: 回到最后一次编辑的地方。</strong>这个快捷键也是当你在代码中跳转后用的。特别是当你钻的过深,忘记你最初在做什么的时候。</p>
<p>\7. <strong>Control-Shift-G: 在workspace中搜索引用(reference)。</strong>这 是重构的前提。对于方法,这个热键的作用和F3恰好相反。它使你在方法的栈中,向上找出一个方法的所有调用者。一个与此相关的功能是开启“标记”功能 (occurrence marking) 。选择Windows->Preferences->Java-> Editor-> Mark Occurrences,勾选选项。这时,当你单击一个元素的时候,代码中所有该元素存在的地方都会被高亮显示。我个人只使用“标记本地变量”(Mark Local Variables)。注意:太多的高亮显示会拖慢Eclipse。</p>
<p>\8. <strong>Control-Shift-F: CodeàJavaàPreferencesà根据代码风格设定重新格式化代码。</strong>我 们的团队有统一的代码格式,我们把它放在我们的wiki上。要这么做,我们打开Eclipse,选择Window Style,然后设置Code Formatter,Code Style和Organize Imports。利用导出(Export)功能来生成配置文件。我们把这些配置文件放在wiki上,然后团队里的每个人都导入到自己的Eclipse中。</p>
<p>\9. <strong>Control-O: 快速概要(quick outline)。</strong>通过这个快捷键,你可以迅速的跳到一个方法或者属性,只需要输入名字的头几个字母。</p>
<p>\10. <strong>Control-/: 对一行注释或取消注释。对于多行也同样适用。</strong></p>
<p>\11. <strong>Control-Alt-down arrow: 复制高亮显示的一行或多行。</strong></p>
<p>\12. <strong>Alt-down arrow: 将一行或多行向下移动。Alt-up arrow会向上移动。</strong></p>
<p>其他的热键在菜单里有。你可以通过按下Control-Shift-L(从3.1版本开始), 看到所有快捷键的列表。按下Control-Shift-L两次,会显示热键对话框(Keys Preferences dialog),你可以在这里自己设置热键。我欢迎你在Talkback部分发表你的Eclipse提示。</p>
<p><strong>其他的Eclipse窍门</strong></p>
<p>我总结了几个相关的小窍门:</p>
<p><strong>锁定命令行窗口</strong>:在命令行视图中(Window ->Show View ->Other ->Basic ->Console),试试看用滚动锁定按钮来锁定控制台输出不要滚屏。</p>
<p><strong>使用Ant视图</strong>: 在我的Java或Debug模式下,我喜欢显示出Ant视图,这样我就可以迅速的运行Ant任务。通过Window Ant可以找到该视图。把Ant视图放在屏幕的一角, 通过“添加编译文件(Addà Other à Show View à Buildfiles)”按钮来添加build.xml文件。在3.1版本中,甚至支持Ant调试脚本语言。</p>
<p><strong>自动遍历一个集合</strong>:for + Control-Space: 如果你还不知道,那么你应该记住Control-Space是自动完成功能。在Eclipse中,你还可以自动完成结构。在一个数组或集合范围内,试试看 输入“for”然后按下Control-Space键。Eclipse会问你你想要遍历哪一个集合然后自动完成循环代码。</p>
<p><strong>使用分级布局</strong>: 在包浏览视图(Package Explorer view)中默认的布局(扁平式)方式让我困惑,它把包的全名显示在导航树(navigation tree)中。我更喜欢我源码的包和文件系统视图,在Eclipse中叫做分级布局(Hierarchical Layout)。要切换到这种模式,点击包浏览视图中向下的按钮,选择布局(Layout),然后选择分级(Hierarchial)。</p>
<p><strong>一次显示多个文件</strong>:你可以一次浏览多个文件。把不在激活状态的编辑窗口拖到激活窗口的底部或侧边的滚动条上,就可以打开该编辑窗口。这是我能描述该窍门的最好方式了。</p>
<p><strong>同时打开两个Eclipse</strong>: 要将改动从一个CVS分支上合并到另外一个上,我喜欢通过同时打开两个工作目录(Workspace)不同Eclipse来实现。这样我可以通过比较 CVS上的最新版本看到所有的变化(右键单击工程,然后选择Compare Lastest from HEAD)然后把每一个变化都合并到另外一个CVS分支上。启动多个Eclipse的最简单的方法是利用Eclipseàwith Launcher。</p>
<p><strong>Implementors插件</strong>:安装一个能够跳到一个接口的实现的插件。如果你是个dependency injection 粉丝,或者正在基于编写优良的接口工作,那么你需要一个这样的插件来加速代码导航。 你可以在SourceForge找到这个插件。</p>
<p>Ctrl+Alt+H</p>
<p>如果你想知道一个类的方法到底被那些其他的类调用,那么请选中这个方法名,然后按“Ctrl+Alt+H”,</p>
<p>Eclipse就会显示出这个方法被哪些方法调用,最终产生一个调用关系树。<br>\1. Ctrl+左键 </p>
<p>这个是大多数人经常用到的,用来查看变量、方法、类的定义</p>
<p>\2. Ctrl+O</p>
<p>查看一个类的纲要,列出其方法和成员变量。提示:再多按一次Ctrl+O,可以列出该类继承的方法和变量。</p>
<p>助记:”O”—>”Outline”—>”纲要”</p>
<p>\3. Ctrl+T</p>
<p>查看一个类的继承关系树,是自顶向下的,再多按一次Ctrl+T, 会换成自底向上的显示结构。</p>
<p>提示:选中一个方法名,按Ctrl+T,可以查看到有这个同名方法的父类、子类、接口。</p>
<p>助记:”T”——->”Tree”—–>”层次树”</p>
<p>4.Alt+左右方向键</p>
<p>我们经常会遇到看代码时Ctrl+左键,层层跟踪,然后迷失在代码中的情况,这时只需要按“Alt+左方向键</p>
<p>”就可以退回到上次阅读的位置,同理,按“Alt+右方向键”会前进到刚才退回的阅读位置,就像浏览器的</p>
<p>前进和后退按钮一样。</p>
<p>导入包:Ctrl+Shift+O<br>编辑<br>作用域 功能 快捷键<br>全局 查找并替换 Ctrl+F<br>文本编辑器 查找上一个 Ctrl+Shift+K<br>文本编辑器 查找下一个 Ctrl+K<br>全局 撤销 Ctrl+Z<br>全局 复制 Ctrl+C<br>全局 恢复上一个选择 Alt+Shift+↓<br>全局 剪切 Ctrl+X<br>全局 快速修正 Ctrl1+1<br>全局 内容辅助 Alt+/<br>全局 全部选中 Ctrl+A<br>全局 删除 Delete<br>全局 上下文信息 Alt+?<br>Alt+Shift+?<br>Ctrl+Shift+Space<br>Java编辑器 显示工具提示描述 F2<br>Java编辑器 选择封装元素 Alt+Shift+↑<br>Java编辑器 选择上一个元素 Alt+Shift+←<br>Java编辑器 选择下一个元素 Alt+Shift+→<br>文本编辑器 增量查找 Ctrl+J<br>文本编辑器 增量逆向查找 Ctrl+Shift+J<br>全局 粘贴 Ctrl+V<br>全局 重做 Ctrl+Y<br>查看<br>作用域 功能 快捷键<br>全局 放大 Ctrl+=<br>全局 缩小 Ctrl+-<br>窗口<br>作用域 功能 快捷键<br>全局 激活编辑器 F12<br>全局 切换编辑器 Ctrl+Shift+W<br>全局 上一个编辑器 Ctrl+Shift+F6<br>全局 上一个视图 Ctrl+Shift+F7<br>全局 上一个透视图 Ctrl+Shift+F8<br>全局 下一个编辑器 Ctrl+F6<br>全局 下一个视图 Ctrl+F7<br>全局 下一个透视图 Ctrl+F8<br>文本编辑器 显示标尺上下文菜单 Ctrl+W<br>全局 显示视图菜单 Ctrl+F10<br>全局 显示系统菜单 Alt+-<br>导航<br>作用域 功能 快捷键<br>Java编辑器 打开结构 Ctrl+F3<br>全局 打开类型 Ctrl+Shift+T<br>全局 打开类型层次结构 F4<br>全局 打开声明 F3<br>全局 打开外部javadoc Shift+F2<br>全局 打开资源 Ctrl+Shift+R<br>全局 后退历史记录 Alt+←<br>全局 前进历史记录 Alt+→<br>全局 上一个 Ctrl+,<br>全局 下一个 Ctrl+.<br>Java编辑器 显示大纲 Ctrl+O<br>全局 在层次结构中打开类型 Ctrl+Shift+H<br>全局 转至匹配的括号 Ctrl+Shift+P<br>全局 转至上一个编辑位置 Ctrl+Q<br>Java编辑器 转至上一个成员 Ctrl+Shift+↑<br>Java编辑器 转至下一个成员 Ctrl+Shift+↓<br>文本编辑器 转至行 Ctrl+L<br>搜索<br>作用域 功能 快捷键<br>全局 出现在文件中 Ctrl+Shift+U<br>全局 打开搜索对话框 Ctrl+H<br>全局 工作区中的声明 Ctrl+G<br>全局 工作区中的引用 Ctrl+Shift+G<br>文本编辑<br>作用域 功能 快捷键<br>文本编辑器 改写切换 Insert<br>文本编辑器 上滚行 Ctrl+↑<br>文本编辑器 下滚行 Ctrl+↓<br>文件<br>作用域 功能 快捷键<br>全局 保存 Ctrl+X<br>Ctrl+S<br>全局 打印 Ctrl+P<br>全局 关闭 Ctrl+F4<br>全局 全部保存 Ctrl+Shift+S<br>全局 全部关闭 Ctrl+Shift+F4<br>全局 属性 Alt+Enter<br>全局 新建 Ctrl+N<br>项目<br>作用域 功能 快捷键<br>全局 全部构建 Ctrl+B<br>源代码<br>作用域 功能 快捷键<br>Java编辑器 格式化 Ctrl+Shift+F<br>Java编辑器 取消注释 Ctrl+/<br>Java编辑器 注释 Ctrl+/<br>Java编辑器 添加单个import Ctrl+Shift+M<br>Java编辑器 组织多个import Ctrl+Shift+O<br>Java编辑器 使用try/catch块来包围 未设置,太常用了,所以在这里列出,建议自己设置。<br>也可以使用Ctrl+1自动修正。<br>调试/运行<br>作用域 功能 快捷键<br>全局 单步返回 F7<br>全局 单步跳过 F6<br>全局 单步跳入 F5<br>全局 单步跳入选择 Ctrl+F5<br>全局 调试上次启动 F11<br>全局 继续 F8<br>全局 使用过滤器单步执行 Shift+F5<br>全局 添加/去除断点 Ctrl+Shift+B<br>全局 显示 Ctrl+D<br>全局 运行上次启动 Ctrl+F11<br>全局 运行至行 Ctrl+R<br>全局 执行 Ctrl+U<br>重构<br>作用域 功能 快捷键<br>全局 撤销重构 Alt+Shift+Z<br>全局 抽取方法 Alt+Shift+M<br>全局 抽取局部变量 Alt+Shift+L<br>全局 内联 Alt+Shift+I<br>全局 移动 Alt+Shift+V<br>全局 重命名 Alt+Shift+R<br>全局 重做 Alt+Shift+Y</p>
<p>(1)Ctrl+M切换窗口的大小<br>(2)Ctrl+Q跳到最后一次的编辑处<br>(3)F2当鼠标放在一个标记处出现Tooltip时候按F2则把鼠标移开时Tooltip还会显示即Show Tooltip</p>
<p>Description。<br>F3跳到声明或定义的地方。<br>F5单步调试进入函数内部。<br>F6单步调试不进入函数内部,如果装了金山词霸2006则要把“取词开关”的快捷键改成其他的。<br>F7由函数内部返回到调用处。<br>F8一直执行到下一个断点。<br>(4)Ctrl+Pg~对于XML文件是切换代码和图示窗口<br>(5)Ctrl+Alt+I看Java文件中变量的相关信息<br>(6)Ctrl+PgUp对于代码窗口是打开“Show List”下拉框,在此下拉框里显示有最近曾打开的文件<br>(7)Ctrl+/ 在代码窗口中是这种//~注释。<br>Ctrl+Shift+/ 在代码窗口中是这种/<em>~</em>/注释,在JSP文件窗口中是〈!–~–〉。<br>(8)Alt+Shift+O(或点击工具栏中的Toggle Mark Occurrences按钮) 当点击某个标记时可使本页面中其他</p>
<p>地方的此标记黄色凸显,并且窗口的右边框会出现白色的方块,点击此方块会跳到此标记处。<br>(9)右击窗口的左边框即加断点的地方选Show Line Numbers可以加行号。<br>(10)Ctrl+I格式化激活的元素Format Active Elements。<br>Ctrl+Shift+F格式化文件Format Document。<br>(11)Ctrl+S保存当前文件。<br>Ctrl+Shift+S保存所有未保存的文件。<br>(12)Ctrl+Shift+M(先把光标放在需导入包的类名上) 作用是加Import语句。<br>Ctrl+Shift+O作用是缺少的Import语句被加入,多余的Import语句被删除。<br>(13)Ctrl+Space提示键入内容即Content Assist,此时要将输入法中Chinese(Simplified)IME-</p>
<p>Ime/Nonlme Toggle的快捷键(用于切换英文和其他文字)改成其他的。<br>Ctrl+Shift+Space提示信息即Context Information。<br>(14)双击窗口的左边框可以加断点。<br>(15)Ctrl+D删除当前行。</p>
<p>Eclipse快捷键大全<br>Ctrl+1 快速修复(最经典的快捷键,就不用多说了)<br>Ctrl+D: 删除当前行<br>Ctrl+Alt+↓ 复制当前行到下一行(复制增加)<br>Ctrl+Alt+↑ 复制当前行到上一行(复制增加)</p>
<p>Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)<br>Alt+↑ 当前行和上面一行交互位置(同上)<br>Alt+← 前一个编辑的页面<br>Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)</p>
<p>Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性</p>
<p>Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)<br>Shift+Ctrl+Enter 在当前行插入空行(原理同上条)</p>
<p>Ctrl+Q 定位到最后编辑的地方<br>Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)<br>Ctrl+M 最大化当前的Edit或View (再按则反之)<br>Ctrl+/ 注释当前行,再按则取消注释<br>Ctrl+O 快速显示 OutLine<br>Ctrl+T 快速显示当前类的继承结构<br>Ctrl+W 关闭当前Editer<br>Ctrl+K 参照选中的Word快速定位到下一个<br>Ctrl+E 快速显示当前Editer的下拉列表(如果当前页面没有显示的用黑体表示)</p>
<p>Ctrl+/(小键盘) 折叠当前类中的所有代码</p>
<p>Ctrl+×(小键盘) 展开当前类中的所有代码</p>
<p>Ctrl+Space 代码助手完成一些代码的插入(但一般和输入法有冲突,可以修改输入法的热键,也可以暂用</p>
<p>Alt+/来代替)</p>
<p>Ctrl+Shift+E 显示管理当前打开的所有的View的管理器(可以选择关闭,激活等操作)</p>
<p>Ctrl+J 正向增量查找(按下Ctrl+J后,你所输入的每个字母编辑器都提供快速匹配定位到某个单词,如果没有</p>
<p>,则在stutes line中显示没有找到了,查一个单词时,特别实用,这个功能Idea两年前就有了)</p>
<p>Ctrl+Shift+J 反向增量查找(和上条相同,只不过是从后往前查)</p>
<p>Ctrl+Shift+F4 关闭所有打开的Editer</p>
<p>Ctrl+Shift+X 把当前选中的文本全部变味小写</p>
<p>Ctrl+Shift+Y 把当前选中的文本全部变为小写</p>
<p>Ctrl+Shift+F 格式化当前代码</p>
<p>Ctrl+Shift+P 定位到对于的匹配符(譬如{}) (从前面定位后面时,光标要在匹配符里面,后面到前面,则反之</p>
<p>)</p>
<p>下面的快捷键是重构里面常用的,本人就自己喜欢且常用的整理一下(注:一般重构的快捷键都是Alt+Shift开</p>
<p>头的了)</p>
<p>Alt+Shift+R 重命名 (是我自己最爱用的一个了,尤其是变量和类的Rename,比手工方法能节省很多劳动力)</p>
<p>Alt+Shift+M 抽取方法 (这是重构里面最常用的方法之一了,尤其是对一大堆泥团代码有用)</p>
<p>Alt+Shift+C 修改函数结构(比较实用,有N个函数调用了这个方法,修改一次搞定)</p>
<p>Alt+Shift+L 抽取本地变量( 可以直接把一些魔法数字和字符串抽取成一个变量,尤其是多处调用的时候)</p>
<p>Alt+Shift+F 把Class中的local变量变为field变量 (比较实用的功能)</p>
<p>Alt+Shift+I 合并变量(可能这样说有点不妥Inline)<br>Alt+Shift+V 移动函数和变量(不怎么常用)<br>Alt+Shift+Z 重构的后悔药(Undo)</p>
]]></content>
<summary type="html">
Eclipse中10个最有用的快捷键组合 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合。通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升。
</summary>
<category term="IDE" scheme="https://xu-github.github.io/categories/IDE/"/>
<category term="IDE" scheme="https://xu-github.github.io/tags/IDE/"/>
<category term="快捷键" scheme="https://xu-github.github.io/tags/%E5%BF%AB%E6%8D%B7%E9%94%AE/"/>
</entry>
<entry>
<title>【转载】java.toString() ,(String),String.valueOf的区别</title>
<link href="https://xu-github.github.io/2018/09/14/java.toString/"/>
<id>https://xu-github.github.io/2018/09/14/java.toString/</id>
<published>2018-09-14T02:22:16.000Z</published>
<updated>2019-04-03T12:56:01.572Z</updated>
<content type="html"><![CDATA[<p>在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。</p>
<p> 常用的方法有Object#toString(),(String)要转换的对象,String.valueOf(Object)等。</p>
<p>下面对这些方法一一进行分析。</p>
<p>方法1:采用 Object#toString()方法</p>
<p>请看下面的例子:</p>
<p> Object object = getObject(); System.out.println(object.toString());</p>
<p> 在这种使用方法中,因为java.lang.Object类里已有public方法.toString(),所以对任何严格意义上的java对象都可以调用此方法。但在使用时要注意,必须保证object不是null值,否则将抛出NullPointerException异常。采用这种方法时,通常派生类会覆盖Object里的toString()方法。</p>
<p>方法2:采用类型转换(String)object方法</p>
<p> 这是标准的类型转换,将object转成String类型的值。使用这种方法时,需要注意的是类型必须能转成String类型。因此最好用instanceof做个类型检查,以判断是否可以转换。否则容易抛出CalssCastException异常。此外,需特别小心的是因定义为Object 类型的对象在转成String时语法检查并不会报错,这将可能导致潜在的错误存在。这时要格外小心。</p>
<p>如: Object obj = new Integer(100); String strVal = (String)obj;</p>
<p>在运行时将会出错,因为将Integer类型强制转换为String类型,无法通过。</p>
<p>但是, Integer obj = new Integer(100); String strVal = (String)obj; 如是格式代码,将会报语法错误。此外,因null值可以强制转换为任何java类类型,(String)null也是合法的。</p>
<p>方法3:采用String.valueOf(Object)</p>
<p> String.valueOf(Object)的基础是Object#toString()。但它与Object#toString()又有所不同。在前面方法1的分析中提到,使用后者时需保证不为null。但采用第三种方法时,将不用担心object是否为null值这一问题。</p>
<p> 为了便于说明问题,我们来分析一下相关的源代码。</p>
<p> Jdk里String# valueOf(Object)源码如下:</p>
<p> public static String valueOf(Object obj) { return (obj == null) ? “null” : obj.toString(); }</p>
<p> 从上面的源码可以很清晰的看出null值不用担心的理由。但是,这也恰恰给了我们隐患。我们应当注意到,当object为null 时,String.valueOf(object)的值是字符串”null”,而不是null!!!在使用过程中切记要注意。</p>
<p> 试想一下,如果我们用</p>
<p> if(String.valueOf(object)==null){System.out.println(“传入的值是null!”);}这样的语句将可能会发生什么问题。再想一下,向控制台输出时,在视觉上如下语句在执行的结果上有什么不同: System.out.println(String.valueOf(null)); System.out.println(null); 我们看到的输出将是一模一样的东西:null,但它们意义相同吗?</p>
<p> 以上是对object对象转换为String的一些总结。</p>
<p><a href="https://blog.csdn.net/springk/article/details/6414017" target="_blank" rel="external">https://blog.csdn.net/springk/article/details/6414017</a></p>
]]></content>
<summary type="html">
在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object#toString(),(String)要转换的对象,String.valueOf(Object)等。
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
<category term="string" scheme="https://xu-github.github.io/tags/string/"/>
</entry>
<entry>
<title>【转载】金额转大写(可处理千万亿,精确到分)</title>
<link href="https://xu-github.github.io/2018/06/21/java-money-s/"/>
<id>https://xu-github.github.io/2018/06/21/java-money-s/</id>
<published>2018-06-21T07:19:16.000Z</published>
<updated>2019-04-03T13:02:42.634Z</updated>
<content type="html"><![CDATA[<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">package</span> org.GE.action;</div><div class="line"></div><div class="line"></div><div class="line"><span class="keyword">import</span> java.math.BigDecimal;</div><div class="line"><span class="keyword">import</span> java.util.HashMap;</div><div class="line"><span class="keyword">import</span> java.util.Map;</div><div class="line"><span class="keyword">import</span> java.util.Scanner;</div><div class="line"></div><div class="line"></div><div class="line"><span class="comment">/**</span></div><div class="line"> * Created with IntelliJ IDEA.</div><div class="line"> * User: Administrator</div><div class="line"> * Date: 14-4-12</div><div class="line"> * Time: 上午11:18</div><div class="line"> * To change this template use File | Settings | File Templates.</div><div class="line"> */</div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">Test1</span></span>{</div><div class="line"></div><div class="line"></div><div class="line"></div><div class="line"></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> <span class="keyword">throws</span> Exception </span>{</div><div class="line"> Scanner sc = <span class="keyword">new</span> Scanner(System.in);</div><div class="line"> <span class="keyword">while</span>(<span class="keyword">true</span>){</div><div class="line"> System.out.print(<span class="string">"请输入需要转换的数字:"</span>);</div><div class="line"> String i = sc.nextLine();</div><div class="line"> System.out.println(digitUppercase(i));</div><div class="line"> }</div><div class="line"> }</div><div class="line"></div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line"> * 处理的最大数字达千万亿位 精确到分</div><div class="line"> * <span class="doctag">@return</span></div><div class="line"> */</div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> String <span class="title">digitUppercase</span><span class="params">(String num)</span> <span class="keyword">throws</span> Exception</span>{</div><div class="line"> String fraction[] = {<span class="string">"角"</span>, <span class="string">"分"</span>};</div><div class="line"> String digit[] = { <span class="string">"零"</span>, <span class="string">"壹"</span>, <span class="string">"贰"</span>, <span class="string">"叁"</span>, <span class="string">"肆"</span>, <span class="string">"伍"</span>, <span class="string">"陆"</span>, <span class="string">"柒"</span>, <span class="string">"捌"</span>, <span class="string">"玖"</span> };</div><div class="line"> <span class="comment">/**</span></div><div class="line"> * 仟 佰 拾 ' '</div><div class="line"> ' ' $4 $3 $2 $1</div><div class="line"> 万 $8 $7 $6 $5</div><div class="line"> 亿 $12 $11 $10 $9</div><div class="line"> */</div><div class="line"> String unit1[] = {<span class="string">""</span>, <span class="string">"拾"</span>, <span class="string">"佰"</span>, <span class="string">"仟"</span>};<span class="comment">//把钱数分成段,每四个一段,实际上得到的是一个二维数组</span></div><div class="line"> String unit2[] = {<span class="string">"元"</span>, <span class="string">"万"</span>, <span class="string">"亿"</span>,<span class="string">"万亿"</span>}; <span class="comment">//把钱数分成段,每四个一段,实际上得到的是一个二维数组</span></div><div class="line"> BigDecimal bigDecimal = <span class="keyword">new</span> BigDecimal(num);</div><div class="line"> bigDecimal=bigDecimal.multiply(<span class="keyword">new</span> BigDecimal(<span class="number">100</span>));</div><div class="line"><span class="comment">// Double bigDecimal = new Double(name*100); 存在精度问题 eg:145296.8</span></div><div class="line"> String strVal = String.valueOf(bigDecimal.toBigInteger());</div><div class="line"> String head = strVal.substring(<span class="number">0</span>,strVal.length()-<span class="number">2</span>); <span class="comment">//整数部分</span></div><div class="line"> String end = strVal.substring(strVal.length()-<span class="number">2</span>); <span class="comment">//小数部分</span></div><div class="line"> String endMoney=<span class="string">""</span>;</div><div class="line"> String headMoney = <span class="string">""</span>;</div><div class="line"> <span class="keyword">if</span>(<span class="string">"00"</span>.equals(end)){</div><div class="line"> endMoney = <span class="string">"整"</span>;</div><div class="line"> }<span class="keyword">else</span>{</div><div class="line"> <span class="keyword">if</span>(!end.substring(<span class="number">0</span>,<span class="number">1</span>).equals(<span class="string">"0"</span>)){</div><div class="line"> endMoney+=digit[Integer.valueOf(end.substring(<span class="number">0</span>,<span class="number">1</span>))]+<span class="string">"角"</span>;</div><div class="line"> }<span class="keyword">else</span> <span class="keyword">if</span>(end.substring(<span class="number">0</span>,<span class="number">1</span>).equals(<span class="string">"0"</span>) && !end.substring(<span class="number">1</span>,<span class="number">2</span>).equals(<span class="string">"0"</span>)){</div><div class="line"> endMoney+= <span class="string">"零"</span>;</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(!end.substring(<span class="number">1</span>,<span class="number">2</span>).equals(<span class="string">"0"</span>)){</div><div class="line"> endMoney+=digit[Integer.valueOf(end.substring(<span class="number">1</span>,<span class="number">2</span>))]+<span class="string">"分"</span>;</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">char</span>[] chars = head.toCharArray();</div><div class="line"> Map<String,Boolean> map = <span class="keyword">new</span> HashMap<String,Boolean>();<span class="comment">//段位置是否已出现zero</span></div><div class="line"> <span class="keyword">boolean</span> zeroKeepFlag = <span class="keyword">false</span>;<span class="comment">//0连续出现标志</span></div><div class="line"> <span class="keyword">int</span> vidxtemp = <span class="number">0</span>;</div><div class="line"> <span class="keyword">for</span>(<span class="keyword">int</span> i=<span class="number">0</span>;i<chars.length;i++){</div><div class="line"> <span class="keyword">int</span> idx = (chars.length-<span class="number">1</span>-i)%<span class="number">4</span>;<span class="comment">//段内位置 unit1</span></div><div class="line"> <span class="keyword">int</span> vidx = (chars.length-<span class="number">1</span>-i)/<span class="number">4</span>;<span class="comment">//段位置 unit2</span></div><div class="line"> String s = digit[Integer.valueOf(String.valueOf(chars[i]))];</div><div class="line"> <span class="keyword">if</span>(!<span class="string">"零"</span>.equals(s)){</div><div class="line"> headMoney += s +unit1[idx]+unit2[vidx];</div><div class="line"> zeroKeepFlag = <span class="keyword">false</span>;</div><div class="line"> }<span class="keyword">else</span> <span class="keyword">if</span>(i==chars.length-<span class="number">1</span> || map.get(<span class="string">"zero"</span>+vidx)!=<span class="keyword">null</span>){</div><div class="line"> headMoney += <span class="string">""</span> ;</div><div class="line"> }<span class="keyword">else</span>{</div><div class="line"> headMoney += s;</div><div class="line"> zeroKeepFlag = <span class="keyword">true</span>;</div><div class="line"> map.put(<span class="string">"zero"</span>+vidx,<span class="keyword">true</span>);<span class="comment">//该段位已经出现0;</span></div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(vidxtemp!=vidx || i==chars.length-<span class="number">1</span>){</div><div class="line"> headMoney = headMoney.replaceAll(unit2[vidx],<span class="string">""</span>);</div><div class="line"> headMoney+=unit2[vidx];</div><div class="line"> }</div><div class="line"> <span class="keyword">if</span>(zeroKeepFlag && (chars.length-<span class="number">1</span>-i)%<span class="number">4</span>==<span class="number">0</span>){</div><div class="line"> headMoney = headMoney.replaceAll(<span class="string">"零"</span>,<span class="string">""</span>);</div><div class="line"> }</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> headMoney+endMoney;</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>
<p>转自:<a href="http://605113068.iteye.com/blog/2049163" target="_blank" rel="external">http://605113068.iteye.com/blog/2049163</a></p>
]]></content>
<summary type="html">
金额转大写(可处理千万亿,精确到分)
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
</entry>
<entry>
<title>【转载】java金额转大写</title>
<link href="https://xu-github.github.io/2018/06/21/java-money/"/>
<id>https://xu-github.github.io/2018/06/21/java-money/</id>
<published>2018-06-21T07:02:16.000Z</published>
<updated>2019-04-03T13:03:03.308Z</updated>
<content type="html"><![CDATA[<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div><div class="line">73</div><div class="line">74</div><div class="line">75</div><div class="line">76</div><div class="line">77</div><div class="line">78</div><div class="line">79</div><div class="line">80</div><div class="line">81</div><div class="line">82</div><div class="line">83</div><div class="line">84</div><div class="line">85</div><div class="line">86</div><div class="line">87</div><div class="line">88</div><div class="line">89</div><div class="line">90</div><div class="line">91</div><div class="line">92</div><div class="line">93</div><div class="line">94</div><div class="line">95</div><div class="line">96</div><div class="line">97</div><div class="line">98</div><div class="line">99</div><div class="line">100</div><div class="line">101</div><div class="line">102</div><div class="line">103</div><div class="line">104</div><div class="line">105</div><div class="line">106</div><div class="line">107</div><div class="line">108</div><div class="line">109</div><div class="line">110</div><div class="line">111</div><div class="line">112</div><div class="line">113</div><div class="line">114</div><div class="line">115</div><div class="line">116</div><div class="line">117</div><div class="line">118</div><div class="line">119</div><div class="line">120</div><div class="line">121</div><div class="line">122</div><div class="line">123</div><div class="line">124</div><div class="line">125</div><div class="line">126</div><div class="line">127</div><div class="line">128</div><div class="line">129</div><div class="line">130</div><div class="line">131</div><div class="line">132</div><div class="line">133</div><div class="line">134</div><div class="line">135</div><div class="line">136</div><div class="line">137</div><div class="line">138</div><div class="line">139</div><div class="line">140</div><div class="line">141</div><div class="line">142</div><div class="line">143</div><div class="line">144</div><div class="line">145</div><div class="line">146</div><div class="line">147</div><div class="line">148</div><div class="line">149</div><div class="line">150</div><div class="line">151</div><div class="line">152</div><div class="line">153</div><div class="line">154</div><div class="line">155</div><div class="line">156</div><div class="line">157</div><div class="line">158</div><div class="line">159</div><div class="line">160</div><div class="line">161</div><div class="line">162</div><div class="line">163</div><div class="line">164</div><div class="line">165</div><div class="line">166</div><div class="line">167</div><div class="line">168</div><div class="line">169</div><div class="line">170</div><div class="line">171</div><div class="line">172</div><div class="line">173</div><div class="line">174</div><div class="line">175</div><div class="line">176</div><div class="line">177</div><div class="line">178</div><div class="line">179</div><div class="line">180</div><div class="line">181</div><div class="line">182</div><div class="line">183</div><div class="line">184</div><div class="line">185</div><div class="line">186</div><div class="line">187</div><div class="line">188</div><div class="line">189</div><div class="line">190</div><div class="line">191</div><div class="line">192</div><div class="line">193</div><div class="line">194</div><div class="line">195</div><div class="line">196</div><div class="line">197</div><div class="line">198</div><div class="line">199</div><div class="line">200</div><div class="line">201</div><div class="line">202</div><div class="line">203</div><div class="line">204</div><div class="line">205</div><div class="line">206</div><div class="line">207</div><div class="line">208</div><div class="line">209</div><div class="line">210</div><div class="line">211</div><div class="line">212</div><div class="line">213</div><div class="line">214</div><div class="line">215</div><div class="line">216</div><div class="line">217</div><div class="line">218</div><div class="line">219</div><div class="line">220</div><div class="line">221</div><div class="line">222</div><div class="line">223</div><div class="line">224</div><div class="line">225</div><div class="line">226</div><div class="line">227</div><div class="line">228</div><div class="line">229</div><div class="line">230</div><div class="line">231</div><div class="line">232</div><div class="line">233</div><div class="line">234</div><div class="line">235</div><div class="line">236</div><div class="line">237</div><div class="line">238</div><div class="line">239</div><div class="line">240</div><div class="line">241</div><div class="line">242</div><div class="line">243</div><div class="line">244</div><div class="line">245</div><div class="line">246</div><div class="line">247</div><div class="line">248</div><div class="line">249</div><div class="line">250</div></pre></td><td class="code"><pre><div class="line"></div><div class="line"><span class="keyword">package</span> com.b510.number2char;</div><div class="line"></div><div class="line"><span class="keyword">import</span> java.math.BigDecimal;</div><div class="line"></div><div class="line"><span class="comment">/**</span></div><div class="line"></div><div class="line"> \* 数字转换为汉语中人民币的大写<br></div><div class="line"></div><div class="line"> \* </div><div class="line"></div><div class="line"> \* <span class="doctag">@author</span> hongten</div><div class="line"></div><div class="line"> \* <span class="doctag">@contact</span> hongtenzone@foxmail.com</div><div class="line"></div><div class="line"> \* <span class="doctag">@create</span> 2013-08-13</div><div class="line"></div><div class="line"> */</div><div class="line"></div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">NumberToCN</span> </span>{</div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line"></div><div class="line"> \* 汉语中数字大写</div><div class="line"></div><div class="line"> */</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String[] CN_UPPER_NUMBER = { <span class="string">"零"</span>, <span class="string">"壹"</span>, <span class="string">"贰"</span>, <span class="string">"叁"</span>, <span class="string">"肆"</span>,</div><div class="line"></div><div class="line"> <span class="string">"伍"</span>, <span class="string">"陆"</span>, <span class="string">"柒"</span>, <span class="string">"捌"</span>, <span class="string">"玖"</span> };</div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line"></div><div class="line"> \* 汉语中货币单位大写,这样的设计类似于占位符</div><div class="line"></div><div class="line"> */</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String[] CN_UPPER_MONETRAY_UNIT = { <span class="string">"分"</span>, <span class="string">"角"</span>, <span class="string">"元"</span>,</div><div class="line"></div><div class="line"> <span class="string">"拾"</span>, <span class="string">"佰"</span>, <span class="string">"仟"</span>, <span class="string">"万"</span>, <span class="string">"拾"</span>, <span class="string">"佰"</span>, <span class="string">"仟"</span>, <span class="string">"亿"</span>, <span class="string">"拾"</span>, <span class="string">"佰"</span>, <span class="string">"仟"</span>, <span class="string">"兆"</span>, <span class="string">"拾"</span>,</div><div class="line"></div><div class="line"> <span class="string">"佰"</span>, <span class="string">"仟"</span> };</div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line"></div><div class="line"> \* 特殊字符:整</div><div class="line"></div><div class="line"> */</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String CN_FULL = <span class="string">"整"</span>;</div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line"></div><div class="line"> \* 特殊字符:负</div><div class="line"></div><div class="line"> */</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String CN_NEGATIVE = <span class="string">"负"</span>;</div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line"></div><div class="line"> \* 金额的精度,默认值为2</div><div class="line"></div><div class="line"> */</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> MONEY_PRECISION = <span class="number">2</span>;</div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line"></div><div class="line"> \* 特殊字符:零元整</div><div class="line"></div><div class="line"> */</div><div class="line"></div><div class="line"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> String CN_ZEOR_FULL = <span class="string">"零元"</span> + CN_FULL;</div><div class="line"></div><div class="line"> <span class="comment">/**</span></div><div class="line"></div><div class="line"> \* 把输入的金额转换为汉语中人民币的大写</div><div class="line"></div><div class="line"> \* </div><div class="line"></div><div class="line"> \* <span class="doctag">@param</span> numberOfMoney</div><div class="line"></div><div class="line"> \* 输入的金额</div><div class="line"></div><div class="line"> \* <span class="doctag">@return</span> 对应的汉语大写</div><div class="line"></div><div class="line"> */</div><div class="line"></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> String <span class="title">number2CNMontrayUnit</span><span class="params">(BigDecimal numberOfMoney)</span> </span>{</div><div class="line"></div><div class="line"> StringBuffer sb = <span class="keyword">new</span> StringBuffer();</div><div class="line"></div><div class="line"> <span class="comment">// -1, 0, or 1 as the value of this BigDecimal is negative, zero, or</span></div><div class="line"></div><div class="line"> <span class="comment">// positive.</span></div><div class="line"></div><div class="line"> <span class="keyword">int</span> signum = numberOfMoney.signum();</div><div class="line"></div><div class="line"> <span class="comment">// 零元整的情况</span></div><div class="line"></div><div class="line"> <span class="keyword">if</span> (signum == <span class="number">0</span>) {</div><div class="line"></div><div class="line"> <span class="keyword">return</span> CN_ZEOR_FULL;</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">//这里会进行金额的四舍五入</span></div><div class="line"></div><div class="line"> <span class="keyword">long</span> number = numberOfMoney.movePointRight(MONEY_PRECISION)</div><div class="line"></div><div class="line"> .setScale(<span class="number">0</span>, <span class="number">4</span>).abs().longValue();</div><div class="line"></div><div class="line"> <span class="comment">// 得到小数点后两位值</span></div><div class="line"></div><div class="line"> <span class="keyword">long</span> scale = number % <span class="number">100</span>;</div><div class="line"></div><div class="line"> <span class="keyword">int</span> numUnit = <span class="number">0</span>;</div><div class="line"></div><div class="line"> <span class="keyword">int</span> numIndex = <span class="number">0</span>;</div><div class="line"></div><div class="line"> <span class="keyword">boolean</span> getZero = <span class="keyword">false</span>;</div><div class="line"></div><div class="line"> <span class="comment">// 判断最后两位数,一共有四中情况:00 = 0, 01 = 1, 10, 11</span></div><div class="line"></div><div class="line"> <span class="keyword">if</span> (!(scale > <span class="number">0</span>)) {</div><div class="line"></div><div class="line"> numIndex = <span class="number">2</span>;</div><div class="line"></div><div class="line"> number = number / <span class="number">100</span>;</div><div class="line"></div><div class="line"> getZero = <span class="keyword">true</span>;</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">if</span> ((scale > <span class="number">0</span>) && (!(scale % <span class="number">10</span> > <span class="number">0</span>))) {</div><div class="line"></div><div class="line"> numIndex = <span class="number">1</span>;</div><div class="line"></div><div class="line"> number = number / <span class="number">10</span>;</div><div class="line"></div><div class="line"> getZero = <span class="keyword">true</span>;</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">int</span> zeroSize = <span class="number">0</span>;</div><div class="line"></div><div class="line"> <span class="keyword">while</span> (<span class="keyword">true</span>) {</div><div class="line"></div><div class="line"> <span class="keyword">if</span> (number <= <span class="number">0</span>) {</div><div class="line"></div><div class="line"> <span class="keyword">break</span>;</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// 每次获取到最后一个数</span></div><div class="line"></div><div class="line"> numUnit = (<span class="keyword">int</span>) (number % <span class="number">10</span>);</div><div class="line"></div><div class="line"> <span class="keyword">if</span> (numUnit > <span class="number">0</span>) {</div><div class="line"></div><div class="line"> <span class="keyword">if</span> ((numIndex == <span class="number">9</span>) && (zeroSize >= <span class="number">3</span>)) {</div><div class="line"></div><div class="line"> sb.insert(<span class="number">0</span>, CN_UPPER_MONETRAY_UNIT[<span class="number">6</span>]);</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">if</span> ((numIndex == <span class="number">13</span>) && (zeroSize >= <span class="number">3</span>)) {</div><div class="line"></div><div class="line"> sb.insert(<span class="number">0</span>, CN_UPPER_MONETRAY_UNIT[<span class="number">10</span>]);</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> sb.insert(<span class="number">0</span>, CN_UPPER_MONETRAY_UNIT[numIndex]);</div><div class="line"></div><div class="line"> sb.insert(<span class="number">0</span>, CN_UPPER_NUMBER[numUnit]);</div><div class="line"></div><div class="line"> getZero = <span class="keyword">false</span>;</div><div class="line"></div><div class="line"> zeroSize = <span class="number">0</span>;</div><div class="line"></div><div class="line"> } <span class="keyword">else</span> {</div><div class="line"></div><div class="line"> ++zeroSize;</div><div class="line"></div><div class="line"> <span class="keyword">if</span> (!(getZero)) {</div><div class="line"></div><div class="line"> sb.insert(<span class="number">0</span>, CN_UPPER_NUMBER[numUnit]);</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">if</span> (numIndex == <span class="number">2</span>) {</div><div class="line"></div><div class="line"> <span class="keyword">if</span> (number > <span class="number">0</span>) {</div><div class="line"></div><div class="line"> sb.insert(<span class="number">0</span>, CN_UPPER_MONETRAY_UNIT[numIndex]);</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (((numIndex - <span class="number">2</span>) % <span class="number">4</span> == <span class="number">0</span>) && (number % <span class="number">1000</span> > <span class="number">0</span>)) {</div><div class="line"></div><div class="line"> sb.insert(<span class="number">0</span>, CN_UPPER_MONETRAY_UNIT[numIndex]);</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> getZero = <span class="keyword">true</span>;</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// 让number每次都去掉最后一个数</span></div><div class="line"></div><div class="line"> number = number / <span class="number">10</span>;</div><div class="line"></div><div class="line"> ++numIndex;</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// 如果signum == -1,则说明输入的数字为负数,就在最前面追加特殊字符:负</span></div><div class="line"></div><div class="line"> <span class="keyword">if</span> (signum == -<span class="number">1</span>) {</div><div class="line"></div><div class="line"> sb.insert(<span class="number">0</span>, CN_NEGATIVE);</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="comment">// 输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整</span></div><div class="line"></div><div class="line"> <span class="keyword">if</span> (!(scale > <span class="number">0</span>)) {</div><div class="line"></div><div class="line"> sb.append(CN_FULL);</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="keyword">return</span> sb.toString();</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{</div><div class="line"></div><div class="line"> <span class="keyword">double</span> money = <span class="number">2020004.01</span>;</div><div class="line"></div><div class="line"> BigDecimal numberOfMoney = <span class="keyword">new</span> BigDecimal(money);</div><div class="line"></div><div class="line"> String s = NumberToCN.number2CNMontrayUnit(numberOfMoney);</div><div class="line"></div><div class="line"> System.out.println(<span class="string">"你输入的金额为:【"</span>+ money +<span class="string">"】 #--# ["</span> +s.toString()+<span class="string">"]"</span>);</div><div class="line"></div><div class="line"> }</div><div class="line"></div><div class="line">}</div></pre></td></tr></table></figure>
<p>转自:<a href="https://www.cnblogs.com/hongten/p/hongten_java_money.html" target="_blank" rel="external">https://www.cnblogs.com/hongten/p/hongten_java_money.html</a></p>
]]></content>
<summary type="html">
金额转大写
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
</entry>
<entry>
<title>【转载】iReport文字自动换行设置</title>
<link href="https://xu-github.github.io/2018/05/08/iReport-word/"/>
<id>https://xu-github.github.io/2018/05/08/iReport-word/</id>
<published>2018-05-08T07:22:16.000Z</published>
<updated>2019-04-03T13:03:28.322Z</updated>
<content type="html"><![CDATA[<p>1、 选中要自动换行的text框,勾选中属性面板中的“StretchWith Overflow”属性</p>
<p>2、 选中该字段所在行的所有字段(包括行头),在“属性”面板中将“Stretch Type”设置为“Relative to Tallest Object”</p>
]]></content>
<summary type="html">
1、 选中要自动换行的text框,勾选中属性面板中的“StretchWith Overflow”属性;2、 选中该字段所在行的所有字段(包括行头),在“属性”面板中将“Stretch Type”设置为“Relative to Tallest Object”
</summary>
<category term="ireport" scheme="https://xu-github.github.io/categories/ireport/"/>
<category term="ireport" scheme="https://xu-github.github.io/tags/ireport/"/>
</entry>
<entry>
<title>【转载】for update和for update nowait的区别和使用</title>
<link href="https://xu-github.github.io/2018/01/03/sql-update/"/>
<id>https://xu-github.github.io/2018/01/03/sql-update/</id>
<published>2018-01-03T09:22:16.000Z</published>
<updated>2019-04-03T13:05:08.524Z</updated>
<content type="html"><![CDATA[<p>首先,for update 和for update nowait 是对操作的数据行进行加锁,在事务提交前防止其他操作对数据的修改。</p>
<p>for update 和for update nowait主要区别在于是否等待,如果不加nowait,在执行select时就会报错,如果加了nowait,在执行select时就会等待,直至锁被释放。</p>
<p>首先我们使用两个sql:<br><figure class="highlight"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">1.select * from HH t where id='1' for update</div><div class="line"></div><div class="line">2.select * from HH t where id ='1' for update nowait</div></pre></td></tr></table></figure></p>
<p>sql1在pl/sql中执行,sql2在ob12中执行(在pl/sql或ob12中开两个窗口执行不行,现在我也不知道为什么):</p>
<p>执行sql1后查询出正确信息,在执行sql2,出现错误信息“ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效”。这是因为执行sql1时对改行的数据加了锁,其他操作是不能访问改行的。当我们在sql1后执行commit后,sql2就能显示正确的数据。</p>
<p>将sql2换成for update 按上面得步骤执行,sql2会一直等待锁得释放不会,直至sql1后commit,sql2就能查询出数据;</p>
<p>这里还有 for update wait n (n是时间,单位:秒),即会等待n秒,n秒之后数据还是锁住的话就会报上面提到的错误;</p>
<p>其实for update 就是为了防止在查询数据的时候对数据进行修改,比如有以下两个sql:</p>
<p>sql1:select * from HH t where id=’1’ for update</p>
<p>sql2:update HH set name=’张三’ where id = ‘1’</p>
<p>当我们执行sql1后,在执行sql2,sql2就会一直等待sql1将锁释放后才能执行,这样在查询的时候就不会出行数据改变,在sql1后执行commit,sql2就会自动执行了。</p>
<p>转自:<a href="https://www.cnblogs.com/mouseIT/p/4174157.html" target="_blank" rel="external">https://www.cnblogs.com/mouseIT/p/4174157.html</a></p>
]]></content>
<summary type="html">
首先,for update 和for update nowait 是对操作的数据行进行加锁,在事务提交前防止其他操作对数据的修改。for update 和for update nowait主要区别在于是否等待,如果不加nowait,在执行select时就会报错,如果加了nowait,在执行select时就会等待,直至锁被释放。
</summary>
<category term="sql" scheme="https://xu-github.github.io/categories/sql/"/>
<category term="sql" scheme="https://xu-github.github.io/tags/sql/"/>
<category term="update" scheme="https://xu-github.github.io/tags/update/"/>
</entry>
<entry>
<title>【原创】Eclipse显示空格,换行符等</title>
<link href="https://xu-github.github.io/2018/01/02/eclipse-space/"/>
<id>https://xu-github.github.io/2018/01/02/eclipse-space/</id>
<published>2018-01-02T08:22:16.000Z</published>
<updated>2019-04-03T13:10:31.080Z</updated>
<content type="html"><![CDATA[<p>设置如下:</p>
<p>选择Window->Preferences->General->Editors->Text Editors->Show whitespace characters</p>
]]></content>
<summary type="html">
设置如下:选择Window->Preferences->General->Editors->Text Editors->Show whitespace characters
</summary>
<category term="eclipse" scheme="https://xu-github.github.io/categories/eclipse/"/>
<category term="eclipse" scheme="https://xu-github.github.io/tags/eclipse/"/>
</entry>
<entry>
<title>【原创】JAVA中的时间大小比较</title>
<link href="https://xu-github.github.io/2017/12/06/java-time-compare1/"/>
<id>https://xu-github.github.io/2017/12/06/java-time-compare1/</id>
<published>2017-12-06T08:22:16.000Z</published>
<updated>2019-04-03T13:13:41.550Z</updated>
<content type="html"><![CDATA[<figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div><div class="line">18</div><div class="line">19</div><div class="line">20</div><div class="line">21</div><div class="line">22</div><div class="line">23</div><div class="line">24</div><div class="line">25</div><div class="line">26</div><div class="line">27</div><div class="line">28</div><div class="line">29</div><div class="line">30</div><div class="line">31</div><div class="line">32</div><div class="line">33</div><div class="line">34</div><div class="line">35</div><div class="line">36</div><div class="line">37</div><div class="line">38</div><div class="line">39</div><div class="line">40</div><div class="line">41</div><div class="line">42</div><div class="line">43</div><div class="line">44</div><div class="line">45</div><div class="line">46</div><div class="line">47</div><div class="line">48</div><div class="line">49</div><div class="line">50</div><div class="line">51</div><div class="line">52</div><div class="line">53</div><div class="line">54</div><div class="line">55</div><div class="line">56</div><div class="line">57</div><div class="line">58</div><div class="line">59</div><div class="line">60</div><div class="line">61</div><div class="line">62</div><div class="line">63</div><div class="line">64</div><div class="line">65</div><div class="line">66</div><div class="line">67</div><div class="line">68</div><div class="line">69</div><div class="line">70</div><div class="line">71</div><div class="line">72</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">import</span> java.text.DateFormat; </div><div class="line"><span class="keyword">import</span> java.text.ParseException; </div><div class="line"><span class="keyword">import</span> java.text.SimpleDateFormat; </div><div class="line"><span class="keyword">import</span> java.util.Date; </div><div class="line"> </div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">DateTest</span> </span>{ </div><div class="line"> </div><div class="line"> <span class="comment">/** </span></div><div class="line"> * <span class="doctag">@param</span> args </div><div class="line"> */ </div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String[] args)</span> </span>{ </div><div class="line"> <span class="comment">// TODO Auto-generated method stub </span></div><div class="line"> DateFormat df = <span class="keyword">new</span> SimpleDateFormat(<span class="string">"HH:mm:ss"</span>);<span class="comment">//创建日期转换对象HH:mm:ss为时分秒,年月日为yyyy-MM-dd </span></div><div class="line"> <span class="keyword">try</span> { </div><div class="line"> Date dt1 = df.parse(<span class="string">"15:00:00"</span>);<span class="comment">//将字符串转换为date类型 </span></div><div class="line"> Date dt2 = df.parse(<span class="string">"17:00:00"</span>); </div><div class="line"> <span class="keyword">if</span>(dt1.getTime()>dt2.getTime())<span class="comment">//比较时间大小,如果dt1大于dt2 </span></div><div class="line"> { </div><div class="line"> System.out.println(<span class="string">"yes"</span>); </div><div class="line"> } </div><div class="line"> <span class="keyword">else</span> </div><div class="line"> { </div><div class="line"> System.out.println(<span class="string">"no"</span>);<span class="comment">//运行输出no </span></div><div class="line"> } </div><div class="line"> } <span class="keyword">catch</span> (ParseException e) { </div><div class="line"> <span class="comment">// TODO Auto-generated catch block </span></div><div class="line"> e.printStackTrace(); </div><div class="line"> } </div><div class="line"> </div><div class="line"> } </div><div class="line"> </div><div class="line">} </div><div class="line"></div><div class="line">======================================================</div><div class="line"></div><div class="line"><span class="keyword">import</span> java.text.DateFormat;</div><div class="line"><span class="keyword">import</span> java.text.SimpleDateFormat;</div><div class="line"><span class="keyword">import</span> java.util.Date;</div><div class="line"></div><div class="line"><span class="comment">/**</span></div><div class="line">*</div><div class="line">* <span class="doctag">@author</span> hp</div><div class="line">*/</div><div class="line"><span class="keyword">public</span> <span class="class"><span class="keyword">class</span> <span class="title">test</span> </span>{</div><div class="line"></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">void</span> <span class="title">main</span><span class="params">(String args[])</span> </span>{</div><div class="line"> <span class="keyword">int</span> i= compare_date(<span class="string">"1995-11-12 15:21"</span>, <span class="string">"1999-12-11 09:59"</span>);</div><div class="line"> System.out.println(<span class="string">"i=="</span>+i);</div><div class="line"> }</div><div class="line"></div><div class="line"> <span class="function"><span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">int</span> <span class="title">compare_date</span><span class="params">(String DATE1, String DATE2)</span> </span>{</div><div class="line"> </div><div class="line"> </div><div class="line"> DateFormat df = <span class="keyword">new</span> SimpleDateFormat(<span class="string">"yyyy-MM-dd hh:mm"</span>);</div><div class="line"> <span class="keyword">try</span> {</div><div class="line"> Date dt1 = df.parse(DATE1);</div><div class="line"> Date dt2 = df.parse(DATE2);</div><div class="line"> <span class="keyword">if</span> (dt1.getTime() > dt2.getTime()) {</div><div class="line"> System.out.println(<span class="string">"dt1 在dt2前"</span>);</div><div class="line"> <span class="keyword">return</span> <span class="number">1</span>;</div><div class="line"> } <span class="keyword">else</span> <span class="keyword">if</span> (dt1.getTime() < dt2.getTime()) {</div><div class="line"> System.out.println(<span class="string">"dt1在dt2后"</span>);</div><div class="line"> <span class="keyword">return</span> -<span class="number">1</span>;</div><div class="line"> } <span class="keyword">else</span> {</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line"> }</div><div class="line"> } <span class="keyword">catch</span> (Exception exception) {</div><div class="line"> exception.printStackTrace();</div><div class="line"> }</div><div class="line"> <span class="keyword">return</span> <span class="number">0</span>;</div><div class="line"> }</div><div class="line">}</div></pre></td></tr></table></figure>]]></content>
<summary type="html">
JAVA中的时间大小比较
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
<category term="时间" scheme="https://xu-github.github.io/tags/%E6%97%B6%E9%97%B4/"/>
</entry>
<entry>
<title>【转载】Java时间和时间戳的相互转换</title>
<link href="https://xu-github.github.io/2017/12/06/java-time-compare2/"/>
<id>https://xu-github.github.io/2017/12/06/java-time-compare2/</id>
<published>2017-12-06T08:22:16.000Z</published>
<updated>2019-04-03T13:16:09.926Z</updated>
<content type="html"><![CDATA[<p>时间转换为时间戳:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div></pre></td><td class="code"><pre><div class="line"> <span class="comment">/* </span></div><div class="line"></div><div class="line"> * 将时间转换为时间戳</div><div class="line"> */ </div><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> String <span class="title">dateToStamp</span><span class="params">(String s)</span> <span class="keyword">throws</span> ParseException</span>{</div><div class="line"> String res;</div><div class="line"> SimpleDateFormat simpleDateFormat = <span class="keyword">new</span> SimpleDateFormat(<span class="string">"yyyy-MM-dd HH:mm:ss"</span>);</div><div class="line"> Date date = simpleDateFormat.parse(s);</div><div class="line"> <span class="keyword">long</span> ts = date.getTime();</div><div class="line"> res = String.valueOf(ts);</div><div class="line"> <span class="keyword">return</span> res;</div><div class="line">}</div></pre></td></tr></table></figure></p>
<p>时间戳转换为时间:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div></pre></td><td class="code"><pre><div class="line"><span class="comment">/* </span></div><div class="line"> * 将时间戳转换为时间</div><div class="line"> */</div><div class="line"><span class="function"><span class="keyword">public</span> <span class="keyword">static</span> String <span class="title">stampToDate</span><span class="params">(String s)</span></span>{</div><div class="line"> String res;</div><div class="line"> SimpleDateFormat simpleDateFormat = <span class="keyword">new</span> SimpleDateFormat(<span class="string">"yyyy-MM-dd HH:mm:ss"</span>);</div><div class="line"> <span class="keyword">long</span> lt = <span class="keyword">new</span> Long(s);</div><div class="line"> Date date = <span class="keyword">new</span> Date(lt);</div><div class="line"> res = simpleDateFormat.format(date);</div><div class="line"> <span class="keyword">return</span> res;</div><div class="line">}</div></pre></td></tr></table></figure></p>
]]></content>
<summary type="html">
JAVA中的时间大小比较
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
<category term="时间" scheme="https://xu-github.github.io/tags/%E6%97%B6%E9%97%B4/"/>
</entry>
<entry>
<title>【原创】Java 将String转化为Int</title>
<link href="https://xu-github.github.io/2017/12/06/java-stringtoint/"/>
<id>https://xu-github.github.io/2017/12/06/java-stringtoint/</id>
<published>2017-12-06T07:22:16.000Z</published>
<updated>2019-04-03T13:18:33.515Z</updated>
<content type="html"><![CDATA[<p>在 Java 中要将 String 类型转化为 int 类型时,需使用 Integer 类中的 parseInt() 方法或者 valueOf() 方法进行转换.</p>
<p>例1:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">String str = <span class="string">"123"</span>;</div><div class="line"><span class="keyword">try</span> {</div><div class="line"> <span class="keyword">int</span> a = Integer.parseInt(str);</div><div class="line">} <span class="keyword">catch</span> (NumberFormatException e) {</div><div class="line"> e.printStackTrace();</div><div class="line">}</div></pre></td></tr></table></figure></p>
<p>例2:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">String str = <span class="string">"123"</span>;</div><div class="line"><span class="keyword">try</span> {</div><div class="line"> <span class="keyword">int</span> b = Integer.valueOf(str).intValue()</div><div class="line">} <span class="keyword">catch</span> (NumberFormatException e) {</div><div class="line"> e.printStackTrace();</div><div class="line">}</div></pre></td></tr></table></figure></p>
<p>在转换过程中需注意,因为字符串中可能会出现非数字的情况,所以在转换的时候需要捕捉处理异常</p>
]]></content>
<summary type="html">
Java 将String转化为Int
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
</entry>
<entry>
<title>【原创】postgresql 判断字段是否为空</title>
<link href="https://xu-github.github.io/2017/12/06/postgresql-null/"/>
<id>https://xu-github.github.io/2017/12/06/postgresql-null/</id>
<published>2017-12-06T07:22:16.000Z</published>
<updated>2019-04-03T13:19:53.494Z</updated>
<content type="html"><![CDATA[<p>select COALESCE(tran.rm_amt,0) rm_amt</p>
<p>select COALESCE(null, 0) as test</p>
<p>结果</p>
<p>test</p>
<p>0</p>
]]></content>
<summary type="html">
<p>select COALESCE(tran.rm_amt,0) rm_amt</p>
<p>select COALESCE(null, 0) as test</p>
<p>结果</p>
<p>test</p>
<p>0</p>
</summary>
<category term="postgresql" scheme="https://xu-github.github.io/categories/postgresql/"/>
<category term="db" scheme="https://xu-github.github.io/tags/db/"/>
<category term="postgresql" scheme="https://xu-github.github.io/tags/postgresql/"/>
</entry>
<entry>
<title>【原创】postgreSQL数据类型字符串和数值相互转换</title>
<link href="https://xu-github.github.io/2017/12/06/postgreSQL-stringtoint/"/>
<id>https://xu-github.github.io/2017/12/06/postgreSQL-stringtoint/</id>
<published>2017-12-06T06:22:16.000Z</published>
<updated>2019-04-03T13:27:58.659Z</updated>
<content type="html"><![CDATA[<p>##1、将数值转成字符串类型<br> 方法1:调用to_char(int, text)函数,int为要转换值,text为数值格式化模式,其中模式描述为:<br>|模式| 描述|<br>|-|-|<br>|9| 带有指定数值位数的值|<br>|0| 带前导零的值|<br>|.|(句点) 小数点|<br>|,|(逗号) 分组(千)分隔符|<br>|PR| 尖括号内负值|<br>|S| 带符号的数值|<br>|L| 货币符号|<br>|D| 小数点|<br>|G| 分组分隔符|<br>|MI| 在指明的位置的负号(如果数字 < 0)|<br>|PL| 在指明的位置的正号(如果数字 > 0)|<br>|SG| 在指明的位置的正/负号 |<br>使用举例:<br><figure class="highlight sql"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">SELECT</span> to_char(<span class="number">12345</span>, <span class="string">'9999999999999999999'</span>)//结果‘ <span class="number">12345</span>’,结果字符串前面有空格,位数跟格式化模式中<span class="number">9</span>的位数有关;</div><div class="line"><span class="keyword">SELECT</span> to_char(<span class="number">12345</span>, <span class="string">'99999'</span>)//结果‘<span class="number">12345</span>’</div><div class="line"><span class="keyword">SELECT</span> to_char(<span class="number">12345</span>, <span class="string">'9999'</span>)//结果‘####’,当模式串小于数字个数时,字符串会显示为#,位数跟格式化模式中<span class="number">9</span>的位数有关;</div><div class="line"><span class="keyword">SELECT</span> to_char(<span class="number">12345</span>, <span class="string">''</span>)//结果‘’</div></pre></td></tr></table></figure></p>
<p>问题:将数值转成字符串且不要前面的空格实现起来很麻烦,由于无法判断格式化模式中9的位数。可用下面方法2解决:<br>方法2:通过||连接<br>‘’||12345</p>
<p>##2、将字符串转成数值<br>方法调用: to_number(text,text)函数,参数1是要转的数字字符串,参数2为模式参数,返回的类型 numeric<br><figure class="highlight sql"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">使用举例:</div><div class="line"><span class="keyword">SELECT</span> to_number(<span class="string">'12345'</span>, <span class="string">'9999999999999999999'</span>)//<span class="number">12345</span></div><div class="line"><span class="keyword">SELECT</span> to_number(<span class="string">'12345'</span>, <span class="string">'99999'</span>)//<span class="number">12345</span></div><div class="line"><span class="keyword">SELECT</span> to_number(<span class="string">''</span>||<span class="number">12345</span>, <span class="string">'9999'</span>)//<span class="number">1234</span>,由于模式是<span class="number">4</span>位,结果忽略最后一位;</div><div class="line"><span class="keyword">SELECT</span> to_number(<span class="string">' 12345'</span>, <span class="string">'9999999999999999999'</span>)//<span class="number">12345</span></div><div class="line"><span class="keyword">SELECT</span> to_number(<span class="string">' ab ,1,2a3,4b5'</span>, <span class="string">'9999999999999999999'</span>)//<span class="number">12345</span>,会忽略所有字符串中非数字字符</div><div class="line"><span class="keyword">select</span> to_number(<span class="string">'12,454.8-'</span>, <span class="string">'99G999D9S'</span>)</div></pre></td></tr></table></figure></p>
<p>另外还可以<br><figure class="highlight sql"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div></pre></td><td class="code"><pre><div class="line"><span class="comment">--把'1234'转成整数</span></div><div class="line"><span class="keyword">select</span> <span class="keyword">cast</span>(<span class="string">'1234'</span> <span class="keyword">as</span> <span class="built_in">integer</span>) ;</div><div class="line"><span class="keyword">select</span> <span class="keyword">cast</span>(<span class="string">'1234'</span> <span class="keyword">as</span> <span class="built_in">int</span>) ;</div><div class="line"><span class="comment">--用substring截取字符串,从第8个字符开始截取2个字符:结果是12。(索引从1开始)</span></div><div class="line"><span class="keyword">select</span> <span class="keyword">cast</span>(<span class="keyword">substring</span>(<span class="string">'1234abc12'</span>,<span class="number">8</span>,<span class="number">2</span>) <span class="keyword">as</span> <span class="built_in">integer</span>)</div></pre></td></tr></table></figure></p>
<p>还见过以下写法<br><figure class="highlight sql"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line"><span class="keyword">select</span> <span class="string">'123456'</span>::<span class="built_in">int</span> <span class="keyword">test</span></div></pre></td></tr></table></figure></p>
]]></content>
<summary type="html">
postgreSQL数据类型字符串和数值相互转换
</summary>
<category term="postgresql" scheme="https://xu-github.github.io/categories/postgresql/"/>
<category term="db" scheme="https://xu-github.github.io/tags/db/"/>
<category term="postgresql" scheme="https://xu-github.github.io/tags/postgresql/"/>
</entry>
<entry>
<title>【原创】Java 抽象类</title>
<link href="https://xu-github.github.io/2017/11/15/java-chouxiang-class/"/>
<id>https://xu-github.github.io/2017/11/15/java-chouxiang-class/</id>
<published>2017-11-15T03:11:16.000Z</published>
<updated>2019-04-03T13:35:38.462Z</updated>
<content type="html"><![CDATA[<p>Java 抽象类<br>在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。</p>
<p>抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。</p>
<p>由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。也是因为这个原因,通常在设计阶段决定要不要设计抽象类。</p>
<p>父类包含了子类集合的常见的方法,但是由于父类本身是抽象的,所以不能使用这些方法。</p>
<p>在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。</p>
<p>抽象方法<br>如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方法为抽象方法。</p>
<p>Abstract关键字同样可以用来声明抽象方法,抽象方法只包含一个方法名,而没有方法体。</p>
<p>抽象方法没有定义,方法名后面直接跟一个分号,而不是花括号。</p>
<p>声明抽象方法会造成以下两个结果:</p>
<p>如果一个类包含抽象方法,那么该类必须是抽象类。<br>任何子类必须重写父类的抽象方法,或者声明自身为抽象类。<br>继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。</p>
<p>抽象类总结规定</p>
<ol>
<li><p>抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。</p>
</li>
<li><p>抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。</p>
</li>
<li><p>抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。</p>
</li>
<li><p>构造方法,类方法(用static修饰的方法)不能声明为抽象方法。</p>
</li>
<li><p>抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。</p>
</li>
</ol>
<p>更多参考:<a href="http://www.runoob.com/java/java-abstraction.html" target="_blank" rel="external">http://www.runoob.com/java/java-abstraction.html</a></p>
]]></content>
<summary type="html">
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
</entry>
<entry>
<title>【原创】Java String.split()</title>
<link href="https://xu-github.github.io/2017/11/15/Java%20String.split/"/>
<id>https://xu-github.github.io/2017/11/15/Java String.split/</id>
<published>2017-11-15T03:11:16.000Z</published>
<updated>2019-04-03T13:31:10.675Z</updated>
<content type="html"><![CDATA[<p>在java.lang包中有String.split()方法,返回是一个数组</p>
<p>在应用中用到一些,总结如下:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div><div class="line">8</div><div class="line">9</div><div class="line">10</div><div class="line">11</div><div class="line">12</div><div class="line">13</div><div class="line">14</div><div class="line">15</div><div class="line">16</div><div class="line">17</div></pre></td><td class="code"><pre><div class="line"><span class="number">1</span>、用“.”分隔时,写法String.split(<span class="string">"\\."</span>),不能用String.split(<span class="string">"."</span>);</div><div class="line"></div><div class="line"><span class="number">2</span>、用“|”分隔时,写法String.split(<span class="string">"\\|"</span>),不能用String.split(<span class="string">"|"</span>);</div><div class="line"></div><div class="line">“.”和“|”都是转义字符,必须得加<span class="string">"\\"</span>;</div><div class="line"></div><div class="line"><span class="number">3</span>、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如,“acount=? and uu =? or n=?”,把三个都分隔出来,可以用String.split(<span class="string">"and|or"</span>);</div><div class="line"></div><div class="line">使用String.split方法分隔字符串时,分隔符如果用到一些特殊字符,可能会得不到我们预期的结果</div><div class="line"></div><div class="line">看jdk doc中说明 </div><div class="line"></div><div class="line"><span class="keyword">public</span> String[] split(String regex)</div><div class="line"></div><div class="line"> Splits <span class="keyword">this</span> string around matches of the given regular expression. </div><div class="line"></div><div class="line">参数regex是一个 regular-expression的匹配模式而不是一个简单的String。</div></pre></td></tr></table></figure></p>
]]></content>
<summary type="html">
<p>在java.lang包中有String.split()方法,返回是一个数组</p>
<p>在应用中用到一些,总结如下:<br><figure class="highlight java"><table><tr><td class="gutter"><pre><div cla
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
</entry>
<entry>
<title>【转载】Java 接口</title>
<link href="https://xu-github.github.io/2017/11/01/java-interface/"/>
<id>https://xu-github.github.io/2017/11/01/java-interface/</id>
<published>2017-11-01T11:17:16.000Z</published>
<updated>2019-04-03T13:34:32.531Z</updated>
<content type="html"><![CDATA[<p>接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。</p>
<p>接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法。接口则包含类要实现的方法。</p>
<p>除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。</p>
<p>接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。</p>
<h3 id="接口与类相似点:"><a href="#接口与类相似点:" class="headerlink" title="接口与类相似点:"></a>接口与类相似点:</h3><ul>
<li>一个接口可以有多个方法。</li>
<li>接口文件保存在 .java 结尾的文件中,文件名使用接口名。</li>
<li>接口的字节码文件保存在 .class 结尾的文件中。</li>
<li>接口相应的字节码文件必须在与包名称相匹配的目录结构中。</li>
</ul>
<h3 id="接口与类的区别:"><a href="#接口与类的区别:" class="headerlink" title="接口与类的区别:"></a>接口与类的区别:</h3><ul>
<li>接口不能用于实例化对象。</li>
<li>接口没有构造方法。</li>
<li>接口中所有的方法必须是抽象方法。</li>
<li>接口不能包含成员变量,除了 static 和 final 变量。</li>
<li>接口不是被类继承了,而是要被类实现。</li>
<li>接口支持多继承。</li>
</ul>
<h3 id="接口特性"><a href="#接口特性" class="headerlink" title="接口特性"></a>接口特性</h3><ul>
<li>接口中每一个方法也是隐式抽象的,接口中的方法会被隐式的指定为 public abstract(只能是 public abstract,其他修饰符都会报错)。</li>
<li>接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量(并且只能是 public,用 private 修饰会报编译错误)。</li>
<li>接口中的方法是不能在接口中实现的,只能由实现接口的类来实现接口中的方法。</li>
</ul>
<h3 id="抽象类和接口的区别"><a href="#抽象类和接口的区别" class="headerlink" title="抽象类和接口的区别"></a>抽象类和接口的区别</h3><ul>
<li>\1. 抽象类中的方法可以有方法体,就是能实现方法的具体功能,但是接口中的方法不行。</li>
<li>\2. 抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是 public static final 类型的。</li>
<li>\3. 接口中不能含有静态代码块以及静态方法(用 static 修饰的方法),而抽象类是可以有静态代码块和静态方法。</li>
<li>\4. 一个类只能继承一个抽象类,而一个类却可以实现多个接口。</li>
</ul>
<p>接口有以下特性:</p>
<ul>
<li>接口是隐式抽象的,当声明一个接口的时候,不必使用abstract关键字。</li>
<li>接口中每一个方法也是隐式抽象的,声明时同样不需要abstract关键字。</li>
<li>接口中的方法都是公有的。</li>
</ul>
<h2 id="接口的实现"><a href="#接口的实现" class="headerlink" title="接口的实现"></a>接口的实现</h2><p>当类实现接口的时候,类要实现接口中所有的方法。否则,类必须声明为抽象的类。</p>
<p>类使用implements关键字实现接口。在类声明中,Implements关键字放在class声明后面。</p>
<p>实现一个接口的语法,可以使用这个公式:</p>
<p>…implements 接口名称[, 其他接口, 其他接口…, …] …</p>
<p>重写接口中声明的方法时,需要注意以下规则:</p>
<ul>
<li>类在实现接口的方法时,不能抛出强制性异常,只能在接口中,或者继承接口的抽象类中抛出该强制性异常。</li>
<li>类在重写方法时要保持一致的方法名,并且应该保持相同或者相兼容的返回值类型。</li>
<li>如果实现接口的类是抽象类,那么就没必要实现该接口的方法。</li>
</ul>
<p>在实现接口的时候,也要注意一些规则:</p>
<ul>
<li>一个类可以同时实现多个接口。</li>
<li>一个类只能继承一个类,但是能实现多个接口。</li>
<li>一个接口能继承另一个接口,这和类之间的继承比较相似。</li>
</ul>
<h2 id="接口的继承"><a href="#接口的继承" class="headerlink" title="接口的继承"></a>接口的继承</h2><p>一个接口能继承另一个接口,和类之间的继承方式比较相似。接口的继承使用extends关键字,子接口继承父接口的方法。</p>
<h2 id="接口的多继承"><a href="#接口的多继承" class="headerlink" title="接口的多继承"></a>接口的多继承</h2><p>在Java中,类的多继承是不合法,但接口允许多继承,。</p>
<p>在接口的多继承中extends关键字只需要使用一次,在其后跟着继承接口。</p>
<p>总结:</p>
<ol>
<li><p>1.接口可以多继承</p>
<p>2.接口的方法声明必须是 public abstract 即便不写默认也是</p>
<p>3.接口里面不能包含方法具体实现</p>
<p>4.类实继承接口必须实现接口里申明的全部方法,除非该类是抽象类</p>
<p>5.类里面可以声明 public static final 修饰的变量</p>
<p>6.接口不能被实例化,但是可以被实现类创建</p>
</li>
<li><p>什么时候使用抽象类和接口</p>
<ul>
<li>如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧。</li>
<li>如果你想实现多重继承,那么你必须使用接口。由于Java不支持多继承,子类不能够继承多个类,但可以实现多个接口。因此你就可以使用接口来解决它。</li>
<li>如果基本功能在不断改变,那么就需要使用抽象类。如果不断改变基本功能并且使用接口,那么就需要改变所有实现了该接口的类。</li>
</ul>
</li>
</ol>
<p>更多参考:<a href="http://www.runoob.com/java/java-interfaces.html" target="_blank" rel="external">http://www.runoob.com/java/java-interfaces.html</a></p>
]]></content>
<summary type="html">
接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
</summary>
<category term="java" scheme="https://xu-github.github.io/categories/java/"/>
<category term="java" scheme="https://xu-github.github.io/tags/java/"/>
</entry>
</feed>