java錄屏小程序,小程序 錄屏

本文目錄一覽:

在Java語言中,編寫和運行Java應用程序和Java小程序的步驟是什麼

將編寫的java源文件保存為.java後綴的文件(選擇所有文件)

在cmd命令行窗口中將當前目錄切換到java文件保存的目錄下,即cd命令

使用javac

+文件名.java編譯java文件

使用java+類文件名(即編譯後產生的.class文件)運行程序

用java做一個可視化小程序,可以錄音並予以保存。

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.InputStream;

import org.eclipse.swt.SWT;

import org.eclipse.swt.widgets.*;

import org.eclipse.swt.events.*;

import javax.sound.sampled.AudioFileFormat;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.DataLine;

import javax.sound.sampled.SourceDataLine;

import javax.sound.sampled.TargetDataLine;

public class RecordPlay {

boolean stopCapture = false; // 控制錄音標誌

AudioFormat audioFormat; // 錄音格式

// 讀取數據:從TargetDataLine寫入ByteArrayOutputStream錄音

ByteArrayOutputStream byteArrayOutputStream;

int totaldatasize = 0;

TargetDataLine targetDataLine;

// 播放數據:從AudioInputStream寫入SourceDataLine播放

AudioInputStream audioInputStream;

SourceDataLine sourceDataLine;

private Button captureBtn;

private Button stopBtn;

private Button playBtn;

private Button saveBtn;

private Label myLabel;

private Shell shell;

private Display display;

public RecordPlay() {

super();

display = new Display();

shell = new Shell(display);

shell.setSize(350, 150);

shell.setText(“錄音機程序”);

//

myLabel = new Label(shell, SWT.NONE);

myLabel.setBounds(38, 21, 100, 18);

myLabel.setText(“錄音機”);

// 創建按鈕

captureBtn = new Button(shell, SWT.NONE);

captureBtn.setBounds(30, 61, 60, 18);

captureBtn.setText(“錄音”);

captureBtn.setEnabled(true);

stopBtn = new Button(shell, SWT.NONE);

stopBtn.setBounds(100, 61, 60, 18);

stopBtn.setText(“停止”);

stopBtn.setEnabled(false);

playBtn = new Button(shell, SWT.NONE);

playBtn.setBounds(170, 61, 60, 18);

playBtn.setText(“播放”);

playBtn.setEnabled(false);

saveBtn = new Button(shell, SWT.NONE);

saveBtn.setBounds(240, 61, 60, 18);

saveBtn.setText(“保存”);

saveBtn.setEnabled(false);

// 註冊錄音事件

captureBtn.addSelectionListener(new SelectionListener() {

public void widgetSelected(SelectionEvent event) {

captureBtn.setEnabled(false);

stopBtn.setEnabled(true);

playBtn.setEnabled(false);

saveBtn.setEnabled(false);

// 開始錄音

capture();

}

public void widgetDefaultSelected(SelectionEvent event) {

// text.setText(“No worries!”);

}

});

// 註冊停止事件

stopBtn.addSelectionListener(new SelectionListener() {

public void widgetSelected(SelectionEvent event) {

captureBtn.setEnabled(true);

stopBtn.setEnabled(false);

playBtn.setEnabled(true);

saveBtn.setEnabled(true);

// 停止錄音

stop();

}

public void widgetDefaultSelected(SelectionEvent event) {

// text.setText(“No worries!”);

}

});

// 註冊播放事件

playBtn.addSelectionListener(new SelectionListener() {

public void widgetSelected(SelectionEvent event) {

// 播放錄音

play();

}

public void widgetDefaultSelected(SelectionEvent event) {

// text.setText(“No worries!”);

}

});

// 註冊保存事件

saveBtn.addSelectionListener(new SelectionListener() {

public void widgetSelected(SelectionEvent event) {

// 保存錄音

save();

}

public void widgetDefaultSelected(SelectionEvent event) {

// text.setText(“No worries!”);

}

});

}

public void start() {

shell.open();

while (!shell.isDisposed()) {

if (!display.readAndDispatch()) {

display.sleep();

}

}

}

public static void main(String[] args) {

RecordPlay label = new RecordPlay();

label.start();

}

// (1)錄音事件,保存到ByteArrayOutputStream中

private void capture() {

try {

// 打開錄音

audioFormat = getAudioFormat();

DataLine.Info dataLineInfo = new DataLine.Info(

TargetDataLine.class, audioFormat);

targetDataLine = (TargetDataLine) AudioSystem.getLine(dataLineInfo);

targetDataLine.open(audioFormat);

targetDataLine.start();

// 創建獨立線程進行錄音

Thread captureThread = new Thread(new CaptureThread());

captureThread.start();

} catch (Exception e) {

e.printStackTrace();

System.exit(0);

}

}

// (2)播放ByteArrayOutputStream中的數據

private void play() {

try {

// 取得錄音數據

byte audioData[] = byteArrayOutputStream.toByteArray();

// 轉換成輸入流

InputStream byteArrayInputStream = new ByteArrayInputStream(

audioData);

AudioFormat audioFormat = getAudioFormat();

audioInputStream = new AudioInputStream(byteArrayInputStream,

audioFormat, audioData.length / audioFormat.getFrameSize());

DataLine.Info dataLineInfo = new DataLine.Info(

SourceDataLine.class, audioFormat);

sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);

sourceDataLine.open(audioFormat);

sourceDataLine.start();

// 創建獨立線程進行播放

Thread playThread = new Thread(new PlayThread());

playThread.start();

} catch (Exception e) {

e.printStackTrace();

System.exit(0);

}

}

