@@ -49,8 +49,6 @@ OpenIDK只包含最精简的JDK:OpenJDK不包含其他的软件包,比如Rhi
49
49
50
50
总之,在Java体系中,还是有很多不自由的成分,源代码的开发不够彻底,希望Oracle能够让JCP更自由开放一些,这也是所有Java社区所希望的。
51
51
52
-
53
-
54
52
## 怎样在Linux系统中下载和安装OpenJDK包
55
53
56
54
Debian, Ubuntu等系统:在命令行中,键入:
@@ -259,8 +257,7 @@ test/Test.class
259
257
260
258
jar cvfM test.zip test
261
259
262
-
263
- # javadoc注意点(原创)
260
+ ## javadoc注意点(原创)
264
261
265
262
javadoc生成文档时总是报java.lang.IllegalArgumentException错
266
263
@@ -271,7 +268,6 @@ javadoc生成文档时总是报java.lang.IllegalArgumentException错误,是class
271
268
见官方参考文档 http://maven.apache.org/plugins/maven-javadoc-plugin/faq.html
272
269
273
270
274
-
275
271
javadoc生成时出错:编码GBK的不可映射字符
276
272
277
273
由于java源代码是用的UTF-8编码,Eclipse中默认编码是GB18030,因此,在生成javadoc的时候,需要手工指定一下编码和字符集。
@@ -326,38 +322,6 @@ byte[] bytes = str.getBytes(); //我想不明白,为什么这里要占用3个b
326
322
327
323
首先,要搞清楚 code point 和 encoding 的区别。Java 是遵循 unicode 4.0 标准的,而内部的 character 以 utf-16 作为 encoding。unicode 4.0 标准包含从 U+0000-U+FFFF 的基本多语言平面和 U+10000-U+10FFFF 的扩展平面的文字,这是 code point。Java 的 char 类型是 16 bit 的,所以单个 char 只支持基本平面内的文字,而扩展平面的文字是由一对 char 来表示的。 而 String.getBytes() 这个方法是按照指定的 encoding 返回字符串,一般中文系统的默认编码是 utf-8 (linux, mac) 或者 gbk/gb18030 (windows)。只要是基本平面内的文字,utf-8码的中文都是3字节的,而 gbk/gbk18030 是2字节的。
328
324
329
- # 常用Java API
330
-
331
- ## 计算Java程序运行时间
332
-
333
- 第一种是以毫秒为单位计算的。
334
-
335
- //伪代码
336
-
337
- long startTime=System.currentTimeMillis(); //获取开始时间
338
-
339
- doSomeThing(); //测试的代码段
340
-
341
- long endTime=System.currentTimeMillis(); //获取结束时间
342
-
343
- System.out.println("程序运行时间: "+(end-start)+"ms");
344
-
345
- 第二种是以纳秒为单位计算的。
346
-
347
- //伪代码
348
-
349
- long startTime=System.nanoTime(); //获取开始时间
350
-
351
- doSomeThing(); //测试的代码段
352
-
353
- long endTime=System.nanoTime(); //获取结束时间
354
-
355
- System.out.println("程序运行时间: "+(end-start)+"ns");
356
-
357
- ## 获得系统换行符
358
-
359
- System.getProperty("line.separator");
360
-
361
325
## Java获取当前路径
362
326
363
327
利用System.getProperty()函数获取当前路径:
@@ -401,13 +365,6 @@ directory.getCanonicalPath(); //得到的是C:\
401
365
directory.getAbsolutePath(); //得到的是C:\test\. .
402
366
direcotry.getPath(); //得到的是..
403
367
404
-
405
- ## System.getenv()
406
-
407
- getenv是获取系统的环境变更,对于windows对在系统属性-->高级-->环境变量中设置的变量将显示在此(对于linux,通过export设置的变量将显示在此)
408
-
409
- System.out.println(System.getenv());
410
-
411
368
## java中的URL类
412
369
413
370
创建URL对象:
@@ -1359,57 +1316,31 @@ static{}(即static块),会在类被加载的时候执行且仅会被执行一
1359
1316
看下面的示例:
1360
1317
1361
1318
class Test{
1362
-
1363
1319
public static int X=100;
1364
-
1365
1320
public final static int Y;=200
1366
-
1367
1321
public Test(){
1368
-
1369
1322
System.out.println("Test构造函数执行");
1370
-
1371
1323
}
1372
-
1373
1324
static{
1374
-
1375
1325
System.out.println("static语句块执行");
1376
-
1377
1326
}
1378
-
1379
1327
public static void display(){
1380
-
1381
1328
System.out.println("静态方法被执行");
1382
-
1383
1329
}
1384
-
1385
1330
public void display_1(){
1386
-
1387
1331
System.out.println("实例方法被执行");
1388
-
1389
1332
}
1390
-
1391
1333
}
1392
1334
1393
1335
public class StaticBlockTest{
1394
-
1395
1336
public static void main(String args[ ] ){
1396
-
1397
1337
try{
1398
-
1399
1338
Class.forName("Test");
1400
-
1401
1339
Class.forName("Test");
1402
-
1403
1340
} catch(ClassNotFoundException e) {
1404
-
1405
1341
e.printStackTrace();
1406
-
1407
1342
}
1408
-
1409
-
1410
-
1411
1343
}
1412
-
1413
1344
}
1414
1345
1415
1346
结果:你会发现虽然执行了两条Class.forName("Test")语句,但是,只输出了一条"静态方法被执行"语句;其实第二条Class.forName()语句已经无效了,因为在虚拟机的生命周期中一个类只被加载一次;又因为static{}是伴随类加载执行的,所以,不管你new多少次对象实例,static{}都只执行一次。
@@ -5787,7 +5718,7 @@ true only if the specified object is also a comparator and it imposes the same o
5787
5718
5788
5719
comparator.compare(person1,person2);。
5789
5720
5790
- # 在多线程中创建单例模式的双重锁定(Double-Check Locking )
5721
+ ## 在多线程中创建单例模式的双重锁定(Double-Check Locking )
5791
5722
5792
5723
``` java
5793
5724
public class SingleTon {
@@ -5825,25 +5756,25 @@ comparator.compare(person1,person2);。
5825
5756
}
5826
5757
```
5827
5758
5828
- # Class类
5759
+ ## Class类
5829
5760
5830
5761
Class类是为了保存JAVA虚拟机运行时(RTTI)对所有对象进行类型识别的信息而设立的。当然Class也是继承自Object类的,每个类都有Class对象,想得到一个类的Class对象共有三种方法.
5831
5762
5832
- 1:调用getClass()
5763
+ ``` java
5833
5764
5765
+ // 调用getClass()
5834
5766
Employee emp;
5835
5767
Class cls= emp. getClass();
5836
5768
5837
- 2:静态方法forName(String clsName)
5838
-
5769
+ // 静态方法forName(String clsName)
5839
5770
String className= " Employee" ;
5840
5771
Class cls= Class . forName(className);
5841
5772
5842
- 3: class 成员变量法
5843
-
5773
+ // class成员变量法
5844
5774
Class cls= Employee . class;
5775
+ ```
5845
5776
5846
- # myeclipse工程结构问题
5777
+ ## myeclipse工程结构问题
5847
5778
5848
5779
.myeclipse目录总体是安装了myeclipse插件的目录,而且这个大的myeclipse插件实际是由很多小的插件组成的,比如tomacat插件,spring插件等等。
5849
5780
@@ -5862,11 +5793,11 @@ Class类是为了保存JAVA虚拟机运行时(RTTI)对所有对象进行类型
5862
5793
5863
5794
这句话应该是来设置项目的根目录的
5864
5795
5865
- # MyEclipse删除对Struts、Hibernate、Spring的支持
5796
+ ## MyEclipse删除对Struts、Hibernate、Spring的支持
5866
5797
5867
5798
最近碰到添加了SSH的支持,但又发现有些包或配置文件不正确,想重新添加,但MyEclipse没有自动重新加载功能,于是到网上搜索了相关内容,总结如下:
5868
5799
5869
- ## 撤消MyEclipse对Struts的支持
5800
+ ### 撤消MyEclipse对Struts的支持
5870
5801
5871
5802
第一步删除struts-config.xml文件。删除config文件是主要的,否则重新部署struts时MyEclipse会瘫痪。其他由MyEclipse自动生成的struts相关文件可以不去理会,等重新部署的时候如有重名他们将会被自动覆盖。
5872
5803
@@ -5876,7 +5807,7 @@ Class类是为了保存JAVA虚拟机运行时(RTTI)对所有对象进行类型
5876
5807
5877
5808
保存退出。右键单击项目,选择Refresh让新改的.project文件生效。这时候struts功能又可以使用了,再重新部署struts功能即可。
5878
5809
5879
- ## 撤消MyEclipse对Hibernate的支持
5810
+ ### 撤消MyEclipse对Hibernate的支持
5880
5811
5881
5812
我是通过菜单MyEclipse->Project Capabilities添加了对Hibernate的支持,添加容易,删除难,菜单里好像没有删除对Hibernate支持的功能,只能手工删除了:
5882
5813
@@ -5894,33 +5825,29 @@ Class类是为了保存JAVA虚拟机运行时(RTTI)对所有对象进行类型
5894
5825
5895
5826
第三步删除Hibernate对应的mapping file,class
5896
5827
5897
- ## 撤消MyEclipse对Spring的支持
5828
+ ### 撤消MyEclipse对Spring的支持
5898
5829
5899
5830
1 . 从build path中删除spring libs
5900
5831
2 . 手工修改工程目录下的.project文件中相关的内容
5901
5832
3 . 删除工程目录下的.springBean文件
5902
5833
5903
5834
刷新工程,在工程右键菜单的myeclipse下面add spring capacity项就又回来了
5904
5835
5905
- # 异常:created a ThreadLocal with key of type
5836
+ ## 异常:created a ThreadLocal with key of type
5906
5837
5907
5838
异常信息:
5908
5839
5909
5840
created a ThreadLocal with key of type [com.opensymphony.xwork2.inject.ContainerImpl$10] (value [com.opensymphony.xwork2.inject.ContainerImpl$10@12c74b9]) and a value of type [java.lang.Object[]] (value [[Ljava.lang.Object;@1a34544]) but failed to remove it.
5910
5841
5911
- 原因大概是说tomcat 6.025之后引入了一种内存泄露的检查机制,会把不能垃圾收集的对像做日志。
5912
-
5913
- 第一种解决办法:使用低于6版本的tomcat。
5914
-
5915
- 第二种解决办法:在tomcat的server.xml文件(在tomcat的安装路径下的conf文件夹里)中把监听关掉:就是把下面三句话括起来就可以啦。
5842
+ 原因大概是说tomcat 6.025之后引入了一种内存泄露的检查机制,会把不能垃圾收集的对像做日志。第一种解决办法:使用低于6版本的tomcat。第二种解决办法:在tomcat的server.xml文件(在tomcat的安装路径下的conf文件夹里)中把监听关掉:就是把下面三句话括起来就可以啦。
5916
5843
5917
5844
``` xml
5918
5845
<Listener className =" org.apache.catalina.core.JreMemoryLeakPreventionListener" />
5919
5846
<Listener className =" org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
5920
5847
<Listener className =" org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
5921
5848
```
5922
5849
5923
- # 服务器的瞬时 Diffie-Hellman 公共密钥过弱
5850
+ ## 服务器的瞬时 Diffie-Hellman 公共密钥过弱
5924
5851
5925
5852
最新版本的chrome(45.0.2454.85 m)在访问证书时,会报“服务器的瞬时 Diffie-Hellman 公共密钥过弱”。最开始以为是证书制作的问题,百度时看到一个解决方法是通过设置tomcat的机密级别:在<connector >中加入
5926
5853
@@ -5930,7 +5857,7 @@ Class类是为了保存JAVA虚拟机运行时(RTTI)对所有对象进行类型
5930
5857
5931
5858
补充:tomcat最好也换也tomcat7
5932
5859
5933
- # Tomcat启动报Error listenerStart错误
5860
+ ## Tomcat启动报Error listenerStart错误
5934
5861
5935
5862
今天启动Tomcat启动不了,报以下错:
5936
5863
@@ -5960,7 +5887,7 @@ Tomcat报的错太含糊了,什么错都没报出来,只提示了Error liste
5960
5887
5961
5888
这样,我们再启动tomcat时,就会在logs目录下生成一个更详细的日志error-debug.2012-05-31.log。我碰到的错误是FileNotFoundException.大家碰到的错应该各式各样都有,所以就要具体问题具体分析了。 tomcat的logging文档具体可参考http://tomcat.apache.org/tomcat-7.0-doc/logging.html
5962
5889
5963
- # 比较好的文章
5890
+ ## 比较好的文章
5964
5891
5965
5892
* 浅析Web工程目录和tomcat目录: http://blog.csdn.net/ystyaoshengting/article/details/6204886
5966
5893
* web.xml配置详解: http://twb.iteye.com/blog/196733
0 commit comments