1.javaä¸è¬ç¨ä»ä¹è½¯ä»¶ç¼åï¼
2.请问bug,error和Exception的区别
3.FindBugs源码分析工具使用指南
4.在测试/开发过程中遇到过哪些印象深刻的bug?
5.Java开发遇到bug不要怕,手把手教你debug!
6.如果在Java1.7中程序写了一半,拿到1.8中完成,在1.7中还能运行吗
javaä¸è¬ç¨ä»ä¹è½¯ä»¶ç¼åï¼
ç°å¨ä¼ä¸javaå¼åä¸è¬ä½¿ç¨åªäºè½¯ä»¶å¼åï¼
é对ç°å¨ä¼ä¸çè¯ï¼å ¶å®ä½¿ç¨ç软件æ¯å·®ä¸å¤çï¼ä¼ä¸è¶å¤§ï¼å¯è½æ¶åå°çå·¥å ·æ´å¤äºãå¦ä¹ Javaå¼åæ¨èåéæè²ï¼åéæè²å£ç¢å¾ä¸éï¼å®å强大ï¼èä¸åéçä¼ä¸ä½¿å½å°±æ¯è´åäºå¸®å©æ´å¤è¿·è«çå¦çå®ç°ä»ä»¬ç梦æ³ã
å举å¦ä¸ï¼
1ããideaãè¿ä¸ªæ¯ç®åæ主æµçJavaå¼åå·¥å ·ï¼åºè¯¥ä¹æ¯ä½¿ç¨æå¤çäºï¼åå®ç»å¸¸æ¿åºä¸å讨论çæ¯ãEclipseãï¼è¿ä¸¤ä¸ªæ¯Java使ç¨æ广æ³çå¼åå·¥å ·ï¼
2ããgithub/gitlabãè¿ä¸¤ä¸ªç½ç«ä¸»è¦æ¯ç¨äºä»£ç 管ççï¼ç®å使ç¨gitçæ¯ä½¿ç¨svnçè¦å¤å¾å¤ï¼
3ããmavenãè¿ä¸ªå ¶å®åºè¯¥ä¸è½ç®å·¥å ·ï¼æ¯ç¨äºjarå 管ççï¼
4ããjira/ç¦ é/bugzillaãè¿å 个æ¯ç¨äºé¡¹ç®ç®¡çï¼æµè¯æbugç¨çï¼
5ããjenkinsãç¨äºåæç»éæå项ç®ç¼è¯çï¼
6ããconflunece/è¯éãè¿ä¸¤ä¸ªä¸è¬æ¯ç¨äºå¢éåä½åæ档记å½çï¼æ¯å¦éæ±ææ¡£ï¼å¼åææ¡£ï¼æµè¯ææ¡£çï¼
7ããstarUML/processON/planUMLãè¿äºä¸è¬ç¨äºç»æµç¨å¾ï¼æ¶åºå¾ä½¿ç¨çï¼
8ããAxureãè¿ä¸ªæ¯ç¨äºäº§å使ç¨ï¼ç»ååprdçï¼
æ³è¦äºè§£æ´å¤javaå¼åçç¸å ³ä¿¡æ¯ï¼æ¨èå¨è¯¢åéæè²ãåéå±ç²¾å¾æ²»ï¼ä¸æ¹æè²åå¿ãåä¸å¹´æ¥ï¼åé以æ¿ç为å¼å¯¼ï¼ä¸æå®åå½å ç¹è²ç°ä»£èä¸æè²ä½ç³»å»ºè®¾ï¼å ååæ¥æç å¸èµéä¼ä½¿å½ï¼æ建åè´¨æè²ï¼å 大åæ°å人æå¹å »å度ï¼ä¸ºç»æµåå±æä¾æºå人æåæºåæ¯æï¼æ为æ°æ¶æèä¸æè²åå±çæ°æ¹åï¼å¨åè¡ä¸ä¸æå¾é«çç¾èªåº¦ã
å¦ä¹ javaéè¦ä¸è½½ä»ä¹è½¯ä»¶ï¼
1ãå®è£ JDKï¼å°å®ç½ä¸å»ä¸è½½JDK1.6ï¼ä¸éè¦ä½¿ç¨ææ°ç1.8ï¼å¾å¤è½¯ä»¶ä¸ºäºå ¼å®¹æ§é½è¿å¨1.6ä¸è·çãå¦ä¹ 好åºç¡ä¹åï¼å使ç¨éæå¼åç¯å¢çå¼åå·¥å ·ï¼IDEï¼ï¼æ¨è使ç¨InteliJ(ä»è´¹ç)ï¼åè½å¾å¼ºå¤§ï¼æºè½ãå è´¹çè¯ï¼æ¨è使ç¨eclipseå§ã
MyEclipseåè½å¾å¼ºå¤§ï¼å»ºè®®æ¯å ä¸è¦ä½¿ç¨ï¼å¼åå·¥å ·ä»è®°äºæ¬--UltraEdit---JBuilder--MyEclipseä¸ç¹ç¹è¿æ¸¡
åå¦javaï¼ä¸è¬é½æ¯ä»æ§å¶å°åºç¨ç¨åºå¼åå¼å§ç(æåå¼å§å欢å¨è®°äºæ¬ä¸å代ç )ï¼å¨cmdä¸è°è¯ï¼é¦å ä½ è¦ä¸ºä½ ççµèæ建好å¼åç¯å¢ï¼ä½ éè¦å¨sunç½ç«ä¸(å ¶å®ä¸è½½ç«ä¹æ)ä¸è½½ä¸ä¸ªå«JDKçä¸ä¸ï¼å®è£ å®æåè°è¯æåä½ å°±å¼å§åä½ ç第ä¸ä¸ªjavaç¨åºäºã
ç¨è®°äºæ¬åäºä¸æ®µä½ åä¼åç°ï¼è¿TM太æ¯ç¥äºï¼ç¨åºå¼åå¦æåªæ¯è¿æ ·ï¼è¾è¾è¦è¦å天æ£çé±ï¼è¿ä¸å¦å»æ¬ç ãææ°´æ¥çå®å¨(æè¿æ ·è¯´ï¼å¹¶ä¸æ¯è¯´è®°äºæ¬ä¸å¥½ï¼çæ°çç¨åºåï¼æéç±çå°±æ¯è®°äºæ¬ï¼æ们ä½ä¸ºåå¦è ï¼è¿æ¯å¿ ç»ä¹è·¯)ï¼è¿æ¶åä½ å°±è¦èèæ¢äºï¼UltraEditãè¿æJBuilderï¼é½æºå¥½ç¨ç
éçä½ å¦ä¹ çè¶æ¥è¶æ·±ï¼ä½ å°±ä¸åååªå±éäºæ§å¶å°å¼åï¼å°±ä¼æ ¢æ ¢å¯¹webå¼åæå ´è¶£äº(ä¾å¦ä½ ç»å¸¸ä½¿ç¨çç½é¶ï¼ç°å¨é¶è¡çç½ä¸é¶è¡äº¤æç³»ç»é½æ¯ç¨jsp(j2eeçæ ¸å¿ææ¯)åç)ï¼è¿æ¶åä½ éè¦æ´å¼ºå¤§ç软件æ¥æ¯æä½ çå¼å(ä½ åºå»ææ¶ï¼æ¿çæ£åæä¹æé£å®¶ä¼é½ä¸æ»ï¼è¿æ¶åä½ å°±è¦èèæ¢åäºï¼å¼åå·¥å ·åªæ¯ä½ æå©ç¨çä¸ä¸ªå·¥å ·ï¼éè¿å®æ¥è¾¾å°ä½ çç®ç)
åwebå¼åï¼å¾å¤äººå欢å欢ç¨Dreamweaverå æ页é¢è®¾è®¡å¥½ç¶ååææ½å°Eclipseä¸åè¿è¡ä¸å¡é»è¾çå ¶å®çå¼åï¼æçæ¶åæ ¹æ¬å°±æ¯ä¹±ä¸å «ç³ï¼æç建议æ¯è¿ä¸è¥¿ä½ æ好å«ç¨ï¼ä½ æå¨ç¼ååºæ¥çä¸è¥¿ï¼ä½ èªå·±æ´å¥½æ§å¶
å½ä½ çweb页å好çæ¶åï¼ä½ éè¦æå®é¨ç½²å¨æå¡å¨è½¯ä»¶ä¸ï¼è®©å®å¨èµ·æ¥å¨æå°æ¾ç¤ºå¨ä½ çç¼åï¼è¿æ¶åä½ éè¦ä¸æ¬¾æå¡å¨è½¯ä»¶ï¼ç°å¨æå¡å¨å·¥å ·åtomcatä¹ç±»çé½æ¯å è´¹çï¼ä½ å¯ä»¥åç½ä¸ä¸è½½ï¼æä¸æ¢ä¹±ç²é¾æ¥ï¼è¦ä¸å¯è½æç»ä½ ç解çä¼è¢«ç¾åº¦å±è½æç
åjavaå¼åï¼å¦ææ¶åå°äºwebå¼åï¼a.JSPb.åºæ¬ç½é¡µè®¾è®¡c.JavaScriptèæ¬d.æå¡å¨ææ¯e.æ°æ®åºf.ççççè¿äºä½ é½è¦æ¶çï¼å¤çä¸äºçµå书ï¼è§é¢ï¼ä¸ç½æ¥ä¸äºèµæï¼å¯¹ä½ ä¼æå¾å¤§ç帮å©ï¼ä¸å®è¦å¤å!
Javaä¸æç»äººçæè§å¾é¾ï¼ä½åªè¦ä½ åªåï¼ä¼è¶å¦è¶ç®åï¼.NETä¸æå¾ç®åï¼ä½è¶å¦è¶æ·±,è¯è¨æ¯ç¸éçï¼å½ä½ æä¸å¤©å¨javaä¸æ¸¸åæä½çæ¶åï¼ä½ å¦ä¹ å ¶å®è¯è¨çæ¶åï¼ä¼æ¯å«äººå¿«ä¸äºç
åå¦è ç¨ä»ä¹å¼å软件æ¥ç¼åJAVAç¨åºï¼ç¨myeclipseæè eclipseï¼è®°äºæ¬é½å¯ä»¥ã
1.åå¦è çè¯ä¸å»ºè®®ä¸æ¥å°±ç¨IDEå¼åå·¥å ·æ¯å¦è¯´EclipseãMyEclipseãIntelliJIDEAãnetbeanãä½æ¯ä¹å¯ä»¥ä½¿ç¨è¿äºï¼ä¸å»ºè®®çåå ä¸ä¾¿äºä½ äºè§£JavaAPIï¼åç¸å ³çç¼è¯åçï¼ç¼è¯è¿ç¨ä¹ç±»çã主è¦æ¯å°±æ¯çæåºç¡ã
2.åå¼å§å¯ä»¥ä½¿ç¨è®°äºæ¬ãeditplusãnotepadï¼è¿äºå·¥å ·çè¯ï¼æ¯è¾å纯ï¼ä½æ¯å¯è½ä¼ç»åå¦è å¶é ä¸äºä¸å¿ è¦ç麻ç¦ï¼å½±åå¦ä¹ ç积ææ§ã
3.ä¼è®©ä½ å¿«éæ¾å°ç¼ç¨çå¿«æã2çè¯å¦æä½ æå®äºä½¿ç¨IDEçè¯ä¹å°±æ¯å¦æ°å®¶çã并ä¸å¯¹äºåºç¡ä¹ä¼äºè§£çæ¯è¾å¤,å 为å¨ä½¿ç¨2çè¿ç¨ä¸ä½ ä¼ç¯ä¸å¾å¤é误ï¼å½ç¶å¤§å¤æ°å¯è½é½æ¯æ¼åé误ï¼ä½æ¯è¦å¤§èè¯éï¼ä¸è¦æã
4.ä¹å¯ä»¥ä½¿ç¨è®°äºæ¬ç¼è¾ä¿åæ ¼å¼ä¸º.javaçæ件ï¼ç¶åå®è£ JDKï¼ä½¿ç¨cmdå»ç¼è¯æ§è¡ã
JAVAç¼ç¨æ¯ç¨ä»ä¹è½¯ä»¶çï¼JAVAç¼ç¨å¸¸ç¨ç软件ï¼
1ãEclipseï¼
Eclipseæ¯ä¸ä¸ªå¼æ¾æºä»£ç çãåºäºJavaçå¯æ©å±å¼åå¹³å°ãå°±å ¶æ¬èº«èè¨ï¼å®åªæ¯ä¸ä¸ªæ¡æ¶åä¸ç»æå¡ï¼ç¨äºéè¿æ件ç»ä»¶æ建å¼åç¯å¢ã幸è¿çæ¯ï¼Eclipseé带äºä¸ä¸ªæ åçæ件éï¼å æ¬Javaå¼åå·¥å ·ï¼JavaDevelopmentToolsï¼JDTï¼ã
2ãMyEclipseï¼
MyEclipseæ¯Eclipseçå级çï¼ä¹æ¯ä¸æ¬¾åè½å¼ºå¤§çJ2EEéæå¼åç¯å¢ï¼ç±Genuitecå ¬å¸åå¸ï¼æä¾å è´¹çåæ¶è´¹çã被èªä¸ºæ好ç¨çJavaIDEä¹ä¸ã
MyEclipseæ¯å¯¹EclipseIDEçæ©å±ï¼å©ç¨å®å¯ä»¥å¨æ°æ®åºåJavaEEçå¼åãåå¸ä»¥ååºç¨ç¨åºæå¡å¨çæ´åæ¹é¢æ大çæé«å·¥ä½æçã
3ãIntelliJIDEAï¼
IntelliJIDEAæ¯ä¸æ¬¾ç»¼åçJavaç¼ç¨ç¯å¢ï¼è¢«è®¸å¤å¼å人ååè¡ä¸ä¸å®¶èªä¸ºå¸åºä¸æ好ç¨çIDEä¹ä¸ï¼ä¸MyEclipseé½åã
å®æä¾äºä¸ç³»åæå®ç¨ççå·¥å ·ç»åï¼æºè½ç¼ç è¾ å©åèªå¨æ§å¶ï¼æ¯æJ2EEï¼Antï¼JUnitåCVSéæï¼éå¹³è¡çç¼ç æ£æ¥ååæ°çGUI设计å¨ã
4ãNetBeansï¼
NetBeansIDEæ¯ä¸ä¸ªå±¡è·æ®è£çéæå¼åç¯å¢ï¼å¯ä»¥æ¹ä¾¿çå¨WindowsãMacãLinuxåSolarisä¸è¿è¡ãNetBeanså æ¬å¼æºçå¼åç¯å¢ååºç¨å¹³å°ï¼NetBeansIDEå¯ä»¥ä½¿å¼å人åå©ç¨Javaå¹³å°è½å¤å¿«éå建Webãä¼ä¸ãæ¡é¢ä»¥å移å¨çåºç¨ç¨åºã
5ãBlueJï¼
BlueJæ¯ä¸æ¬¾æ¯æJavaç¼ç¨è¯è¨çéæå¼åç¯å¢ï¼IDEï¼ãå®åæ¬æ¯ä¸ºäºæè²ç®çèå¼åçï¼åæ¶ä¹éåäºé£äºæ³åå°å软件å¼åçå¼å人åãå®çè¿è¡éè¦JDKï¼Javaå¼åå·¥å ·å ï¼ç帮å©ãBlueJ主è¦æ¯ä¸ºé¢å对象çç¨åºè®¾è®¡æå¦èå¼åçï¼å æ¤å®ç设计ä¸åäºå ¶ä»çå¼åç¯å¢ã
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-BlueJ
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-IntelliJIDEA
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-Netbeans
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-eclipse
åèèµææ¥æºï¼ç¾åº¦ç¾ç§-MyEclipse
ç¨æ¥ç¼åJAVAç¨åºçåºç¨è½¯ä»¶æåªäºï¼1ãEclipse-IBMç©åºæ¥ç»å¼æºç¤¾åºçIDEï¼å ¶æ¬èº«å°±æ¯ä½¿ç¨Javaå¼åçã\x0d\2ãMyEclipse-æEclipseå è£ äºä¸ä¸ï¼å äºJ2EEä¼ä¸å¼åç许å¤åè½å¼ºå¤§çæ件ã\x0d\3ãNetBeans-SUNå ¬å¸èªå·±å¼åçJavaå¼åç¯å¢ï¼åè½æºå¤çã\x0d\4ãè¿æä¸äºè¶ å欢æå·¥ç¼åJava代ç çç人å欢使ç¨å¸¦è¯æ³çè²åè½ç纯ææ¬ç¼è¾å¨ç¼åJavaç¨åºï¼ä»£ç åå®åå¨å½ä»¤æ示符ä¸ç¼è¯è¿è¡ãè¿ç§æ¹å¼åªéç¨åå°é代ç æä½ä¸ºå¦ä¹ 使ç¨ï¼å¼å大å项ç®ä¸éç¨ï¼å 为æçå¾ä½ã
Javaè¯è¨ä¸æåªäºå¿ å¤çå¼åå·¥å ·ï¼æ³è¦æ为Javaææ¯å¤§ç并ä¸å®¹æï¼ææ¯å¤§çä¸ä» éè¦å ·å¤æå®çå¼åæè½ï¼è¿éè¦ææ¡å¼åå·¥å ·åæ¡æ¶ç使ç¨ï¼å¨å¼åä¸ï¼å·¥å ·çéæ©å使ç¨æ¯é常éè¦çï¼å·¥å ·çåè½ä¸å使ç¨çæ åµä¹ä¸åãä¸é¢çµèå¹è®ä¸ºå¤§å®¶å ·ä½ä»ç»Java软件å¼åå¿ å¤çå¼åå·¥å ·ã
1ãMongoDB
MongoDBæ¯ä½¿ç¨é常广æ³çå·¥å ·ï¼å ·æ跨平å°åé¢åææ¡£æ°æ®åºçä¼å¿ï¼æ¯ç°å¨ä½¿ç¨æå¤çä¸ç§æ°æ®åºãå¨ä½¿ç¨è¿ç¨ä¸ï¼æçµæ´»çæ档模åãé«å¯ç¨å¤å¶éãå¯æ©å±åçé群ï¼è¿è½è¿è¡å®æ¶çæ§çç¸å ³æä½ãITå¹è®è®¤ä¸ºå å使ç¨å页é¢é误ï¼å¤å¶éçä¸MongoDBçé´å½±æ¯å¯ä¸å¯åã
2ãElasticsearch
Elasticsearch主è¦æ¯äºæ建åå¸å¼RESTfulçæç´¢å¼æï¼ä½æ¯Elasticsearchä¸ä» ä» æ¯ä¸ä¸ªå ¨ææ¬çæç´¢å¼æï¼è¿æ¯ä¸ä¸ªå ·æåå¸å¼å®æ¶ææ¡£åå¨ï¼éé¢çæ¯ä¸ªæ°æ®é½å¯ä»¥è¢«æç´¢ãå¨ä½¿ç¨è¿ç¨ä¸ï¼è¿å ·æåå¸å¼æç´¢å¼æãåæå¼æçå®æ¶åæåè½ã
3ãCassandra
Cassandraå±äºå¼æºåå¸å¼æ°æ®åºç®¡çç³»ç»ï¼Cassandra主è¦æ¯ä½¿ç¨Javaç¼ç¨è¯è¨è¿è¡ç¼åçï¼æ以å¨JDK6以ä¸ççæ¬é½æ¯å¯ä»¥è¿è¡ä½¿ç¨çï¼ä½¿ç¨çæä½å½ä»¤åå¹³æ¶ä½¿ç¨çä¸äºæ°æ®åºç¸ä¼¼ãææå大éé¸è®¤ä¸ºåªè¦æ¯çæå ¶ä»æ°æ®åºçç¥è¯ï¼ä½¿ç¨Cassandraæ¯é常容æçã
4ãRedis
Rediså¯ä»¥è¿è¡å åæ°æ®ç»æåå¨ï¼Redisæå¾å¤å ¶ä»å·¥å ·æä¸å ·å¤çä¼å¿ï¼ä¸ä» å¯ä»¥å¨å åä¸ä¿åæ°æ®åºå 容ï¼å¹¶ä¸æ使ç¨çç£çå ·ææä¹ æ§ãRedisçæ°æ®ç±»åæ¯è®¸å¤é®å¼æ°æ®åå¨ç³»ç»æ´ä¸°å¯ï¼å¦ä¸ä¸ªä¼ç¹æ¯Rediså¯ä»¥å°æ°æ®å¤å¶å°ä»»ä½æ°åã
5ãHadoop
Hadoopæ¯è¿è¡Javaç¼åç软件æ¡æ¶ï¼ä¸»è¦ä½¿ç¨å¨åå¸å¼åå¨ã对äºé常大çæ°æ®ï¼ç¨æ·å¯ä»¥å¨ä¸ç¥éåå¸å¼åºç¡çæ åµä¸è¿è¡å¼ååå¸å¼ç¨åºï¼å¹¶ä¸è½å¤ä½¿ç¨é群å®ç°é«é计ç®ååå¨ãå¨ä½¿ç¨è¿ç¨ä¸ï¼å大éé¸ææ计ç®æºå¦é¢è®¤ä¸ºHadoopè¿è½å®ç°åå¸å¼æ件系ç»ï¼è½å¤å¯¹å¤§éçæ°æ®è¿è¡åå¨ã
请问bug,error和Exception的区别
Exception和Error都是继承了Throwable类,在java中只有Throwable类型的开放源码项目实例才可以被抛出(throw)或者捕获(catch),他是异常处理机制的基本组成类型。
Exception和Error体现了java平台设计者对不同异常情况的分类,Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应的处理。
Error是指正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如JVM自身)处于非正常状态,不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如OutOfMemoryError之类,都是开放源码软件及源码Error的子类。
Exception又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源码里必须显示的进行捕获处理,这里是编译期检查的一部分。前面我们介绍的不可查的Error,是Throwable不是Exception。
不检查异常就是所谓的运行时异常,类似NullPointerException,ArrayIndexOutOfBoundsExceptin之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译器强制要求。
FindBugs源码分析工具使用指南
探索FindBugs:Java静态分析工具的详尽使用教程</ FindBugs,这款开源神器,是Java开发者不可或缺的bug检测工具。它不仅支持直观的GUI界面,还允许通过命令行、Ant构建工具和插件进行操作。本文将详细介绍如何在命令行和Ant构建中有效利用FindBugs,以及如何定制报告以优化您的开发流程。 首先,游戏试玩源码体验站源码让我们从命令行开始。在安装了JDK 1.8.0_的基础上,你需要下载FindBugs和Apache Ant,并设置环境变量。确保将findbugs-ant.jar加入到Ant的lib目录中。一个基础的命令行用法如下:<strong>findbugs -textui -maxHeap -include filterFile.xml -html:fancy.xsl -output findbugs.html ./target/demo-1.0.0.jar</strong>
生成的HTML报告将提供一个直观的界面,让你轻松浏览检测到的bug。在Ant构建中,你需要在build.xml文件中配置findbugs,如:<strong><project name="findbugs"><property name="findbugs.home" value="C:/工具/安全/findbugs-3.0.1"/><taskdef .../><target name="findbugs"><findbugs ... sourcePath="${ basedir}/src/main/java" class location="${ basedir}/target/demo-1.0.0.jar" excludeFilter="${ basedir}/findbugs-exclude.xml"/></target></project></strong>
excludeFilter在这里扮演关键角色,允许你排除特定类,比如这个例子中,排除不包含'demo'的类:`<strong><Class name="~.*^(demo).*"/></strong>`。 在项目中,FindBugs将bug分为多个类别,包括Bad practice、Correctness等,每个类别都有特定的含义和重要性。通过HTML报告,网页源码里查看css源码你可以按照bug类型、类、文件名和行号进行筛选和查看。对于不熟悉的bug描述,官方文档提供了详尽的解释:<strong>/bugDescriptions.html</strong>。 对于多jar包的处理,rejarForAnalysis工具大显身手。在bin目录下执行`find . -name "*.jar" | xargs rejarForAnalysis`,然后使用findbugs扫描整合后的jar文件,确保bug检测无遗漏。 总的来说,FindBugs是一个强大且易于定制的工具,通过合理使用,它将大大提升你的代码质量。记住,每一步的配置和调整都是为了让你的代码更安全、更高效。现在,就去实践这些技巧,如何判断源码和仿源码让FindBugs帮助你发现并修复隐藏的bug吧!
在测试/开发过程中遇到过哪些印象深刻的bug?
在测试/开发过程中,我们经常会遇到令人印象深刻的bug。其中一个典型的例子是在处理数据集合时,如遍历并删除不需要的元素。这看似简单的过程,实则暗藏陷阱,尤其对初学者而言,稍有不慎便可能陷入问题的漩涡。
假设我们有一个数据列表,比如`["a","b","b","c","d"]`,目标是移除所有`"b"`。乍一看,这似乎只是简单的遍历和删除,但对于集合数据的操作,初学者可能会遇到问题。
让我们考虑两种常见的实现方案。首先,直接遍历并删除元素,结果往往出乎意料。
接下来,尝试使用一种更为直观的方法,从列表末尾开始遍历并删除,解决了问题。这背后的原因在于数据结构的特性。数组是连续内存的集合,删除元素时,需要重新分配内存以保持连续性。在遍历过程中删除元素时,其他元素的索引会相应改变,导致数据丢失或覆盖。
为了确保正确性,考虑使用迭代器进行遍历和删除操作,这遵循数据结构的预期行为。迭代器提供了安全的删除机制,避免了与数据结构的直接内存修改,从而减少了并发修改异常的风险。
总结来说,在处理数据集合时,对数据结构的深入理解至关重要。阅读源码能帮助我们更好地理解数据结构的内部机制,避免常见的陷阱。同时,掌握多种解决方案,根据具体情况选择合适的实现方式,能有效提升问题解决能力。
最后,分享一套JavaWeb学习资源,覆盖从基础到实战的全过程,帮助学习者系统地掌握JavaWeb技术。对于需要更多Java学习资料包(包括教程、源码、笔记、工具、课件和面试题解析)的朋友,只需后台回复“Java”,即可免费获取。
Java开发遇到bug不要怕,手把手教你debug!
我们先来看下面这段代码?你觉得会有什么问题吗?
上面代码的运行结果如下图所示,与你预想的结果一样吗?
很明显,上面的代码有问题!那该怎么解决呢?我们可以使用debug功能来进行调试。
1. Debug模式
debug是供程序员使用的程序调试工具,它可以用域查看程序的执行流程,也可以用域追踪程序执行过程来调试程序。
2. debug调试面板介绍
接下来我就给大家解释一下debug调试面板的功能:
①==>重新运行程序,会关闭服务后重新启动程序; ②==>更新程序,一般在你的代码有改动后可执行这个功能; ③==> 关闭程序; ④==> 查看所有的断点; ⑤==> 哑的断点,选择这个后,所有断点变为灰色,断点失效; ⑥==> 步过,一行一行地往下走,如果这一行上有方法不会进入方法; ⑦==>步入,如果当前行有方法,可以进入方法内部,一般用于进入自定义方法内,不会进入官方类库的方法; ⑧==>强制步入,能进入任何方法,查看底层源码的时候可以用这个进入官方类库的方法; ⑨==>步出,从步入的方法内退出到方法调用处,此时方法已执行完毕,只是还没有完成赋值; ⑩==>行到光标处,你可以将光标定位到你需要查看的那一行,然后使用这个功能,代码会运行至光标行,而不需要打断点。
3. Debug调试步骤
了解了这些基本的功能之后,我们再来看看debug的调试步骤:
3.1 如何加断点
选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可。
3.2 运行加了断点的程序
在代码区域直接右键Debug执行。
3.3 如何查看调试结果
我们可以通过查看Debugger窗口和Console窗口来查看调试结果。
3.4 解决问题
通过观察程序的执行以及变量值的改变,可以发现循环变量没有发生改变 ,所有使用debug很快就可以查找到错误。
3.5 解决后的代码
现在我们就把debug模式的使用给大家介绍完了,最后总结如下:
A. 条件断点:在有逻辑条件判断处设置断点 例如:多分支if swicth...; B. 变量断点:在关键的变量上设置断点 观察变量的值的变化; C. 方法断点:在方法的入口处设置断点 可以观察方法的执行的结果以及流程; D. 异常断点:就是在发生异常的地方设置断点 确定异常发生的情况。
现在你学会怎么使用debug了吗?可以在评论区留言,说出你的问题,我来给你解决。
如果在Java1.7中程序写了一半,拿到1.8中完成,在1.7中还能运行吗
不是特别噶古的方法 基本都能运行 只是jdk 里基础类包 有一些变化,一般都喜欢用1.7 版本老更稳定一点,我原来公司 项目都是1.7 结果出bug 我们都被逼从1.8又回来的。如果你写的是一些常见的类 常见的方法 应该没问题 都能运行