// (3)停止錄音

public void stop() {

stopCapture = true;

}

// (4)保存文件

public void save() {

// 取得錄音輸入流

AudioFormat audioFormat = getAudioFormat();

byte audioData[] = byteArrayOutputStream.toByteArray();

InputStream byteArrayInputStream = new ByteArrayInputStream(audioData);

audioInputStream = new AudioInputStream(byteArrayInputStream,

audioFormat, audioData.length / audioFormat.getFrameSize());

// 寫入文件

try {

File file = new File(“d:/myjava/test.wav”);

AudioSystem

.write(audioInputStream, AudioFileFormat.Type.WAVE, file);

} catch (Exception e) {

e.printStackTrace();

}

}

// 取得AudioFormat

private AudioFormat getAudioFormat() {

float sampleRate = 16000.0F;

// 8000,11025,16000,22050,44100

int sampleSizeInBits = 16;

// 8,16

int channels = 1;

// 1,2

boolean signed = true;

// true,false

boolean bigEndian = false;

// true,false

return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed,

bigEndian);

}

class PlayThread extends Thread {

byte tempBuffer[] = new byte[10000];

public void run() {

try {

int cnt;

// 讀取數據到緩存數據

while ((cnt = audioInputStream.read(tempBuffer, 0,

tempBuffer.length)) != -1) {

if (cnt 0) {

// 寫入緩存數據

sourceDataLine.write(tempBuffer, 0, cnt);

}

}

// Block等待臨時數據被輸出為空

sourceDataLine.drain();

sourceDataLine.close();

} catch (Exception e) {

e.printStackTrace();

System.exit(0);

}

}

}

class CaptureThread extends Thread {

// 臨時數組

byte tempBuffer[] = new byte[10000];

public void run() {

byteArrayOutputStream = new ByteArrayOutputStream();

totaldatasize = 0;

stopCapture = false;

try {// 循環執行,直到按下停止錄音按鈕

while (!stopCapture) {

// 讀取10000個數據

int cnt = targetDataLine.read(tempBuffer, 0,

tempBuffer.length);

if (cnt 0) {

// 保存該數據

byteArrayOutputStream.write(tempBuffer, 0, cnt);

totaldatasize += cnt;

}

}

byteArrayOutputStream.close();

} catch (Exception e) {

e.printStackTrace();

System.exit(0);

}

}

}

}

簡述Java Applet 程序的特點是什麼?

Java Applet 是用Java 語言編寫的一些小應用程序,這些程序是直接嵌入到頁面中,由支持Java的瀏覽器(IE 或 Nescape)解釋執行能夠產生特殊效果的程序。它可以大大提高Web頁面的交互能力和動態執行能力。包含Applet的網頁被稱為Java-powered頁,可以稱其為Java支持的網頁。

當用戶訪問這樣的網頁時,Applet被下載到用戶的計算機上執行,但前提是用戶使用的是支持Java的網路瀏覽器。由於Applet是在用戶的計算機上執行的,所以它的執行速度不受網路帶寬或者Modem存取速度的限制,用戶可以更好地欣賞網頁上Applet產生的多媒體效果。

Applet 小應用程序的實現主要依靠java.applet 包中的Applet類。與一般的應用程序不同,Applet應用程序必須嵌入在HTML頁面中,才能得到解釋執行;同時Applet可以從Web頁面中獲得參數,並和Web頁面進行交互。

