新聞中心
java問(wèn)題,動(dòng)態(tài)修改java類(lèi)里面的一個(gè)方法
//創(chuàng)建文件輸出流
創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的海興網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
PrintStream ps=new PrintStream("./log.txt");
//設(shè)置新的輸出流 System.setErr(ps);
System類(lèi)的out、err、in成員變量都是final類(lèi)型的,不能直接復(fù)制,要通過(guò)setOut()、setErr(),setIn()方法來(lái)改變流。上例是通過(guò)setOut()方法改變輸入流輸入位置,將輸出重定向到一個(gè)固定的目錄,實(shí)現(xiàn)程序日志
e.printstacktrace 默認(rèn)用的就是System的輸出
怎么動(dòng)態(tài)編譯Java源文件
(Write once, run anywhere)” 的目標(biāo)。Java類(lèi)文件中包含的字節(jié)代碼可以被不同平臺(tái)上的JVM所使用。Java字節(jié)代碼不僅可以以文件形式存在于磁盤(pán)上,也可以通過(guò)網(wǎng)絡(luò)方式來(lái)下載,還可以只存在于內(nèi)存中。JVM中的類(lèi)加載器會(huì)負(fù)責(zé)從包含字節(jié)代碼的字節(jié)數(shù)組(byte[])中定義出Java類(lèi)。在某些情況下,可能會(huì)需要?jiǎng)討B(tài)的生成 Java字節(jié)代碼,或是對(duì)已有的Java字節(jié)代碼進(jìn)行修改。這個(gè)時(shí)候就需要用到本文中將要介紹的相關(guān)技術(shù)。首先介紹一下如何動(dòng)態(tài)編譯Java源文件。
動(dòng)態(tài)編譯Java源文件
在一般情況下,開(kāi)發(fā)人員都是在程序運(yùn)行之前就編寫(xiě)完成了全部的Java源代碼并且成功編譯。對(duì)有些應(yīng)用來(lái)說(shuō),Java源代碼的內(nèi)容在運(yùn)行時(shí)刻才能確定。這個(gè)時(shí)候就需要?jiǎng)討B(tài)編譯源代碼來(lái)生成Java字節(jié)代碼,再由JVM來(lái)加載執(zhí)行。典型的場(chǎng)景是很多算法競(jìng)賽的在線評(píng)測(cè)系統(tǒng)(如PKU JudgeOnline),允許用戶上傳Java代碼,由系統(tǒng)在后臺(tái)編譯、運(yùn)行并進(jìn)行判定。在動(dòng)態(tài)編譯Java源文件時(shí),使用的做法是直接在程序中調(diào)用Java編譯器。
JSR 199引入了Java編譯器API。如果使用JDK 6的話,可以通過(guò)此API來(lái)動(dòng)態(tài)編譯Java代碼。比如下面的代碼用來(lái)動(dòng)態(tài)編譯最簡(jiǎn)單的Hello World類(lèi)。該Java類(lèi)的代碼是保存在一個(gè)字符串中的。
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 = new CompilerTest.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) {
修改java源碼解決keys報(bào)錯(cuò)
編程錯(cuò)誤解決方法
Java入門(mén)基礎(chǔ)第4天《Java編程規(guī)范及編譯源代碼常見(jiàn)錯(cuò)誤的解決方法》
?
愛(ài)笑的陳sir
原創(chuàng)
關(guān)注
10點(diǎn)贊·484人閱讀
大家傍晚好呀!通過(guò)學(xué)習(xí)Java入門(mén)基礎(chǔ)第3天我們了解了怎么用記事本編寫(xiě)運(yùn)行Java程序,但是這兩天我收到了很多大家的一部分問(wèn)題?說(shuō)一下問(wèn)的最多的吧。如,我的程序運(yùn)行不了,一行代碼,5個(gè)報(bào)錯(cuò),編寫(xiě)、編譯錯(cuò)誤、編碼格式錯(cuò)誤等等,總之五花八門(mén)。
根據(jù)所述問(wèn)題,今天聊聊Java編程規(guī)范。方便大家觀看,把之前的文章整合了。
Java入門(mén)基礎(chǔ)第1天(什么是Java?)
Java入門(mén)基礎(chǔ)第2天(java jdk下載與安裝教程)
Java入門(mén)基礎(chǔ)第3天《使用記事本編寫(xiě)運(yùn)行Java程序》
Java編程規(guī)范及編譯源代碼常見(jiàn)錯(cuò)誤的解決方法
一、編程規(guī)范
二、命名規(guī)則
三、編碼格式規(guī)定
四、javac 編譯器編譯源代碼文件常見(jiàn)的問(wèn)題
五、 解釋執(zhí)行.dass文件常見(jiàn)問(wèn)題
一、編程規(guī)范
我們先簡(jiǎn)單了解一下什么是編程規(guī)范?
編程規(guī)范是對(duì)編程的一種約定,主要作用是增強(qiáng)代碼的可讀性和可維護(hù)性,便于代碼重用
二、命名規(guī)則
基本要求是,程序中的各個(gè)要素都遵守命名規(guī)則,
然后在編碼中嚴(yán)格按照編碼格式編寫(xiě)代碼。
命名規(guī)則包括以下幾點(diǎn):
? 包的名稱(chēng)由一個(gè)小寫(xiě)字母序列組成。
? 類(lèi)的名稱(chēng)由大寫(xiě)字母開(kāi)頭,其他字母都由小寫(xiě)的單詞組成。
? 類(lèi)的實(shí)例的名稱(chēng)由一個(gè)小寫(xiě)字母開(kāi)頭,后面的單詞由大寫(xiě)字母開(kāi)頭。
? 常量的名稱(chēng)都大寫(xiě),并且指出完整含義。 參數(shù)的名稱(chēng)無(wú)其他具體規(guī)定。
? 數(shù)組的命名使用“類(lèi)型[] 數(shù)組名”的形式。
三、編碼格式規(guī)定
? 程序最開(kāi)始編寫(xiě)導(dǎo)入包和類(lèi)語(yǔ)句,如 import 語(yǔ)句。
import 語(yǔ)句可以有多行,編寫(xiě)完 import 語(yǔ)句后空一行。
? 定義 public 類(lèi),頂格書(shū)寫(xiě)。類(lèi)的主體左括號(hào){不換行書(shū)寫(xiě),右括號(hào)}頂格書(shū)寫(xiě)。
? 定義 public 類(lèi)中的變量,縮進(jìn)書(shū)寫(xiě)。
? 定義方法用縮進(jìn)書(shū)寫(xiě),方法的左括號(hào){不換行書(shū)寫(xiě),右括號(hào)}和方法首行第一個(gè)字符對(duì)齊。方法體要再次縮進(jìn)書(shū)寫(xiě),最后一個(gè)變量定義和第一個(gè)方法定義之間、方法和方法之間最好空一行。
四、javac 編譯器編譯源代碼文件常見(jiàn)的問(wèn)題
我們?cè)谑褂胘avac 編譯器編譯源代碼時(shí)文件時(shí),會(huì)出現(xiàn)幾個(gè)常見(jiàn)的報(bào)錯(cuò)問(wèn)題。
錯(cuò)誤描述1、Error:cannot read:HelloJava.java javac。 工具程序找不到指定的 java文件
解決方法:這個(gè)需要檢查一下你的文件是否存儲(chǔ)在當(dāng)前目錄中,或文件名是否錯(cuò)誤。
錯(cuò)誤描述2、 HelloJava.java:4:class HelloJava is public,should be declared in a file named MyApplication.java。
解決方法:這是你的源文件中類(lèi)的名稱(chēng)和源文件名稱(chēng)不符,
需要確定源文件名稱(chēng)和類(lèi)名稱(chēng)是否相同。
錯(cuò)誤描述3、 HelloJava.java:6:cannot find symbol。
解決方法:可能是你的源程序文件中某些代碼部分輸入錯(cuò)了,
最常見(jiàn)的原因可能是沒(méi)有注意到字母的大小寫(xiě)。
錯(cuò)誤描述4、Javac 不是內(nèi)部或外部命令、可執(zhí)行程序或批量文件。
解決方法:這是你的 path 設(shè)置有誤或這你沒(méi)有在 path 系統(tǒng)變量中加入 JDK 的 bin 目錄。
五、 解釋執(zhí)行.dass文件常見(jiàn)問(wèn)題
我們?cè)诮忉寛?zhí)行 .dass 文件時(shí),可能會(huì)出現(xiàn)以下幾個(gè)常見(jiàn)的錯(cuò)誤報(bào)錯(cuò)問(wèn)題:
錯(cuò)誤描述1、 Exception in thread “main” java.lang.NoClassDe£FoundError。
報(bào)錯(cuò)出現(xiàn)在Java 工具程序找不到所指定的 .class 類(lèi),
需要確定指定的類(lèi)是否存儲(chǔ)在當(dāng)前目錄中,名稱(chēng)是否正確。
錯(cuò)誤描述2、 Exception in thread “main” java.lang.NoSuchMetliodError:main。
問(wèn)題出現(xiàn)在沒(méi)有指定 Java 程序的入口。
Java 工具程序指定的類(lèi)必須有一個(gè)程序入口,
也就是必須包括 main(String args[]) 這個(gè)方法。
鼓勵(lì): ???如果你覺(jué)得博主的文章的不錯(cuò)或者對(duì)你有幫助,
可以點(diǎn)一個(gè)免費(fèi)的關(guān)注支持一下博主,
如果三連收藏支持就更好了吖,嘿嘿嘿,謝謝。
文章名稱(chēng):動(dòng)態(tài)修改java代碼 動(dòng)態(tài)修改js代碼
鏈接URL:http://ef60e0e.cn/article/docpeid.html