ΪʲôҪдÕâ¸öÖ¸ÄÏ
µ±Ä㿪ʼ½Ó´¥Ò»¸öÐÂµÄÆ½Ì¨Ê±£¬¶¼»á´Ó×öͬһ¼þÊ¿ªÊ¼£¬Í¨³£Äã»á¸ù¾ÝÄãÒÑѧµÄ¸ÅÄî»òÕß¿ò¼ÜÀ´³¢ÊÔ¿ìËٴËü£¬µ«ÊÇÄãÎÞ´ÓÏÂÊÖ£¬ÒòΪËüÃÇͨ³£ÒÔȫеÄÃû×ֺͷ½·¨Õ¹ÏÖÔÚÄãÃæÇ°¡£
×ßÍêÕâ¸ö¹ý³Ì·Ç³£ºÄʱ£¬ÓÐʱÉõÖÁÈÃÈËÒ»³ïĪչ¡£ÕâÆªÖ¸ÄÏÕýÊÇÓÃÀ´°ïÖúÄÇЩÐÂÊÖ±ÜÃâ´ËÀàÎÊÌâµÄ¡£
ÕâÆªÖ¸ÄÏÎÒÒ²¿ÉÒÔÊÜÒæ, ÒòΪÎÒÈ·¶¨ÎÒÒѾÓÐÁË´íÎó²¢ÇһᷢÏÖ¸ü¶àµÄ´íÎó,ËùÒÔÄã·¢ÏÖÈκδíÎóÇ뼰ʱ·´À¡¸øÎÒ¡£
×îºÃµÄ·½Ê½ÊǸøÎÒ·¢ËÍpull request¡£
³ÖÐø¸üÐÂ
ËäÈ»ÕâÖ»ÊÇһƪ²©¿Í, µ«Êǵ±ÎÒÅöµ½Ð¶«Î÷µÄʱºòÎÒÒ²»á¼´Ê±¸üÐÂÕâ¸öÒ³Ãæ¡£ÎÄÕÂ×î¶¥²¿ÓÐ×îеĸüÐÂÈÕÆÚ.
Ä¿±êÈËȺ
ÕâÆªÖ¸ÄÏÖ÷ÒªÊÇÕë¶Ô.NET¿ª·¢Õߣ¬ÒòΪÔÚÕâÀïÄã»á·¢ÏÖÖî¶à¿ÉÒÔÄÃÀ´ºÍ.NET½øÐбȽϵĵط½¡£Æäʵ´Ó±¾ÎĵÄURLÄã¾Í¿ÉÒÔ¿´³öЩ¶ËÄßÁË¡£»°ËäÈç´Ë£¬ÎÒͬÑùҲϣÍûÕâЩÄܶÔÄÇЩ³õ´Î½Ó´¥Javaƽ̨µÄ·Ç.NET·¢¿ªÕßÓÐËù°ïÖú¡£
»ù´¡
JavaÓïÑÔ£¬Java»·¾³£¬JavaÐéÄâ»ú
ÕâÈýÕßÈ«Íê²»ÊÇÒ»»ØÊ¡£Ò»¸öÊDZà³ÌÓïÑÔ(ÏëÏëC#)£¬Ò»¸öÊDZà³Ì»·¾³(ÏëÏë.NET¿ª·¢»·¾³), ÁíÒ»¸öÔòÊÇ¿ª·¢Æ½Ì¨(ÏëÏëCLR)¡£
²»ÐÒµÄÊÇËÆºõJavaͨ³£±»ÓÃÀ´Ö¸´úÒÔÉÏËùÓС£
²»ÒªÒ»Ìõ·×ßµ½ºÚ¡£ËäÈ»ÎÒ²»Ï²»¶JavaÕâÑùµÄÓïÑÔµ«ÊÇÕû¸öJavaµÄÉú̬ϵͳȴ³äÂúÁË»îÁ¦Í¬Ê±ÓÐÐí¶à´´Ð²»¶Ï·¢Éú¡£×÷ΪһÃû.NET¿ª·¢Õߣ¬ÄãÓ¦¸Ã¶ÔNHibernate£¬NUnit£¬NLog£¬NAntµÈµÈ·Ç³£Á˽⣬Æäʵ
ËùÓÐÕâЩ¶¼À´×ÔÓÚJavaµÄÉú̬ϵͳ£¨°ÑNÈ¥µô¾ÍÊÇÁË£©¡£
¶àÓïÑÔÆ½Ì¨
°ÑJVMÏëÏóÊÇCLR¡£ËüÃÇÊǶԶàÓïÑÔ±à³ÌÌṩ¿çƽ̨µÄÐéÄâ»ú¡£ËäÈ»ËüÃǶ¼Ö§³Ö¶àÓïÑÔ£¬µ«ÊÇËüÃÇÖ®¼ä»¹ÊÇÓвî±ðµÄ¡£
ÔÚCLRÉÏ£¬ÎÒÃÇÖ÷ҪʹÓÃC#£¬VB.NET(¡°±ôΣÎïÖÖ¡±)ºÍF#,ÔÚJVMÉϾÍÊÇJava£¬Scala£¬Clojure£¬
Ceylon£¬Groovy£¬JRubyºÍKotlin£¬ÕâÀïÖ»ÊǾټ¸¸öÀý×Ó¡£
JVM×Ö½ÚÂë
JVM×Ö½ÚÂëÊÇ»ùÓÚJVMµÄÓïÑԵıàÒë´Ó¶øÔÚJVMÉÏÔËÐС£ÕâºÍ.NETÉϵÄILÏàËÆ¡£
¿çƽ̨
JVMÊÇ100%¿çƽ̨µÄ¡£³ýÁËWindows£¬OSXºÍLinux£¬ËüÒ²¿ÉÒÔÔÚÐí¶àÆäËüÉ豸ÉÏÔËÐС£
JVM²¿Ê𣬰汾ÀàÐͺÍÉý¼¶°æ±¾
JVMÓжàÖÖʵÏÖ¡£×î³£¼ûµÄ¾ÍÊÇÔÚOracleºÍOpenJDKÖеÄʵÏÖ¡£ÉõÖÁÓÐÒ»ÖÖ.NETʵÏÖ½Ð×öIKVM.NET¡£
°æ±¾ÀàÐͺÍÉý¼¶°æ±¾
Õâ¿ÉÄÜÊÇĿǰΪֹÔÚ±¾Ö¸ÄÏÖÐ×ÔӵIJ¿·Ö¡£Äã¸ù±¾ÎÞ·¨ÏëÏóÁ¬ÏñÃüÃû»òÕß°æ±¾¿ØÖÆÕâÑù¼òµ¥µÄÊÂÇé¶¼ÄܸãÔÒ¡£ÕâÖÖÃüÃû·½Ê½ÉõÖÁʹ΢ÈíµÄ²úÆ·¶¼ÏԵúÏÀí²»ÉÙ¡£
ÈÃÎÒÃÇ¿ªÊ¼°É£º
°æ±¾ÀàÐÍ
JRE ¨C JavaÔËÐл·¾³¡£ÕâÊÇÓÃÀ´ÔËÐÐJavaÓ¦ÓóÌÐòµÄ¡£µ«Äã²»Äܽö½öÒÀ¿¿ËüÀ´¿ª·¢ÔËÐÐÔÚJVMÉϵÄÓ¦ÓóÌÐò¡£
Java SE (JDK) ¨C Java±ê×¼°æ¡£ËüÒ²³ÆÎªJDK¡£ÕâÊÇÔÚJVMÉÏ¿ª·¢Ó¦ÓóÌÐò×îÆðÂëµÄÌõ¼þ¡£
Java EE ¨C JavaÆóÒµ°æ¡£ºÃÁË£¬¿´Ãû×ÖÄã¾Í¶®ÁË¡£Í¨¹ýËü,Äã¿ÉÒÔ»ñµÃËùÓÐÓÐ¹ØÆóÒµ¼¶·Ö²¼Ê½µÄ¶«Î÷´ó¹æÄ£Ó¦Óá£Ã÷È·Ò»µãµÄÊÇËü°üº¬ÁËJava
SE¡£
Java ME ¨C JavaÒÆ¶¯°æ¡£ÕâÊÇÕë¶ÔÒÆ¶¯µç»°ºÍ±ãЯÉ豸µÄ£¬ËüºÜÏñ.NET΢¿ò¼Ü¡£
JavaFX ¨C ´úÌæÁËSwing£¬ËüÊÇJavaµÄÖ÷ÒªGUI¿ª·¢°ü¡£Í¬Ê±Ëü(¾¡¹ÜÓÐЩÕùÒéµÄ»°Ìâ)Ò²ÃæÏòRIAµÄ¿ª·¢¡££¨ÄѵÀÊÇHTML/JS/CSS²»¹»ºÃÂð£¿)¡£
¿ÉÒÔÍÆ¶Ï£¬ËùÓÐÐÎÈçJava XYµÄ°æ±¾¶¼¿ÉÒÔд³ÉJDKµÄÐÎʽ¡£
ÕâÀïÄã¿ÉÒÔÕÒµ½¸ü¶àÏà¹ØµÄÀúÊ·ºÍÃüÃû¡£
Éý¼¶°æ±¾
µ±Ç°µÄJava°æ±¾ÊÇ7£¬Java 8 ½«ÓÚ2014Äê·¢²¼¡££¨ÒëÕß×¢£ºJava 8½«ÓÚ2014Äê3ÔÂ18ÈÕÕýʽ·¢²¼£©
²éѯÄãËù°²×°µÄJava°æ±¾ºÍÀàÐÍ
Ä㽫»áµÃµ½ÈçÏÂÐÅÏ¢£º
java version "1.7.0_40" Java(TM) SE Runtime Environment (build 1.7.0_40-b43) Java HotSpot(TM) 64-Bit Server VM (build 24.0-b56, mixed mode) |
Õâ¾ÍÊÇJava 7¡£ÎªÊ²Ã´Õâô³Æºô£¿·Ç³£¼òµ¥,½«1.7.0_40ÖеÄ1È¥µô¾ÍÊÇ7.0_40¡£ÆäÖÐ0_40±íʾµÄÊǸüаü¡£ÕâÊÇJava
7µÄËùÓа汾·¢²¼¡£
ÒÔ´ËÀàÍÆ1.5ÊÇJava 5£¬1.6ÊÇJava 6£¬1.7¾ÍÊÇJava 7£¬ËùÒÔÄã²Â²âһϾÍÖªµÀ£¬Java
8½«»áÊÇ 1.8¡£
Êǵ쬷´ÕýÎÒÊÇÖªµÀµÄ¡£
°²×°Java
Ò»µ©ÄãÕÒµ½ÁËÄãÏëҪѧϰµÄ°æ±¾£¬Äã¿ÉÒÔÈ¥OracleµÄ°²×°Ö¸ÄÏÒ³Ãæ½øÐÐÏÂÔØ°²×°¡£
Èç¹ûÄãÏëÒªÖªµÀΪʲôÄãÐèÒª°²×°Ask Toolbar£¬²»Òª¹ÖOracle¡£ÏÔÈ»ÕâÊÇÔÚËüºÍSun֮ǰ´ï³ÉµÄÐÒé¡£ÎÒÌý˵һµ©ÆÚÂúËûÃǾͲ»»á¼ÌÐøÂÄÐÐÐÒé¡£
Ó¦ÓóÌÐòÊä³öÓÖ½ÐArtifacts
ÎÞÂÛÔÚ.NETÉÏ»¹ÊÇÔÚ±¾µØÓ¦ÓóÌÐòÉÏ£¬±àÒëͨ³£ÒԵõ½Ò»¸ö¿ÉÖ´ÐÐÎļþ»òÕßһЩ¶¯Ì¬Á´½Ó¿âÎļþÀ´±ê־׎áÊø¡£
¶øÍ¨¹ýJava£¬Ä㽫ÔÚÊä³öÎļþ¼ÐÖеõ½Èô¸É.classÎļþ¡£
ͨ³£Ã¿¸öÀà¶ÔÓ¦Ò»¸öJavaÀࣨµ±±àÒëJavaÓïÑÔ»òÕ߯äËüÓïÑÔʱ°´ÕÕÔ¼¶¨×ª»¯Îª×Ö½ÚÂ룩¡£
ÕâЩÀàÊÇJVM×Ö½ÚÂ룬Õâ·Ç³£ÀàËÆÓÚCLRÖеÄIL¡£
JARÎļþ
ÀàÎļþ²»»áÍòÄê²»±ä£¬ÄãÍêÈ«¿ÉÒÔ´´½¨Ò»¸öJARÎļþ£¬Ö»²»¹ý¾ÍÊÇÒ»¸ö.classÎļþµÄѹËõ°ü¶øÒÑ¡£Äã¿ÉÒÔͨ¹ýÄã×îϲ»¶µÄ¹¤¾ßÀ´´´½¨JARÎļþ£¬»òÕ߸ü¼òµ¥µÄ·½Ê½¾ÍÊÇÔËÐÐ
jar cf jar-file input-file(s) |
WARÎļþ
WARÎļþ¾ÍÊÇÒ»¸öÓÉSun¹«Ë¾´´ÔìµÄÃæÏòÍøÂçÓ¦ÓõÄJARÎļþ¡£Ëü°üº¬ÁËÐí¶àÀàÎļþºÍһЩ¸½¼ÓµÄÔªÊý¾ÝÒÔ¼°ÃèÊöÍøÂç·þÎñÆ÷£¨ÈçTomCat£©µÄÎļþ¼Ð¡£
ÔËÐÐJavaÓ¦ÓóÌÐò
ÈκÎJava³ÌÐòÖ»ÄÜÓÐÒ»¸öÖ÷ÀàÔÚÃüÁîÌáʾ·ûÖÐÔËÐС£ÀýÈ磺
java <class_containing_main_method> |
Äã±ØÐëÔÚÓµÓÐ.classµÄÎļþ¼ÐÏÂÔËÐÐÕâ¶Î´úÂë¡£
Classpath
ÔÚÔËÐÐÓ¦ÓóÌÐòʱ,JVMÔÚµ±Ç°Îļþ¼ÐÏÂѰÕÒËùÓбØÒªµÄÒÀÀµÎļþ,È»ºóÔÙ²éÕÒCLASSPATH»·¾³±äÁ¿ËùÖ¸ÏòµÄÒ»¸ö»ò¶à¸öÎļþ¼ÐϵÄ.classÎļþ»òÕßJARÎļþºÍZIPÎļþ¡£
Äã¿ÉÒÔÉèÖÃCLASSPATHÈ«¾Ö»·¾³±äÁ¿£¬µ±ÔËÐÐÒ»¸öÓ¦ÓóÌÐòʱͨ¹ýʹÓÃJavaÃüÁî²¢Ìí¼ÓÒ»¸öÃüÁîÐвÎÊý:
java <class_containing_main_method> -cp <class_path> |
ÿ¸öÌõÄ¿¶¼ÊÇÓ÷ֺŸô¿ªµÄ¡£
¹¹½¨¹¤¾ß
.NETÖÐÓÐÐí¶à¹¹½¨¹¤¾ß°üÀ¨MS Build£¬NAnt£¬Albacore£¬FakeµÈµÈ¡£JVMҲûʾÈõ¡£ËäÈ»Ðí¶àÓïÑÔ¶¼ÓÐËüÃÇ×Ô¼ºµÄ¹¹½¨¹¤¾ßÀýÈçClojureÖеĻòÕßScalaÖеÄSBT£¬Ðí¶àÓïÑÔ(°üÀ¨Ç°ÃæËùÌáµ½µÄ)¿ÉÒÔʹÓøü¼Ó±ê×¼µÄ¹¹½¨¹¤¾ß¡£
Ant
ËüÊÇXML£¬NAntÒ²»ùÓÚËü¡£Õâ¾ÍÏñMS-Build£¬¾¡¹ÜËüÖ»ÊÇXMLÎÒÈÔҪǿµ÷Ëü¡£
Maven
Maven·Ç³£Á÷ÐС£µ±Äã·¢ÏÖÏîÄ¿ÖÐÓÐÒ»¸öpom.xmlÎļþ£¬ÄÇÕâ¸öÏîÄ¿¾ÍÊÇMavenÁË¡£MavenÒ²»áË𻵡£MavenÒ²ÊÇXML¡£
È»¶ø£¬Maven²»½ö½öÊÇÒ»¸ö¹¹½¨¹¤¾ß¡£ËüÊÇÒ»¸ö·âװϵͳ¡£Õâ¾ÍÏñ.NetÖеÄNuGet£¬Ò²ÏñNode.jsÖеÄNPM¡£Ïñnuget.org£¬ÆäʵҲÓÐmaven.org¡£ÕâÀàËÆÓÚ¡°Èç¹û²»ÓÃnuget.org¾ÍÎÞ·¨ÔËÐС±£¬ÕâÖÖÇé¿öÔÚJavaϵͳÖÐҲͬÑù´æÔÚ¡£
NuGet£¬ÄãÒ²¿ÉÒÔ´´½¨Äã×Ô¼ºµÄMaven°æ±¾¿â¡£Artifactory¾ÍÄÜÈÃÄãÕâô×ö¡£
Gradle
GradleÊÇÒ»¸ö¸üºÃµÄMaven¡£Ëü»ùÓÚGroovyËùÒÔÄã¿ÉÒÔ°ÚÍѸ´ÔÓµÄXML²¢ÇÒ´´½¨Ò»¸ö¸üºÃµÄÒÀÀµ¹ØÏµ¹ÜÀíµÄ·½·¨¡£
ÎÒÕýÔÚ³¢ÊÔ¸ü¶àµÄʹÓÃGradle¡£
IntelliJ IDEAµÄ¹¹½¨
ËäÈ»IDE¸ü¶àµÄÊÇÊôÓÚ¹¤¾ß²¿·Ö£¬IntelliJ IDEAÒ²ÌṩÁËËü×Ô¼ºµÄ¹¹½¨ÏµÍ³¡£È»¶øÄã½ö½öÄܹ»ÔÚºÏÊʵĻ·¾³ÏÂʹÓÃËü£¬Ò²¾ÍÊÇIntelliJ
IDEAºÍTeamCityµÄ»·¾³¡£
¿ò¼ÜºÍ¿â
ÕâÀïÓдóÁ¿µÄ¿ò¼ÜºÍ¿â£¬ÎÒÖ»»á¶ÔÎÒÒѾ֪µÀµÄ»òÕßÎÒÐèÒªµÄ²¿·Ö½øÐнéÉÜ¡£Èç¹ûÄãÓиüºÃµÄÍÆ¼ö£¬Çë¸øÎÒ·¢Ò»¸öpull
request¡£
JSONÐòÁл¯
Jackson ¨C ÎÒÓùýËü£¬¸Ð¾õºÜºÃ¡£
µ¥Ôª²âÊÔ
Ï൱¶àµÄµ¥Ôª²âÊÔ¿ò¼Ü£º
JUnit ¨C ×÷ΪÊÂʵÉϵıê×¼£¬ËüÏ൱²»´í£¬²¢ÇÒ±»Öڶ๤¾ßÖ§³Ö¡£
Spek ¨C ·ÅÆú¡£ÕâÊÇÎÒ×Ô¼ºµÄ¿ò¼Ü£¬µ«ÎÒÈÔÈ»ÔÚÓã¬ÖµµÃÒ»Ìá¡£ËüÄܸüºÃµØÖ§³ÖDSL£¬ÖÁÉÙÎÒÕâôÈÏΪ¡£
JBehave ¨C Dan NorthµÄÔʼJBehave¿ò¼Ü¡£
TestNG ¨C JUnitµÄÌæ´úÆ·¡£ÎÒÓõIJ»¶à£¬ËùÒÔ²»¹ý¶àÆÀÂÛ¡£
Ä£Äâ¿ò¼Ü
×î½üÎÒҲûģÄâʲô¿ò¼Ü£¬µ«ÊÇÎÒÎÒÔø¾ÓùýÒ»¸ö£º
Mockito
ÈÕÖ¾
SLF4J ¨C ÕâÊÇÔÚJVMƽ̨ÉÏÓÃÓڼǼÈÕÖ¾×î³£¼ûµÄ·½Ê½¡£Ê¹ÓÃËü¿ÉÒÔÈÃÄ㣨ÀíÂÛÉÏ£©±ä¸üÈÕÖ¾²¢ÇÒÔÊÐíÑ¡ÔñÄãËùÐèÒªµÄ¿â¡£
IoCÈÝÆ÷
Guice ¨C À´×ÔGoogle£¬ÎÒÓùýËü£¬Ï൱²»´í¡£
Spring ¨C À´×ÔSpring¿ò¼Ü£¬ÎÒ²»È·¶¨ÄãÊÇ·ñ¿ÉÒÔ²»ÓÃÅäÖÃXML¾ÍʹÓÃËü£¬ÒòΪÎÒҲûÓùý¡£
HTTP¿Í»§¶Ë
ÎÒÕýʹÓñê×¼µÄApache Commons£¬Ò²½ÓÊܸüºÃµÄÑ¡Ôñ¡£
ApacheµÄHTTP¿Í»§¶Ë ¨C ÎÒÕýÔÚʹÓÃËü¡£·Ç³£ÐèÒªÒ»¸ö·â×°Æ÷(Wrapper)¡£
Web¿ò¼Ü
Ðí¶àµÄWeb¿ò¼Ü¶¼»ùÓÚJava Servlet APIµÄͨÓýӿڡ£ÕâÀàËÆÓÚOWIN.
Ó¦ÓÿÉÒÔÍйÜÔÚGlassFish£¬Jetty£¬Apache TomCatÉÏ¡£
˳±ã˵һÏ£¬OracleÐû²¼Ëü½«Í£Ö¹¶ÔGlassFishÉÌÒµ°æµÄÖ§³Ö£¬ËüµÄÖ÷Òª´«²¥Õߣ¬Arun Gupta£¬×î½üÀ뿪OracleÈ¥ÁËRedHat¡£ÏÖÔÚËüÈÃWildFlyÀ´×÷ÎªÌæ´ú¡£
¶ÔÓÚWeb¿ª·¢¶øÑÔ£¬Ò»¸ö·Ç³£Ê±÷Ö¶øÇÒÇáÁ¿¼¶µÄÑ¡ÔñÊÇVert.x¡£Ëü»ùÓÚNettyµÄ»ù´¡ÉϹ¹½¨µÄ,ÄãÉõÖÁ¿ÉÒÔʹÓò»Í¬µÄÓïÑÔ£¬ÈçJava,
JavaScript, Ruby¡£
ÍøÂç
Netty ¨C ¸ßЧµÄÒ첽ʼþÇý¶¯¿ò¼ÜÀ´±àд¸ßÐÔÄܵÄwebÓ¦ÓóÌÐò¡£ËüÊÇ´ÓͨÐŲã³éÏó³öÀ´µÄ£¬ËùÒÔÄã¿ÉÒÔʹÓÃHTTP£¬SocketsµÈµÈ¡£
ÆäËü¿âºÍ¹¤¾ß
JodaTime ¨C JavaÖÐʱ¼äºÍÈÕÆÚµÄ¹ÜÀí±È.NET»¹Òª´àÈõ¡£Ê¹ÓÃJodaTime¿ÉÒÔÓÐЧ½â¾öÕâ¸öÎÊÌâ¡£ÕâÆðÔ´ÓÚJon
SkeetµÄNodaTime¡£
Reflections ¨C ʹ·´Éä¸ü¼ÓÍêÃÀ¡£
Apache Commons ¨C Ðí¶à¾³£Óõ½µÄСÐͿ⡣
Ô¼¶¨
ËäȻԼ¶¨Ôںܴó³Ì¶ÈÉÏÊǸù¾ÝÄãÑ¡ÔñµÄ±à³ÌÓïÑÔÀ´¾ö¶¨£¬µ«ÊÇ»ò¶à»òÉÙ¶¼ÓÐһЩ¹²Í¬µÄÔ¼¶¨¡£
ÃüÃû¿Õ¼ä
ÃüÃû¿Õ¼äÊÇÄæÐòµÄ£¬»»ÑÔÖ®£¬ËüÒÔ¶¥¼¶ÓòÃû¿ªÊ¼£¬È»ºó²ÅÊǹ«Ë¾/×éÖ¯ÓòÃûµÈ¡£
org.hadihariri.spek.runners |
²»ÐÒµÄÊÇ£¬Ä³Ð©Ê±ºò£¬ËüÈ¡¾öÓÚÿ¶ÎÊÇ·ñ³ÉΪÁËÒ»¸öÎļþ¼Ð¡£ÄÇÒâζ×Å×îÖÕÄã»áÔÚGitHubµÃµ½£º