含有Applet的網頁的HTML文件代碼中必須帶有applet和/applet這樣一對標記,當支持Java的網路瀏覽器遇到這對標記時,就將下載相應的小程序代碼並在本地計算機上執行該Applet小程序。

Applet是一種Java的小程序,它通過使用該Applet的HTML文件,由支持Java的網頁瀏覽器下載運行。也可以通過java開發工具的appletviewer來運行。Applet 程序離不開使用它的HTML文件。這個HTML文件中關於Applet的信息至少應包含以下三點:

1)位元組碼文件名(編譯後的Java文件,以.class為後綴)

2)位元組碼文件的地址

3)在網頁上顯示Applet的方式。

一個HTML文件增加Applet有關的內容只是使網頁更加富有生氣,如添加聲音、動畫等這些吸引人的特徵,它並不會改變HTML文件中與Applet無關的元素。

(一) Applet程序開發步驟

Applet程序開發主要步驟如下:

1)選用EDIT或Windows Notepad等工具作為編輯器建立Java Applet源程序。

2)把Applet的源程序轉換為位元組碼文件。

3)編製使用class 的HTML文件。在HTML文件內放入必要的APPLET語句。

下面舉一個最簡單的HelloWorld 例子來說明Applet程序的開發過程:

(1) 編輯Applet 的java源文件

創建文件夾C:\ghq,在該文件夾下建立 HelloWorld.java

文件的源代碼如下:

import java.awt.*;

import java.applet.*;

public class HelloWorld extends Applet //繼承Appelet類,這是Appelet Java程序的特點

{

public void paint(Graphics g )

{

g.drawString(“Hello World!”,5,35);

}

}

保存上述程序在C:\ghq\HelloWorld.java文件里。

(2)編譯Applet

編譯HelloWorld.java源文件可使用如下JDK命令:

C:\ghq\javac HelloWorld.javaEnter

注意:如果編寫的源程序違反了Java編程語言的語法規則,Java編譯器將在屏幕上顯示語法錯誤提示信息。源文件中必須不含任何語法錯誤,Java編譯器才能成功地把源程序轉換為appletviewer和瀏覽器能夠執行的位元組碼程序。

成功地編譯Java applet之後生成響應的位元組碼文件HelloWorld.class的文件。用資源管理器或DIR命令列出目錄列表,將會發現目錄C:\ghq中多了一個名為HelloWorld.class的文件。

(3)創建HTML文件

在運行創建的HelloWorld.class 之前,還需創建一個HTML文件,appletviewer或瀏覽器將通過該文件訪問創建的Applet。為運行HelloWorld.class, 需要創建包含如下HTML語句的名為HelloWorld.html的文件。

HTML

TITLEHelloWorld! Applet/TITLE

APPLET

CODE=”JavaWorld.class”

WIDTH=200

HEIGHT=100

/APPLET

/HTML

本例中,APPLET語句指明該Applet位元組碼類文件名和以像素為單位的窗口的尺寸。雖然這裡HTML文件使用的文件名為HelloWorld.HTML,它對應於HelloWorld.java的名字,但這種對應關係不是必須的,可以用其他的任何名字(比如說Ghq.HTML)命名該HTML文件。但是使文件名保持一種對應關係可給文件的管理帶來方便。

(4)執行 HelloWorld.html

如果用appletviewer運行HelloWorld.html,需輸入如下的命令行:

C:\ghq\appletviewer JavaWorld.htmlENTER

可以看出,該命令啟動了appletviewer並指明了HTML文件,該HTML文件中包含對應於HelloWorld 的APPLET語句。

如果用瀏覽器運行HelloWorld Applet,需在瀏覽器的地址欄中輸入HTML文件URL地址。

至此,一個Applet程序的開發運行整個過程結束了(包括java源文件、編譯的class文件、html文件以及用appletviewer或用瀏覽器運行)。

(二) Applet類

Applet類是所有Applet應用的基類,所有的Java小應用程序都必須繼承該類。如下所示。

import java. applet.*;

public class OurApplet extends Applet

{

……

……

}

Applet類的構造函數只有一種,即:public Applet()

Applet實現了很多基本的方法,下面列出了Applet類中常用方法和用途。

public final void setStub(AppletStub stub)

//設置Applet的stub.stub是Java和C之間轉換參數並返回值的代碼位,它是由系統自動設定的。

