try{
Thread.sleep(1000);
}catch(InterruptedException e){
//撲捉發生在線程中的異常,當一個正在執行的線程被中斷時就會出現這個異常,添加catch後當程序被雙擊停止時不會出現錯誤
e.printStackTrace();
}
lbClock.setText(getDate());
}
B. 如何使用命令行編譯和運行Java代碼
這里給你一個具體的場景來講述如何使用命令行編譯和運行Java代碼:
任務
我們有一個相當標準的Java工程,它包含三個頂層文件夾:
/bin-用來存放已編譯好的.class文件
/lib-用來存放第三方.jar文件
/src-存放.java源代碼
我的任務就是要從Java工程根目錄去編譯和運行工程。我們將使用Windows操作系統作為例子(和在Unix系統上的唯一區別就是路徑分隔符是」:「而不是」;「)。
編譯Java代碼
第一步是把文本文件.java源代碼編譯成Java虛擬機位元組碼文件(.class)。這一步使用一個叫javac的JDK工具來完成。
假設我們在應用的根目錄下,從com.example包下嘗試把Application.java文件,以及把lib文件夾中的lib1.jar和lib2.jar庫編譯到目標文件夾bin下,編譯命令應該是如下格式:
javac -d bin -sourcepath src -cp lib/lib1.jar;lib/lib2.jar src/com/example/Application.java1
編譯完後,/bin/com/example/Application.class應該就會創建出來了。如何Application.java使用了其他工程的類,那麼他們全部會自動被編譯並且放到相應的文件夾下。
運行Java代碼
為了啟動我們剛剛編譯的.class文件,需要另外一個叫java的JDK工具。
假設我們在應用的根目錄下,為了能夠啟動com.example包中的,使用了lib文件夾下的lib1.jar和lib2.jar庫的Application.class文件,啟動命令應該是如下
java -cp bin;lib/lib1.jar;lib/lib2.jar com.example.Application
我們在這里沒有提供文件名,只有一個實際的類名,java會基於提供的classpath(縮寫成cp)路徑去搜索。
C. 如何用Cmd命令行編譯Java代碼程序
在初學Java的時候,會使用cmd命令的模式來編譯運行代碼,下面就來介紹下如何命令行編譯
01
打開一份Java代碼,如下圖
02
打開文件所在的位置,滑鼠右鍵,打開shell
03
輸入命令javac HelloWorld.java,回車,出現下圖所示編譯後的class文件
04
輸入命令 java -cp . HelloWorld,回車,輸出結果
D. 如何編譯java
用命令提示符編譯java程序的步驟:
1.先新建文本文檔,輸入自己的java程序。
這里我寫一個簡單的java程序,來做示範。
import java.util.*;
public class HelloDate{
public static void main(String[] args)
{
System.out.println("Hello,it's:");
System.out.println(new Date());
}
}
經驗總結:運行一個java程序的大概的流程是:
書寫源代碼------>編譯------->運行---->結束。
注意事項:
1.在輸入的時候一定要注意區分大小寫。
2.操作之前要保證自己的電腦配置了java的運行環境。
E. java在線編譯網站或工具有哪些
你做了很多了吧!很好,繼續學吧! class.forName():載入的是指定的一個類 .class文件是由JAVA虛擬機載入,解釋執行的 閣下 可能把 方向搞錯了。 JAVA的反射機制很強大,基本上所有的涉及到配置文件的,都有反射的影子。尤其是JAVA編程中的框架SSH,ibates等等。 這些框架因為使用了反射機制,在普通程序員眼裡,就只有類和配置。這樣系統很容易擴展和維護。 反射機制 也不要研究得太深,對於中國這個JAVA軟體行業,還是應用維多,你應該不會想自己開發一個框架吧。
F. 如何用java調用c語言編譯器實現在線編譯c語
要在java中調用c語言的庫,需要使用Java提供了JNI。
舉例說明
在c語言中定義一個 void sayHello()函數(列印Hello World);然後在Java中調用這個函數顯示Hello Word.
現在分別從Java和C語言兩部分說明:
1. Java 部分
首先定義一個HelloNative,在其中申明sayHello函數,函數要申明為Native 類型的.如下:
public class HelloNative {
public native void sayHello();
}
編譯這個類,生成class文件:
javac HelloWorld.java
利用javah生成需要的h文件
javah HelloNative
生成的 h文件大概如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloNative */
#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloNative
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
可以看一下上面自動生成的程序,程序include了jni.h,這個頭文件在 $JAVA_HOME下的include文件夾下. 還可以發現生成的函數名是在之前的函數名前面加上了Java_HelloNative。
2. C語言部分
根據上面生成的h文件編寫相應的代碼實現,建立一個 HelloNative.cpp用來實現顯示Hello World的函數.如下:
#include <stdio.h>
#include "HelloNative.h"
JNIEXPORT void JNICALL Java_HelloNative_sayHello(JNIEnv *, jobject)
{
printf("Hello World!\n");
}
代碼編寫完成之後,我們再用gcc編譯成庫文件,命令如下;
gcc -fPIC -I/usr/lib/jvm/java-7-openjdk-i386/include -I/usr/lib/jvm/java-7-openjdk-i386/include/linux -shared -o libHelloNative.so HelloNative.cpp
這樣就會在當前目錄下生成一個libHelloNative.so的庫文件.這時需要的庫已經生成,在C語言下的工作已經完成了.
接下來需要在Java中編寫一個程序測試一下.在程序前,需要將我們的庫載入進去.載入的方法是調用Java的 System.loadLibrary("HelloNative");
public class TestNative
{
static {
try {
System.loadLibrary("HelloNative");
}
catch(UnsatisfiedLinkError e) {
System.out.println( "Cannot load hello library:\n " + e.toString() );
}
}
public static void main(String[] args) {
HelloNative test = new HelloNative();
test.sayHello();
}
}
但是再編譯後,運行的時候,問題又出現了.
Cannot load hello library:
java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloNative.sayHello()V
at HelloNative.sayHello(Native Method)
at TestNative.main(TestNative.java:13)
載入庫失敗,但是庫明明就是放在當前文件夾下的,怎麼會載入失敗呢?
用System.getProperty("java.library.path")查看,發現java.library.path中並不u存在當前的目錄.主要有以下的幾個解決辦法:
1) 將生成的庫復制到java.library.path有的路徑中去,當然這樣不是很好
2) 設置環境變數export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ,將當前的目錄加入到LD_LIBRARY_PATH中
3) 設置java 的選項,將當前的目錄加入到其中 .java -Djava.library.path=. $LD_LIBRARY_PATH
這樣之後程序就能夠成功的運行了.可以看見顯示的"Hello World!"了
G. 如何編譯java程序
三種方法:
1.在IDE中,如eclipse中寫的Java程序,在點擊保存後eclipse就會調用javac編譯程序編譯,編譯文件在當前項目的bin目錄下。
2.作為一個獨立的文件且沒有定義Java環境變數,需要在cmd窗口中切換到java bin目錄下執行Javac程序,執行格式為javac 空格 Java源文件;如 javac C://hello.java;
3.作為一個獨立的文件且定義了Java環境變數,打開cmd窗口,可以在任意目錄輸入javac java源文件,如javac D://hi.java。
Java也是一種高級語言,要讓計算機執行你撰寫的Java程序,也得通過編譯程序的編譯。但是Java編譯程序並不直接將Java源代碼編譯為相依於計算機平台的0、1序列,而是將其編譯為位元組碼。
Java源代碼的擴展名為.java,經過編譯程序編譯之後生成擴展名為.class的位元組碼。
H. 什麼是Java代碼的編譯與反編譯
Java代碼的編譯與反編譯
2017-02-21 Hollis 數盟
一、什麼是編譯
1、利用編譯程序從源語言編寫的源程序產生目標程序的過程。
2、用編譯程序產生目標程序的動作。 編譯就是把高級語言變成計算機可以識別的2進制語言,計算機只認識1和0,編譯程序把人們熟悉的語言換成2進制的。 編譯程序把一個源程序翻譯成目標程序的工作過程分為五個階段:詞法分析;語法分析;語義檢查和中間代碼生成;代碼優化;目標代碼生成。主要是進行詞法分析和語法分析,又稱為源程序分析,分析過程中發現有語法錯誤,給出提示信息。
二、什麼是反編譯
計算機軟體反向工程(Reverse engineering)也稱為計算機軟體還原工程,是指通過對他人軟體的目標程序(可執行程序)進行「逆向分析、研究」工作,以推導出他人的軟體產品所使用的思路、原理、結構、演算法、處理過程、運行方法等設計要素,某些特定情況下可能推導出源代碼。反編譯作為自己開發軟體時的參考,或者直接用於自己的軟體產品中。
三、 Java類的編譯與反編譯
我們在最初學習Java的時候,會接觸到兩個命令:javac和java,那個時候我們就知道,javac是用來編譯Java類的,就是將我們寫好的helloworld.java文件編譯成helloworld.class文件。
class文件打破了C或者C++等語言所遵循的傳統,使用這些傳統語言寫的程序通常首先被編譯,然後被連接成單獨的、專門支持特定硬體平台和操作系統的二進制文件。通常情況下,一個平台上的二進制可執行文件不能在其他平台上工作。而Java class文件是可以運行在任何支持Java虛擬機的硬體平台和操作系統上的二進制文件。
那麼反編譯呢,就是通過helloworld.class文件得到java文件(或者說是程序員能看懂的Java文件)
四、什麼時候會用到反編譯
1、我們只有一個類的class文件,但是我們又看不懂Java的class文件,那麼我們可以把它反編譯成我們可以看得懂的文件。
2、學習Java過程中,JDK的每個版本都會加入越來越多的語法糖,有些時候我們想知道Java一些實現細節,我們可以藉助反編譯。
五、反編譯工具
1、javap
2、Jad:官網(牆裂推薦)
客戶端:
可以在官網下載可執行文件,找到對應的操作系統的對應版本,然後進行安裝使用。
因為我使用的是linux操作系統,所以我下載的是Linux版本的工具,這個工具下載好之後會有一個執行文件,只要在執行文件所在目錄執行./jad helloworld.class就會在當前目錄下生成helloworld.jad文件,該文件里就是我們很熟悉的Java代碼
Eclipse插件:
下載地址 在官網下載插件的jar包,然後將jar包放到eclipse的plugins目錄下『 在打開Eclipse,Eclipse->Window->Preferences->Java,此時你會發現會比原來多了一個JadClipse的選項,單擊,在Path to decompiler中輸入你剛才放置jad.exe的位置,也可以制定臨時文件的目錄。當然在JadClipse下還有一些子選項,如Debug,Directives等,按照默認配置即可。 基本配置完畢後,我們可以查看一下class文件的默認打開方式,Eclipse->Window->Preferences->General->Editors->File Associations我們可以看到class文件的打開方式有兩個,JadClipse和Eclipse自帶的Class File Viewer,而JadClipse是默認的。 全部配置完成,下面我們可以查看源碼了,選擇需要查看的類,按F3即可查看源碼