ÐÒÔ˵ÄÊÇÈç¹ûÄãʹÓÃÁËÒ»¸ö²»´íµÄIDE£¬ÕâЩ¶¼²»ÊÇÎÊÌâ¶øÇÒÒ×ÓÚ¹ÜÀí¡£
ÊôÐԺͷ½·¨Ãû³Æ
Èç¹ûÄãÔÀ´ÊÇѧC#µÄ£¬¶øÏÖÔÚÕýÔÚʹÓÃÏñJava£¬Scala»òÕßKotlin£¬Ô¼¶¨½«ÒÔǰÃüÃûµÄ×ֶΣ¬ÊôÐÔÒÔ¼°·½·¨½øÐе߸²¡£ËüÃǶ¼ÒÔСÍÕ·å(lowerCamelCase)µÄÐÎʽÃüÃû¡£
Èç¹ûÄ㿪ʼʹÓÃJava£¬¿ÉÒÔä¯ÀÀÀ´½øÐбȽϡ£
¹¤¾ß
µ±Äã°²×°JDKʱÄã¿ÉÒԵõ½Ò»¸ö±àÒëÆ÷£¨javac£©ºÍÒ»¸öjar´´½¨Æ÷£¨jar£©£¬javadoc(ÓÃÓÚ´´½¨JavaÎĵµ)ÒÔ¼°Ò»Ð©ÓÐÓõŤ¾ß¡£ÔÙ¼ÓÉÏÒ»¸öÎı¾±à¼Æ÷Äã¾Í¿ÉÒÔ´´½¨²¢ÔËÐÐÒ»¸öÓ¦ÓóÌÐòÁË¡£
¹ØÓÚIDE
JavaÁìÓòÖÐÓÐÈý¸öÖ÷ÒªµÄIDE£º
NetBeans
Eclipse
IntelliJ IDEA
ÕâÈý¸ö¶¼ÊÇ×ÔÓÉÔËÓªµÄ¡£Èç¹ûÄãÏëÒªÓÐһЩ¶îÍâµÄ¿ò¼ÜÖ§³Ö£¬IntellIJ
IDEA¾ÍÓÐÒ»¸ö×îÖÕµÄÉÌÒµÔËÐа棬»»¾ä»°Ëµ£¬ÕâÓÐÏÊÃ÷µÄÆóÒµÌØµã¡£ÍêÕû±È½Ï
ËäÈ»Eclipse¿ÉÄÜÊÇ×î³£Óõļ¯³É¿ª·¢»·¾³£¬µ«ÎÒ»¹ÊÇÑ¡ÔñÓÃIntelliJ
IDEA¡£Èç¹ûÄãÏëÓÃReSharper£¬ÄãÒ»¶¨»áϲ»¶IntelliJ IDEA¡£µ±È»£¬Äã¿ÉÒÔ˵ÎÒÆ«Ì»Ëü¡£
³ÖÐø¼¯³É
ÔÚ³ÖÐø¼¯³É¹¤¾ßµÄ·½Ãæ,.NETºÍJVMÓÐÖî¶àÏàËÆÖ®´¦¡£ÊÂʵÉÏ£¬ËüÃÇÖеÄÐí¶à¶¼ÊÇ»ùÓÚJVMµÄ¡£
TeamCity ¨C Ìṩһ¸öÃâ·Ñ°æ¡£
Jenkins ¨C ÊÇ´ÓHudsonÖвð·Ö³öÀ´µÄ¡£
Ëæ»ú¹¤¾ß
ÎһὫÎÒ·¢ÏÖÓÐÓõŤ¾ß¼¯¼ÓÈë½øÀ´¡£
JRebel ¨C Awesome plugin to IntelliJ
IDEAµÄÒ»¸öÏ൱°ôµÄ²å¼þ£¬ÆäËüIDEµÄ´úÂë¿ÉÒÔÖ§³ÖÈȲå°Î£¬»»¾ä»°Ëµ¾ÍÊÇ¿ÉÒÔ²»¾¹ý±àÒë¾ÍÔËÐдúÂë¡£
YourKit ¨C Java·ÖÎöÆ÷
Õ¾ÔÚVisual StudioÓû§½Ç¶È¿´IntelliJ IDEA
ÕâÒѾ±äΪ×Ô¼ºµÄÖ¸ÄÏ
ÔÚJVMÉϹ¤×÷
Õⲿ·ÖÃèÊöÁËJVMÉϵij£¼ûÇé¿ö¡£´ó¶àÊýÀý×ÓÊÇ»ùÓÚKotlinµÄµ«ÊÇÒ²¿ÉÒԱȽÏÈÝÒ×µØÊÊÓ¦ÆäËüÓïÑÔ¡£
Àà¼ÓÔØÆ÷
JVMÉϵÄÀà¼ÓÔØÆ÷¶ÔÓÚÕâÆªÖ¸Ä϶øÑÔ¹ýÓÚÅÓ´ó£¬ËùÒÔÎÒÖ»Ïë¼òµ¥½éÉÜһϡ£
ÔÚ.NETÖÐÓÐÒ»¸ö¼¯ºÏÀàÈ¥¼ÓÔØÆäËüÀà¡£ÔÚJVMÉÏÓµÓÐÀà¼ÓÔØÆ÷¡£Ëü²»»áÊǵ¥¸ö´æÔÚ£¬»»¾ä»°Ëµ£¬Àà¼ÓÔØÆ÷ÍùÍù¶àÓÚÒ»¸ö¡£
ÓÃÓÚÆô¶¯ÄãµÄÓ¦ÓóÌÐòµÄĬÈÏÀà¼ÓÔØÆ÷¿ÉÒÔͨ¹ýʹÓÃÀà¼ÓÔØÆ÷Öеķ½·¨getSystemClassLoader()£º
val classLoader = ClassLoader.getSystemClassLoader() |
²»Òª³¢ÊÔÈ¥´´½¨Ò»¸öÀà¼ÓÔØÆ÷µÄʵÀý£¬ÒòΪËüÊÇÒ»¸ö³éÏóÀà¡£ÓÐһЩÀà¼ÓÔØÆ÷µÄʵÏÖ¾³£Ê¹Óã¬ÆäÖÐÖ®Ò»¾ÍÊÇURLÀà¼ÓÔØÆ÷¡£
¹ØÓÚÀà¼ÓÔØÆ÷Ò»¸ö·Ç³£ÖØÒªµÄ¹ÛµãÊÇ£¬Ã¿¸öÀà¼ÓÔØÆ÷ÓÐÒ»¸öÖ¸Ïò¸¸Àà¼ÓÔØÆ÷µÄÊôÐÔ¡£
ÕâÊÇÈçºÎÓ°ÏìÀà¼ÓÔØÆ÷µÄÄØ£¿µ±Äã³¢ÊÔ¼ÓÔØÒ»¸öÀàʱ£¬JVMÊ×ÏȽ«»á³¢ÊÔ¼ÓÔØ¸¸Àà¡£Èç¹û¸¸À಻ÄܼÓÔØÕâ¸öÀ࣬ÄÇôÄã×Ô¼ºµÄÀà¼ÓÔØÆ÷¾Í»á½øÐмÓÔØ¡£
Àà¼ÓÔØÆ÷£¬°üÀ¨URLÀà¼ÓÔØÆ÷ÔÊÐíÄãÔÚ´´½¨ÊµÀýʱָ¶¨Ò»¸ö¿É¹©Ñ¡ÔñµÄ¸¸Àà¡£
Èç¹ûûÓб»×ÓÀàûÓн«Àà¼ÓÔØ³É¹¦£¬ÄÇôϵͳĬÈϵÄÀà¼ÓÔØÆ÷»á¸ù¾Ý¸ø¶¨µÄclasspathÀ´½øÐмÓÔØ²Ù×÷¡£
ͬʱ£¬JVMÖеÄÀàʶ±ðÓë.NETÖкÜÏàËÆ£¬ÄǾÍÒâζ×Å´Ó²»Í¬µÄÀà¼ÓÔØÆ÷ÖмÓÔØÏàͬµÄÀཫ³öÏÖ²»¼æÈݵÄÇé¿ö£¬¼´Ê¹ÊÇÔÚÏàͬµÄÁ´ÖÐÒ²ÊÇÈç´Ë¡£
´´½¨Äã×Ô¼ºµÄÀà¼ÓÔØÆ÷
Äã²»½ö¿ÉÒÔ´ÓClassLoaderÀàÖд´½¨Äã×Ô¼ºµÄÀà¼ÓÔØÆ÷£¬¶øÇÒÄãÒ²¿ÉÒԸıäĬÈϵÄÀà¼ÓÔØÆ÷£¬¶øÕâЩÔÚ.NET¼¸ºõ²»¿ÉÄÜ¡£
¹ØÓÚÀà¼ÓÔØÆ÷µÄ¸ü¶àÐÅÏ¢
¹ØÓÚÀà¼ÓÔØÆ÷µÄÎÄÕ·dz£¶à¡£ÕâÀïÓÐһЩÎÒÕÒµ½µÄ£º
Extensive tutorial on Class Loaders
by Zeroturnaround
The Basics of Java Class Loaders
Ted Newards¡¯s Papers on Finding, Loading
Classes and more
Oracle¡¯s Papers on Java Class Loading
½öʹÓÃGoogle¾Í¹»ÁË£¬ÒòΪͨ¹ýËü¿ÉÒÔÕÒµ½³ÉǧÉÏÍò¹ØÓÚ¸ÃÖ÷ÌâµÄ²©¿Í£¬ÎÄÕºÍÂÛÎÄ¡£
´Óµ±Ç°¶¯Ì¬Àà¼ÓÔØÄ£¿é
ÔÚ.NETÖУ¬ÏëÒª¼ÓÔØ´Óµ±Ç°ÅäÖÃÖмÓÔØÒ»¸öÀ࣬Äã¿ÉÒÔÕâÑù×ö£º
var assembly = Assembly.GetExecutingAssembly();
var loadedClass = assembly.GetType("Loader.Customer");
|
¼ÓÔØÆ÷Êǵ±Ç°Óû§ËùÔÚÃüÃû¿Õ¼äµÄ¼¯ºÏ¡£ÕâЩ¹¤×÷µÄÉúÃüÖÜÆÚºÍµ±Ç°¼¯ºÏµÄÀàÒ»Ö¡£
ÔÚJVMÖоÍÊÇ:
val classLoader = ClassLoader.getSystemClassLoader()
val loadedClass = classLoader?.loadClass("org.loader.Customer")
|
ÕâÊÇKotlinµÄÓ÷¨£¬Ëü±íʾ£¬Èç¹ûÀà¼ÓÔØÆ÷²»Îªnull£¬¾ÍÖ´ÐÐÕâ¸ö²Ù×÷¡£ËüÊÇÏÂÃæÐ´·¨µÄ¼ò»¯°æ£º
if (classLoader != null) {
val loadedClass = classLoader.loadClass("org.loader.Customer")
}
|
´ÓÁíÒ»¸öÄ£¿éÖмÓÔØÀà
ÔÚ.NETÖУ¬Äã»áÕâô×ö£º
var assembly = Assembly.LoadFrom(@"C:\Folder\SampleModule.dll");
var loadedClass = assembly.GetType("SampleModule.Customer");
|
ÔÚJVMÉÏ£¬Äãͨ³£Ê¹ÓÃURLÀà¼ÓÔØÆ÷£¬½«URLÐòÁд«µÝ½øÈ¥£¬¶ø²»ÊÇ´«µÝÎļþ¼Ð¡£
ʹÓÃURLÀà¼ÓÔØÆ÷µÄºÃ´¦¾ÍÊÇÄã¿ÉÒÔ´Ó´ÅÅ̺ÍÍøÂçµÈµØ·½¼ÓÔØ¡£
Èç¹ûÄãµÄÀà×÷Ϊһ¸öJAR´ò°ü,ÄÇôÄã¿ÉÒÔÕâô¶¨ÒåJARÎļþÃû:
val url = URL("file:///path-to-folder/sampleModule.jar")
val urls = array(url)
val classLoader = URLClassLoader.newInstance(urls)
val loadedClass = classLoader?.loadClass("org.sampleModule.Customer")
|
ÄãÍêÈ«¿ÉÒÔʹÓÃÎļþ¶ø²»ÊÇURL£¬Í¬Ê±Ö¸ÏòÒ»¸öÎļþ£¬Õâ¸ü¼ÓÆÕ±é£¬µ«Ö®ºóÄãÐèÒª½«ÎļþתΪURL:
val file = File("/path-to-folder/sampleModule.jar")
val url = file.toURI().toURL()
|
Èç¹ûÄãµÄÀàÔÚÎļþ¼ÐÖÐÒÔµ¥¶ÀµÄ.classÎļþÐÎʽ´æÔÚ£¬ÄãÒªÖ¸¶¨Îļþ¼ÐÃû£º
val url = URL("file:///path-to-root-folder/")
val urls = array(url)
val classLoader = URLClassLoader.newInstance(urls)
val loadedClass = classLoader?.loadClass("org.sampleModule.Customer")
|
ΪʲôÎÒûÓгõʼ»¯URLÀà¼ÓÔØÆ÷£¬¶øÊ¹ÓÃnewInstance·½·¨£¿ÏÔÈ»ËüµÄºÃ´¦¾ÍÊÇÈç¹û×°ÓÐSecurity
ManagerµÄ»°¾ÍÄܵ÷ÓÃsecurityManager.checkPackageAccess·½·¨¡£
ÔÚʹÓÃĿ¼ʱÒÔÏÂÁ½µã¶ÔÓÚ½â¾öÄãµÄÎÊÌâ·Ç³£ÖØÒª£º£¨²»ÊÇJARÎļþ£©£º
È·±£Äã´«µÝµÄURL»òÎļþµÄºó׺ÕýÈ·¡£
È·±£ÄãÔÚ¸ùÎļþ¼ÐÏ£¬ÄÇÒâζ×ÅÊ²Ã´ÄØ£¿µ±Äã±àÒëorg.sampleModule.CustomerÕâ¸öÀàʱ£¬Ëü²úÉúÁËÒ»¸öÊä³ö£ºoutput-root-folder/org/sampleModule/Customer.class
¡°.¡±Ìæ»»³ÉÁË¡°/¡±¡£ÕâÒâζ×ÅURL¼ÓÔØÆ÷ÆÚÍûÄãÖ¸Ïò¸ùÎļþ¼Ð£¬¶ø²»ÊÇÃüÃû¿Õ¼ä¿ªÊ¼µÄµØ·½¡£loadClass·½·¨²ÅÐèÒªÌṩÍêÕûµÄÃüÃû¿Õ¼ä¡£
¸Ðл@orangy°ïÖúÎÒ½â¾öÕâ¸öÂé·³¡£
»áÒé
½üÄêÀ´¼´Ê¹ÎÒ²»½øÐиü¶àµÄJava¿ª·¢£¬µ«ÊÇÎÒÒ»Ö±ÔڲμÓÓйØJavaµÄ»áÒé¡£ ÕâÀïÓÐһЩÎҲμӻáÒéºóÈÏΪ±È½Ï²»´íµÄ½¨ÒéºÍ¸ÐÊÜ£º
Devoxx ¨C ×î´óµÄ°æ±¾ÔÚ°²ÌØÎÀÆÕ£¬µ«ÏÖÔÚÔÚ·¨¹úºÍÓ¢¹ú¡£
JAX ¨C µÂ¹úµÄÒ»¸ö³¤ÆÚ´óÐÍ»áÒ顣һȺˮƽÏ൱µÄÈ˵ĻáÒé!
JavaZone ¨C ÕâÏñÊÇûÓÐJavaµÄ¿ª·¢Õ߻ᡣµ«ÊÇÖ÷Òª¼¯ÖÐÔÚŲÍþ¡£
JavaOne ¨C ÆÄ¾ß¹æÄ£¡£ËüÊÇJavaÁìÓòµÄ¼¼Êõ´ó»á¡£
ÕâÀïÒ²ÓÐÐí¶à¹ØÓÚ¡°¿çƽ̨¡±µÄ»áÒéNDC£¬QCon£¬YOW!£¬GOTO£¬µÈµÈ¡£
±ä¸üÈÕÖ¾
Ö¸Äϱä¸ü¼Ç¼¡£
ÈÕÆÚ ±ä¸ü
2013Äê12ÔÂ30ÈÕ ¸üÐÂÁËJavaFXÃèÊö¡£×·¼Ó¡°¸ü¸ÄÈÕÖ¾¡±²¿·Ö
2014Äê01ÔÂ06ÈÕ ¸üÐÂÁ˱êÌâ²¢Çҹ̶¨Ìí¼ÓÁËIntelliJ IDEAÖ¸ÄϵÄÁ´½Ó
2014Äê01ÔÂ09ÈÕ ×·¼ÓÁËÀà¼ÓÔØ²¿·Ö
|