public boolean isActive();// 判斷一個Applet是否處於活動狀態。

public URL getDocumentBase();// 檢索表示該Applet運行的文件目錄的對象。

public URL getCodeBase();// 獲取該Applet 代碼的URL地址。

public String getParameter(String name);// 獲取該Applet 由name指定參數的值。

public AppletContext getAppletContext();// 返回瀏覽器或小應用程序觀察器。

public void resize(int width,int height);// 調整Applet運行的窗口尺寸。

public void resize(Dimension d);// 調整Applet運行的窗口尺寸。

public void showStatus(String msg);// 在瀏覽器的狀態條中顯示指定的信息。

public Image getImage(URL url); // 按url指定的地址裝入圖象。

public Image getImage(URL url,String name);// 按url指定的地址和文件名載入圖像。

public AudioClip getAudioClip(URL url);// 按url指定的地址獲取聲音文件。

public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和文件名獲取聲音。

public String getAppletInfo();// 返回Applet應用有關的作者、版本和版權方面的信息;

public String[][] getParameterInfo();

// 返回描述Applet參數的字元串數組,該數組通常包含三個字元串: 參數名、該參數所需值的類型和該參數的說明。

public void play(URL url);// 載入並播放一個url指定的音頻剪輯。

public void destroy();//撤消Applet及其所佔用的資源。若該Applet是活動的,則先終止該Applet的運行。

(1) Applet運行狀態控制基本方法

Applet類中的四種基本方法用來控制其運行狀態:init()、start()、stop()、destroy()

init()方法

這個方法主要是為Applet的正常運行做一些初始化工作。當一個Applet被系統調用時,系統首先調用的就是該方法。通常可以在該方法中完成從網頁向Applet傳遞參數,添加用戶界面的基本組件等操作。

start()方法

系統在調用完init()方法之後,將自動調用start()方法。而且,每當用戶離開包含該Applet的主頁後又再返回時,系統又會再執行一遍start()方法。這就意味著start()方法可以被多次執行,而不像init()方法。因此,可把只希望執行一遍的代碼放在init()方法中。可以在start()方法中開始一個線程,如繼續一個動畫、聲音等。

stop()方法

這個方法在用戶離開Applet所在頁面時執行,因此,它也是可以被多次執行的。它使你可以在用戶並不注意Applet的時候,停止一些耗用系統資源的工作以免影響系統的運行速度,且並不需要人為地去調用該方法。如果Applet中不包含動畫、聲音等程序,通常也不必實現該方法。

destroy()方法

