1.源代码是源码什么
2.java.lang.UnsupportedOperationException问题分析及解决
3.å¦ä½ç¨mavenå°java8åç代ç ç¼è¯ä¸ºjava6å¹³å°ç
4.Java Arrays.asList 和 new ArrayList(Arrays.asList()) 的对比
源代码是什么
说白了就是各种编程语言,你现在所用的源码所有软件都是用各种源代码编出来的,大概样子就像:
<!--STATUS OK--><html><head>
<meta /w.gif?源码q=%D4%B4%B4%FA%C2%EB&"+sQ+"path="+p+"&t="+new Date().getTime(); return true}
function al_c(A){ while(A.tagName!="TABLE")A=A.parentNode;return A.getAttribute("id")}
//--></script></head>
<body onload="document.f1.reset();" link="#CDC">
<table width="%" height="" align="center" cellpadding="0" cellspacing="0">
<form name=f1 action="/s">
<tr valign=middle>
<td width="%" valign="top" style="padding-left:8px;width:px;" nowrap>
<a href="/"><img src="/img/logo-yy.gif" border="0" width="" height="" alt="到百度首页"></a>
</td>
<td> </td>
<td width="%" valign="top">
<div class="Tit">
<a href="/ns?cl=2&rn=&tn=news&word=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'news'})">新闻</a> <span class="fB">网页</span> <a href="/f?kw=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'tieba'})">贴吧</a> <a href="/q?ct=&pn=0&tn=ikaslist&rn=&word=%D4%B4%B4%FA%C2%EB&fr=wwwt" onmousedown="return c({ 'fm':'tab','tab':'zhidao'})">知道</a> <a href="/m?tn=baidump3&ct=&lm=-1&word=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'mp3'})">MP3</a> <a href="/i?tn=baiduimage&ct=&lm=-1&cl=2&word=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'pic'})"></a> <a href="/v?ct=&rn=&pn=0&db=0&s=&word=%D4%B4%B4%FA%C2%EB" onmousedown="return c({ 'fm':'tab','tab':'video'})">视频</a> <a href="/s?lm=0&si=&rn=&ie=gb&ct=&wd=%D4%B4%B4%FA%C2%EB&tn=baidu" target="_blank" onmousedown="return c({ 'fm':'tab','tab':'dict'})">词典</a> <!--bds<a href="$bdDSURL$">硬盘</a> -->
</div>
java.lang.UnsupportedOperationException问题分析及解决
在编写代码过程中,遇到了一个令人困惑的源码报错问题:java.lang.UnsupportedOperationException。这问题源自代码中的源码一行:psParamList.remove("GPRS=1");那么,为什么会产生这种报错呢?让我们一起来深入分析并解决这个问题。源码摄影云网站源码
报错的源码源头在于psParamList的remove操作。起初,源码我们对这一现象感到不解。源码难道是源码psParamList不支持remove方法?显然,这与我们的源码预期不符。随后,源码我们查阅了Arrays.asList方法的源码源码,发现返回的源码ArrayList实际上是Arrays类的静态内部类,即Arrays$ArrayList。源码趣闲帮源码而这一类并非java.util.ArrayList。在深入源码后,我们发现Arrays$ArrayList类并未实现remove、add等方法,因此在执行这些操作时,就会触发java.lang.UnsupportedOperationException错误。
通过以上分析,汇容克源码我们已经找到了问题的根源。为了解决这个问题,我们需要对代码进行相应的调整。具体而言,我们可以将Arrays.asList方法替换为Collections.singletonList或者使用java.util.Arrays的asList方法。这样,我们便可以利用Java集合框架中的我想卖源码ArrayList类,从而实现remove等操作。通过这种方式,不仅解决了java.lang.UnsupportedOperationException错误,同时也保证了代码的正常运行。
å¦ä½ç¨mavenå°java8åç代ç ç¼è¯ä¸ºjava6å¹³å°ç
ããå¨ä¸è¬çJavaåºç¨å¼åè¿ç¨ä¸ï¼å¼å人å使ç¨Javaçæ¹å¼æ¯è¾ç®åãæå¼æ¯ç¨çIDEï¼ç¼åJavaæºä»£ç ï¼åå©ç¨IDEæä¾çåè½ç´æ¥è¿è¡Java ç¨åºå°±å¯ä»¥äºãè¿ç§å¼å模å¼èåçè¿ç¨æ¯ï¼å¼å人åç¼åçæ¯Javaæºä»£ç æ件ï¼.javaï¼ï¼IDEä¼è´è´£è°ç¨Javaçç¼è¯å¨æJavaæºä»£ç ç¼è¯æå¹³å°æ å ³çåè代ç ï¼byte codeï¼ï¼ä»¥ç±»æ件çå½¢å¼ä¿åå¨ç£çä¸ï¼.classï¼ãJavaèææºï¼JVMï¼ä¼è´è´£æJavaåè代ç å 载并æ§è¡ãJavaéè¿è¿ç§æ¹å¼æ¥å®ç°å ¶âç¼åä¸æ¬¡ï¼å°å¤è¿è¡ï¼Write once, run anywhereï¼â çç®æ ãJavaç±»æ件ä¸å å«çåè代ç å¯ä»¥è¢«ä¸åå¹³å°ä¸çJVMæ使ç¨ãJavaåè代ç ä¸ä» å¯ä»¥ä»¥æ件形å¼åå¨äºç£çä¸ï¼ä¹å¯ä»¥éè¿ç½ç»æ¹å¼æ¥ä¸è½½ï¼è¿å¯ä»¥åªåå¨äºå åä¸ãJVMä¸çç±»å è½½å¨ä¼è´è´£ä»å å«åè代ç çåèæ°ç»ï¼byte[]ï¼ä¸å®ä¹åºJavaç±»ãå¨æäºæ åµä¸ï¼å¯è½ä¼éè¦å¨æççæ Javaåè代ç ï¼ææ¯å¯¹å·²æçJavaåè代ç è¿è¡ä¿®æ¹ãè¿ä¸ªæ¶åå°±éè¦ç¨å°æ¬æä¸å°è¦ä»ç»çç¸å ³ææ¯ãé¦å ä»ç»ä¸ä¸å¦ä½å¨æç¼è¯Javaæºæ件ã
ããå¨æç¼è¯Javaæºæ件
ããå¨ä¸è¬æ åµä¸ï¼å¼å人åé½æ¯å¨ç¨åºè¿è¡ä¹åå°±ç¼åå®æäºå ¨é¨çJavaæºä»£ç 并ä¸æåç¼è¯ã对æäºåºç¨æ¥è¯´ï¼Javaæºä»£ç çå 容å¨è¿è¡æ¶å»æè½ç¡®å®ãè¿ä¸ªæ¶åå°±éè¦å¨æç¼è¯æºä»£ç æ¥çæJavaåè代ç ï¼åç±JVMæ¥å è½½æ§è¡ãå ¸åçåºæ¯æ¯å¾å¤ç®æ³ç«èµçå¨çº¿è¯æµç³»ç»ï¼å¦PKU JudgeOnlineï¼ï¼å 许ç¨æ·ä¸ä¼ Java代ç ï¼ç±ç³»ç»å¨åå°ç¼è¯ãè¿è¡å¹¶è¿è¡å¤å®ãå¨å¨æç¼è¯Javaæºæ件æ¶ï¼ä½¿ç¨çåæ³æ¯ç´æ¥å¨ç¨åºä¸è°ç¨Javaç¼è¯å¨ã
ããJSR å¼å ¥äºJavaç¼è¯å¨APIãå¦æ使ç¨JDK 6çè¯ï¼å¯ä»¥éè¿æ¤APIæ¥å¨æç¼è¯Java代ç ãæ¯å¦ä¸é¢ç代ç ç¨æ¥å¨æç¼è¯æç®åçHello Worldç±»ã该Javaç±»ç代ç æ¯ä¿åå¨ä¸ä¸ªå符串ä¸çã
ãã public class CompilerTest {
ãã public static void main(String[] args) throws Exception {
ãã String source = "public class Main { public static void main(String[] args) { System.out.println(\"Hello World!\");} }";
ãã JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
ãã StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
ãã StringSourceJavaObject sourceObject = newCompilerTest.StringSourceJavaObject("Main", source);
ãã Iterable< extends JavaFileObject> fileObjects = Arrays.asList(sourceObject);
ãã CompilationTask task = compiler.getTask(null, fileManager, null,null, null, fileObjects);
ãã boolean result = task.call();
ãã if (result) {
ãã System.out.println("ç¼è¯æåã");
ãã }
ãã }
ãã
ãã static class StringSourceJavaObject extends SimpleJavaFileObject {
ãã
ãã private String content = null;
ãã public StringSourceJavaObject(String name, String content) ?throwsURISyntaxException {
ãã super(URI.create("string:///" + name.replace('.','/') + Kind.SOURCE.extension), Kind.SOURCE);
ãã this.content = content;
ãã }
ãã
ãã public CharSequence getCharContent(boolean ignoreEncodingErrors) ?throws IOException {
ãã return content;
ãã }
ãã }
ãã }
ããå¦æä¸è½ä½¿ç¨JDK 6æä¾çJavaç¼è¯å¨APIçè¯ï¼å¯ä»¥ä½¿ç¨JDKä¸çå·¥å ·ç±»com.sun.tools.javac.Mainï¼ä¸è¿è¯¥å·¥å ·ç±»åªè½ç¼è¯åæ¾å¨ç£çä¸çæ件ï¼ç±»ä¼¼äºç´æ¥ä½¿ç¨javacå½ä»¤ã
ããå¦å¤ä¸ä¸ªå¯ç¨çå·¥å ·æ¯Eclipse JDT Coreæä¾çç¼è¯å¨ãè¿æ¯Eclipse Javaå¼åç¯å¢ä½¿ç¨çå¢éå¼Javaç¼è¯å¨ï¼æ¯æè¿è¡åè°è¯æé误ç代ç ã该ç¼è¯å¨ä¹å¯ä»¥åç¬ä½¿ç¨ãPlayæ¡æ¶å¨å é¨ä½¿ç¨äºJDTçç¼è¯å¨æ¥å¨æç¼è¯Javaæºä»£ç ãå¨å¼å模å¼ä¸ï¼Playæ¡æ¶ä¼å®ææ«æ项ç®ä¸çJavaæºä»£ç æ件ï¼ä¸æ¦åç°æä¿®æ¹ï¼ä¼èªå¨ç¼è¯ Javaæºä»£ç ãå æ¤å¨ä¿®æ¹ä»£ç ä¹åï¼å·æ°é¡µé¢å°±å¯ä»¥çå°ååã使ç¨è¿äºå¨æç¼è¯çæ¹å¼çæ¶åï¼éè¦ç¡®ä¿JDKä¸çtools.jarå¨åºç¨ç CLASSPATHä¸ã
ããä¸é¢ä»ç»ä¸ä¸ªä¾åï¼æ¯å ³äºå¦ä½å¨Javaéé¢åååè¿ç®ï¼æ¯å¦æ±åºæ¥(3+4)*7-çå¼ãä¸è¬çåæ³æ¯åæè¾å ¥çè¿ç®è¡¨è¾¾å¼ï¼èªå·±æ¥æ¨¡æ计ç®è¿ç¨ãèèå°æ¬å·çåå¨åè¿ç®ç¬¦çä¼å 级çé®é¢ï¼è¿æ ·ç计ç®è¿ç¨ä¼æ¯è¾å¤æï¼èä¸å®¹æåºéãå¦å¤ä¸ç§åæ³æ¯å¯ä»¥ç¨JSR å¼å ¥çèæ¬è¯è¨æ¯æï¼ç´æ¥æè¾å ¥ç表达å¼å½åJavaScriptææ¯JavaFXèæ¬æ¥æ§è¡ï¼å¾å°ç»æãä¸é¢ç代ç 使ç¨çåæ³æ¯å¨æçæJavaæºä»£ç 并ç¼è¯ï¼æ¥çå è½½Javaç±»æ¥æ§è¡å¹¶è·åç»æãè¿ç§åæ³å®å ¨ä½¿ç¨Javaæ¥å®ç°ã
ãã private static double calculate(String expr) throws CalculationException {
ãã String className = "CalculatorMain";
ãã String methodName = "calculate";
ãã String source = "public class " + className
ãã + " { public static double " + methodName + "() { return " + expr +"; } }";
ãã //çç¥å¨æç¼è¯Javaæºä»£ç çç¸å ³ä»£ç ï¼åè§ä¸ä¸è
ãã boolean result = task.call();
ãã if (result) {
ãã ClassLoader loader = Calculator.class.getClassLoader();
ãã try {
ãã Class<?> clazz = loader.loadClass(className);
ãã Method method = clazz.getMethod(methodName, new Class<?>[] { });
ãã Object value = method.invoke(null, new Object[] { });
ãã return (Double) value;
ãã } catch (Exception e) {
ãã throw new CalculationException("å é¨é误ã");
ãã }
ãã } else {
ãã throw new CalculationException("é误ç表达å¼ã");
ãã }
ãã }
ããä¸é¢ç代ç ç»åºäºä½¿ç¨å¨æçæçJavaåè代ç çåºæ¬æ¨¡å¼ï¼å³éè¿ç±»å è½½å¨æ¥å è½½åè代ç ï¼å建Javaç±»ç对象çå®ä¾ï¼åéè¿Javaåå°APIæ¥è°ç¨å¯¹è±¡ä¸çæ¹æ³ã
ããJavaåè代ç å¢å¼º
ããJava åè代ç å¢å¼ºæçæ¯å¨Javaåè代ç çæä¹åï¼å¯¹å ¶è¿è¡ä¿®æ¹ï¼å¢å¼ºå ¶åè½ãè¿ç§åæ³ç¸å½äºå¯¹åºç¨ç¨åºçäºè¿å¶æ件è¿è¡ä¿®æ¹ãå¨å¾å¤Javaæ¡æ¶ä¸é½å¯ä»¥è§å°è¿ç§å®ç°æ¹å¼ãJavaåè代ç å¢å¼ºé常ä¸Javaæºæ件ä¸ç注解ï¼annotationï¼ä¸å使ç¨ã注解å¨Javaæºä»£ç ä¸å£°æäºéè¦å¢å¼ºçè¡ä¸ºåç¸å ³çå æ°æ®ï¼ç±æ¡æ¶å¨è¿è¡æ¶å»å®æ对åè代ç çå¢å¼ºãJavaåè代ç å¢å¼ºåºç¨çåºæ¯æ¯è¾å¤ï¼ä¸è¬é½éä¸å¨åå°åä½ä»£ç å对å¼å人åå±è½åºå±çå®ç°ç»èä¸ãç¨è¿JavaBeansç人å¯è½å¯¹å ¶ä¸é£äºå¿ 须添å çgetter/setteræ¹æ³æå°å¾ç¹çï¼å¹¶ä¸é¾ä»¥ç»´æ¤ãèéè¿åè代ç å¢å¼ºï¼å¼å人ååªéè¦å£°æBeanä¸çå±æ§å³å¯ï¼getter/setteræ¹æ³å¯ä»¥éè¿ä¿®æ¹åè代ç æ¥èªå¨æ·»å ãç¨è¿JPAç人ï¼å¨è°è¯ç¨åºçæ¶åï¼ä¼åç°å®ä½ç±»ä¸è¢«æ·»å äºä¸äºé¢å¤ç ååæ¹æ³ãè¿äºååæ¹æ³æ¯å¨è¿è¡æ¶å»ç±JPAçå®ç°å¨ææ·»å çãåè代ç å¢å¼ºå¨é¢åæ¹é¢ç¼ç¨ï¼AOPï¼çä¸äºå®ç°ä¸ä¹æ使ç¨ã
Java Arrays.asList 和 new ArrayList(Arrays.asList()) 的对比
在编程中,处理数组和列表是常见的任务。文章中对比了`Arrays.asList(array)`和`new ArrayList(Arrays.asList(array))`两种将数组转换为列表的源码边界线方法。首先看`Arrays.asList`。这个方法将数组包装为一个固定长度的`List`对象。它不会复制数组数据,只是创建了一个视图,允许在程序中使用`List`接口。然而,不能修改`List`的长度,包括添加或删除元素。可以修改`List`中的数组元素,改变原始数组的值。尝试向`List`添加元素时,程序会抛出`UnsupportedOperationException`异常。
接下来,看`ArrayList(Arrays.asList(array))`。它从数组创建一个`List`,但不同的是,这个`List`的数据是从数组中拷贝来的。这意味着创建的`List`与原始数组无关,对`List`中数据的操作不会影响到数组。因此,可以对`List`中的元素进行添加和删除操作。修改`List`中的元素时,原始数组不会被修改。通过访问JDK源代码,可以发现`Arrays.asList`返回的`ArrayList`只包装了数组,而没有实现`add`和`remove`方法。
总结,`Arrays.asList`方法创建的`List`不允许修改长度或添加删除元素,修改`List`元素会导致原始数组改变。而`ArrayList(Arrays.asList(array))`方法创建的`List`可以执行常规操作,修改`List`元素不会影响原始数组。两种方法各有适用场景,选择时需根据实际需求考虑。