與對象的finalize()方法不同,Java在瀏覽器關閉的時候才調用該方法。Applet是嵌在HTML文件中的,所以destroty()方法不關心何時Applet被關閉,它在瀏覽器關閉的時候自動執行。在destroy()方法中一般可以要求收回佔用的非內存獨立資源。(如果在Applet仍在運行時瀏覽器被關閉,系統將先執行stop()方法,再執行destroy()方法。

(2) Applet應用的有關參數說明

利用Applet來接收從HTML中傳遞過來的參數,下面對這些參數作一簡單說明:

* CODE標誌

CODE標誌指定Applet的類名;WIDTH和HEIGHT標誌指定Applet窗口的像素尺寸。在APPLET語句里還可使用其他一些標誌。

* CODEBASE 標誌

CODEBASE標誌指定Applet的URL地址。Applet的通用資源定位地址URL,它可以是絕對地址 ,如。也可以是相對於當前HTML所在目錄的相對地址,如/AppletPath/Name。如果HTML文件不指定CODEBASE 標誌,瀏覽器將使用和HTML文件相同的URL。

* ALT 標誌

雖然Java在WWW上很受歡迎,但並非所有瀏覽器都對其提供支持。如果某瀏覽器無法運行Java Applet,那麼它在遇到APPLET語句時將顯示ALT標誌指定的文本信息。

* ALIGN 標誌

ALIGN標誌可用來控制把Applet窗口顯示在HTML文檔窗口的什麼位置。與HTMLLMG語句一樣,ALIGN標誌指定的值可以是TOP、MIDDLE或BOTTOM。

* VSPACE與HSPACE 標誌

VSPACE和HSPACE標誌指定瀏覽器顯示在Applet窗口周圍的水平和豎直空白條的尺寸,單位為像素。如下例使用該標誌在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白:

* NAME 標誌

NAME標誌把指定的名字賦予Applet的當前實例。當瀏覽器同時運行兩個或多個Applet時,各Applet可通過名字相互引用或交換信息。如果忽略NAME標誌,Applet的名字將對應於其類名。

* PARAM 標誌

通用性是程序設計所追求的目標之一。使用戶或者程序員能很方便地使用同一個Applet完成不同的任務是通用性的具體表現。從HTML文件獲取信息是提高Applet通用性的一條有效途徑。

假設編製了一個把某公司的名字在屏幕上捲動的Applet。為了使該Applet更加通用,則可以使該Applet從HTML文件獲取需要捲動的文本信息。這樣,若想顯示另一個公司的名字,用不著修改Java Applet本身,只需修改HTML文件即可。

PARAM 標誌可用來在HTML文件里指定參數,格式如下所示:

PARAM Name=”name” Value=”Liter”

Java Applet可調用getParameter方法獲取HTML文件里設置的參數值。

用JAVA編寫一個小應用程序

單人版五子棋,自己寫的。

——————————————

import java.awt.*;

import java.awt.event.*;

import javax.swing.*;

class mypanel extends Panel implements MouseListener

{

int chess[][] = new int[11][11];

boolean Is_Black_True;

mypanel()

{

Is_Black_True = true;

for(int i = 0;i 11;i++)

{

for(int j = 0;j 11;j++)

{

chess[i][j] = 0;

}

}

addMouseListener(this);

setBackground(Color.BLUE);

setBounds(0, 0, 360, 360);

setVisible(true);

}

public void mousePressed(MouseEvent e)

{

int x = e.getX();

int y = e.getY();

if(x 25 || x 330 + 25 ||y 25 || y 330+25)

{

return;

}

if(chess[x/30-1][y/30-1] != 0)

{

return;

}

if(Is_Black_True == true)

{

chess[x/30-1][y/30-1] = 1;

Is_Black_True = false;

repaint();

Justisewiner();

return;

}

if(Is_Black_True == false)

{

chess[x/30-1][y/30-1] = 2;

Is_Black_True = true;

repaint();

Justisewiner();

return;

}

}

void Drawline(Graphics g)

{

for(int i = 30;i = 330;i += 30)

{

for(int j = 30;j = 330; j+= 30)

{

g.setColor(Color.WHITE);

g.drawLine(i, j, i, 330);

}

}

for(int j = 30;j = 330;j += 30)

{

g.setColor(Color.WHITE);

g.drawLine(30, j, 330, j);

}

}

void Drawchess(Graphics g)

{

for(int i = 0;i 11;i++)

{

for(int j = 0;j 11;j++)

{

if(chess[i][j] == 1)

{

g.setColor(Color.BLACK);

g.fillOval((i + 1) * 30 – 8, (j + 1) * 30 – 8, 16, 16);

}

if(chess[i][j] == 2)

{

g.setColor(Color.WHITE);

g.fillOval((i + 1) * 30 – 8, (j + 1) * 30 – 8, 16, 16);

}

}

}

}

void Justisewiner()

{

int black_count = 0;

int white_count = 0;

int i = 0;

for(i = 0;i 11;i++)//橫向判斷

{

for(int j = 0;j 11;j++)

{

if(chess[i][j] == 1)

{

black_count++;

if(black_count == 5)

{

JOptionPane.showMessageDialog(this, “黑棋勝利”);

Clear_Chess();

return;

}

}

else

{

black_count = 0;

}

if(chess[i][j] == 2)

{

white_count++;

if(white_count == 5)

{

JOptionPane.showMessageDialog(this, “白棋勝利”);

Clear_Chess();

return;

}

}

else

{

white_count = 0;

}

}

}

for(i = 0;i 11;i++)//豎向判斷

{

for(int j = 0;j 11;j++)

{

if(chess[j][i] == 1)

{

black_count++;

if(black_count == 5)

{

JOptionPane.showMessageDialog(this, “黑棋勝利”);

Clear_Chess();

return;

}

}

else

{

black_count = 0;

}

if(chess[j][i] == 2)

{

white_count++;

if(white_count == 5)

{

JOptionPane.showMessageDialog(this, “白棋勝利”);

Clear_Chess();

return;

}

}

else

{

white_count = 0;

}

}

}

for(i = 0;i 7;i++)//左向右斜判斷

{

for(int j = 0;j 7;j++)

{

for(int k = 0;k 5;k++)

{

if(chess[i + k][j + k] == 1)

{

black_count++;

if(black_count == 5)

{

JOptionPane.showMessageDialog(this, “黑棋勝利”);

Clear_Chess();

return;

}

}

else

{

black_count = 0;

}

if(chess[i + k][j + k] == 2)

{

white_count++;

if(white_count == 5)

{

JOptionPane.showMessageDialog(this, “白棋勝利”);

Clear_Chess();

return;

}

}

else

{

white_count = 0;

}

}

}

}

for(i = 4;i 11;i++)//右向左斜判斷

{

for(int j = 6;j = 0;j–)

{

for(int k = 0;k 5;k++)

{

if(chess[i – k][j + k] == 1)

{

black_count++;

if(black_count == 5)

{

JOptionPane.showMessageDialog(this, “黑棋勝利”);

Clear_Chess();

return;

}

}

else

{

black_count = 0;

}

if(chess[i – k][j + k] == 2)

{

white_count++;

if(white_count == 5)

{

JOptionPane.showMessageDialog(this, “白棋勝利”);

Clear_Chess();

return;

}

}

else

{

white_count = 0;

}

}

}

}

}

void Clear_Chess()

{

for(int i=0;i11;i++)

{

for(int j=0;j11;j++)

{

chess[i][j]=0;

}

}

repaint();

}

public void paint(Graphics g)

{

Drawline(g);

Drawchess(g);

}

public void mouseExited(MouseEvent e){}

public void mouseEntered(MouseEvent e){}

public void mouseReleased(MouseEvent e){}

public void mouseClicked(MouseEvent e){}

}

class myframe extends Frame implements WindowListener

{

mypanel panel;

myframe()

{

setLayout(null);

panel = new mypanel();

add(panel);

panel.setBounds(0,23, 360, 360);

setTitle(“單人版五子棋”);

setBounds(200, 200, 360, 383);

setVisible(true);

addWindowListener(this);

}

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

public void windowDeactivated(WindowEvent e){}

public void windowActivated(WindowEvent e){}

public void windowOpened(WindowEvent e){}

public void windowClosed(WindowEvent e){}

public void windowIconified(WindowEvent e){}

public void windowDeiconified(WindowEvent e){}

}

public class mywindow

{

public static void main(String argc [])

{

myframe f = new myframe();

}

}

什麼是java小程序

簡單的說java是一種面向對象的編程語言,可以編寫各種應用程序以及遊戲。

java分三塊,j2se:java的基礎核心語言。j2me:java的微型模塊,專門針對內存小,沒有持續電源等小型設備。j2ee:java的企業模塊,專門針對企業資料庫伺服器的連接維護。

手機用到的是用j2me所編出來的小程序,一般網站上都有編好的java遊戲,電子書以及各種小程序,每個java小程序都有.jar和.jad兩個文件,因為沒用過tcl得手機,所以不太清楚是不是兩個都需要傳到手機里。

正常的是下載到電腦後先把.jar的文件傳到手機里就可以直接用了,個別手機還需把.jad的文件也傳進去。

JAVA介紹

一、前言

『Java』從1995年的暑假開始在計算機業界就受到了高度注意,特別是在Internet和多 媒體(Multimedia)相關產品類方面。Java為何有如此這麼大的魅力?人作如此的比喻: Java在全球資訊網(World Wide Web, WWW)地位就如同電子表格(Spreadsheet)與個人計 算機(PC)的關係。那Java究竟有那些特色呢?

Java是一種軟體技術

是一種由美國SUN計算機公司(Sun Microsystems, Inc.)所研究而成的語言

是一種為 Internet發展的計算機語言

是一種使網頁(Web Page)產生生動活潑畫面的語言

是一種使網頁(Web Page)由靜態(Static)轉變為動態(Dynamic)的語言

是一種語言,用以產生「小應用程序(Applet(s))」

是一種簡化的C++語言 是一種安全的語言,具有阻絕計算機病毒傳輸的功能

是一種將安全性(Security)列為第一優先考慮的語言

是一種使用者不需花費很多時間學習的語言

是一種突破用戶端機器環境和CPU結構的語言

是一種「寫一次,即可在任何機器上執行(Write OnceRun Anywhere)」的語言是有史以來,第一套允 使用者將應用程序(Applications)通過Internet從遠端的伺服器(Remote Server)傳輸到本地端的機器 上(LocalMachine)並執行

是一種應用程序提供者不需要知道使用者的計算機硬體(如:Sun, Intel, 或MAC等)與軟體(如:SW- UNIX, MAC O/S, Windows, 或NT等)環境的語言(Kestenbaum, 1995)。

下面將依序地介紹Java,首先是Java的發展歷史與Java語言介紹,其次依序是Java Applet和HotJava的簡單介紹。

二、Java FAQ

下面以問答的方式來說明Java的發展歷史與其背景(下列內容整理自 Java FAQ list and Tutorial和The Java Language: A White Paper,讀者若欲深 入了解,請自行參閱原文):

Java何時開始發展?(When)

最早大概可追溯至1991年四月份,Sun的綠色計劃(Green Project)開始著手於發展消費性電子產品(Consumer Electronics),所使用的語言是C、C++、及Oak (為Java語 言的前身),後因語言本身和市場的問題, 使得消費性電子產品的發展無法達到當初 預期的目標,再加上網路的興起, 綠色計劃也因此而改變發展的方向,這已是1994 年了。

為何稱之為Java?(Why) “Java”是美國SUN計算機公司Java發展小組歷經無數次的激烈討論之後才被選擇出。 生動(Liveliness)、動畫(Animation)、速度(Speed)、交互性(Interactivity)為當 初選擇名字時所欲表達出的特色。”Java”是在無數的建議中脫穎而出的,而”Java” 不是由幾個單字的首字所組成, 而是從許多程序設計師鍾愛的熱騰騰、香濃咖啡中 產生靈感的。

誰開發了Java?(Who) Java是美國SUN計算機公司Java發展小組開發的,早期的成員(綠色工程)是Patrick Naughton, James Gosling, Mike Sheridan,而現在大家較為熟悉的成員是James Gosling。

在那裡開發了Java?(Where)

也就是問Java的出生地?答案是美國。

如何可以找到所需的Java信息?(How to)

在網路上,您可以連到Sun公司的Java WWW網站,URL是,或是 。在那裡幾乎可以找到您所需要的所有Java信息,但是語 言多少是一個障礙, 至少對某些人而言;沒關係,目前國內已有很多個網站提供中文 Java信息。在清華和中科院的FTP站點上有不少有關資料。想像以後應會有更多的站點提供相關信息。

如何才能看到Java的效果?(How Do I)

首先您需要有含有Java解釋器的瀏覽器(Browser),例如:Netscpae公司的Netscape Navigator 2.0以上或是Sun公司的HotJava瀏覽器,對個人計算機使用者而言,操作 系統需是Windows 95或是Windows NT。

Java是因為撰寫C++語言程序時的困難而研製開的,起先,只是一個消費性電子產品 大計劃中的一部份,C++語言是當初被考慮採用的,但從一開始的編譯問題一直到最 後的一連串問題迫使得放棄C++語言,而有Java語言的產生。Sun是要Java成為一個簡 單(Simple)、面向對象的(Object Oriented)、 分散式的(Distributed)、解釋的(Interpreted)、健壯的(Robust)、安全的(Secure)、 結構中立的(Architecture Neutral)、可移植的(Portable)、高效能的(High Performance)、多線程的(Multithreaded)、動態的(Dynamic)的程序語言(摘譯自 TheJava Language: A White Paper, 1995)。

在Sun的Java語言白皮書中明白地說明上述Java語言的技巧。若以木工為比喻,一個面 向對象的木工,他(她)最主要的重點是即將要做的木椅子,其次才是所需要的工具; 反之;一個以非面向對象的木工,他(她)所關心的只是工具。最近的即插即用(Plug and Play)亦是面向對象設計的重點。 分散式的(Distributed):Java有一個很周全的程薪錄JAVA介紹 。

一、

『Java』從1995年的暑假開始在計算機業界就受到了高度注意,特別是在Internet和 多媒體(Multimedia)相關產品類方面。Java為何有如此這麼大的魅力?人作如此的比喻: Java在全球資訊網(World Wide Web, WWW)地位就如同電子表格(Spreadsheet)與個人計 算機TTP和FTP等TCP/IP通訊協定相配合。Java應用程序(Applications) 能在網路上開啟及連結使用物件,就如同透過URLs連結使用一個本地文件系統(Local File System)。 健壯的(Robust):由Java所編寫出的程序能在多種情況下執行而具有其穩定性。Java與 C/C++最大不同點是Java有一個指針模型(Pointer Model)來排除內存被覆蓋(Overwriting Memory)和毀損數據(Corrupting Data)的可能性。

安全的(Secure):Java是被設計用於網路及分散式的環境中,安全性自必是一個很 重要的考慮。Java擁有數個階層的互鎖(Interlocking)保護措施,能有效地防止病 毒的侵入和破壞行為的發生。

結構中立的(Architecture Neutral):一般而言,網路是由很多不同機型的機器所 組合而成的,CPU和作業系統體系結構均有所不同;因此,如何使一個應用程序可以 在每一種機器上執行,是一個難題。所幸,Java的編譯器產生一種結構中立的目標 文件格式(Object File Format);這使得編解碼得以在很多種處理器中執行。

可移植的(Portable):原始資料型式的大小是被指定的,例如”float”一直是表示一 個32位元IEEE 754浮點運算數字,因絕大多數的CPU都具有此共同特徵。程序庫屬於 系統的一部份,它定義了一些可移植的程序介面,Java本身具備有很好的可移植性。

解釋的(Interpreted):Java解釋器能直接地在任何機器上執行Java位元碼(Bytecodes), 因此在進行程序連結時,時間的節省,這對於縮短程序的開發過程,有極大的幫助。

高效能的(High Performance):Java位元碼迅速地能被轉換成機器碼(Machine Code), 從位元碼轉換到機器碼的效能幾乎與C與C++沒有分別。

多線程的(Multi threaded):Java語言具有多線程的功能,這對於交互回應能力及 即時執行行為是有幫助的。

動態的(Dynamic):Java比C或C++語言更具有動態性,更能適應時刻在變的環境, Java不會因程序庫的更新,而必須重新編譯程序。

此外,Hank Shiffman (Making Sense of Java)亦針一般對Java的錯誤看法及觀 念提出他的說明,特在此摘譯如下:

“Java是一種編寫Web Pages的一種語言,就如同HTML和VRML一樣” 事實上,Java並不像是HTML此一類的描述語言(Description Language),而是一種 編程語言(Programming Language)。描述語言標明內容和位置,而編程語言描述一 種產生結果的過程。

2. “Java語言容易學習和使用,不像C、C++和其它程序語言”

Java是一種編程語言。Java容易學嗎?Java或許是比C或C++容易學,但仍是一種編程語言,而不是一種描述語言。

3. “Java碼是可移植的,但C及C++不是”

Java原代碼(Source Code)是比C語言來得可移植一點,差別在於Java的目標碼。 Java碼在一種機器上進行編譯,而能在所有的機器上執行, 只要那部機器上有 Java解釋器。

4. “Java能被拓展而在機器上執行任何事情”

理論上,Java Applet (Java小應用程序)能做任何事情,如模擬3D VRML模型、播放電影、產生音頻….等。但事實上,一個小應用程序(Applet)僅能在那一頁上被執行,而無法在那一頁之外執行。同時,Java亦受限於程序庫的功能。

5. “Java是適合於建立大型的應用程序”

如果Java適合於大型程序,則Java就不適合應用於Web瀏覽器了。第一個商業 性的Java Applets (Applix’s Java-Based Spreadsheet) 並不是全然使用Java, 它只使用Java作為用戶介面,而所有的處理工作, 是用CGI碼。

6. “Java是解釋執行的,Basic是解釋執行的,因此Java=Basic”

雖然Java的確是使用解釋器,但事實上,Java則與C或C++等完全編譯語言較為相近,但與Basic或APL等完全解譯語言較不相近。

7. “Java刪除了CGI命令稿(Scripts)和程序的需求”

Java Applets將會取代部份CGI的用途。在有些情況,Java Applets能夠取代一些伺服器端代碼(Server-Side Code),但大多數的情況,基於安全性理由或是效 能的考慮,Java仍無法全然取代CGI Scripts。

8. “Netscape’s JavaScript是與Java有相關”

除了名稱之外,Java和JavaScript是有一點點相關。JavaScript是一種命令稿語 言,是可以在HTML頁中使用。Java碼並未出現在HTML中,而在HTML中通過一個鏈 結來鏈結編解碼組。Java和JavaScript之間的關係就如同C語言和C Shell一般。

原創文章,作者:MVIK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/133014.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
MVIK的頭像MVIK
上一篇 2024-10-03 23:56
下一篇 2024-10-03 23:56

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python程序文件的拓展

    Python是一門功能豐富、易於學習、可讀性高的編程語言。Python程序文件通常以.py為文件拓展名,被廣泛應用於各種領域,包括Web開發、機器學習、科學計算等。為了更好地發揮P…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29

發表回復

登錄後才能評論