国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

菜鳥(niǎo)初學(xué)Java的備忘錄(二)

2019-11-18 15:12:11
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

java的入門(mén)比我想象中的還要簡(jiǎn)單的多,目前為止我已經(jīng)對(duì)Java的基本語(yǔ)法結(jié)構(gòu)有所了解.但我知道,深入的研究任何一門(mén)語(yǔ)言,都需要時(shí)間和實(shí)踐的積累.

Applet是Java編寫(xiě)的可以在瀏覽器端運(yùn)行的代碼,它與應(yīng)用程序的明顯區(qū)別在于其執(zhí)行方式的不同,應(yīng)用程序如C程序是從main()主程序開(kāi)始運(yùn)行的,而Applet則比較復(fù)雜.具體如何復(fù)雜我不太清楚,但我會(huì)慢慢清楚的。關(guān)于Applet的一個(gè)重要性質(zhì)是,我可以將Html中的值作為參數(shù)傳遞給Applet(通過(guò)getParameter()來(lái)獲取參數(shù)值).這樣,為了產(chǎn)生不同的效果,我們不需要重新編譯Java程序,而只需修改HTML的參數(shù)值即可.由于HTML的代碼也可以動(dòng)態(tài)生成的,因此我可以對(duì)網(wǎng)頁(yè)的動(dòng)態(tài)效果進(jìn)行隨心所欲的控制.

在Applet的生命周期中有3個(gè)比較主要的方法:init,start,stop
init():負(fù)責(zé)Applet的初始化,在整個(gè)Applet的生命周期中,只執(zhí)行一次該方法.和Delphi中的OnCreate()事件是一樣的道理
start():系統(tǒng)在調(diào)用完init()后,將自動(dòng)調(diào)用start(),并且每次當(dāng)前窗口被重新激活時(shí),都會(huì)調(diào)用該方法,和Delphi中的OnShow()事件是差不多的。
stop():用戶離開(kāi)Applet所在頁(yè)面后調(diào)用該方法。它使你在用戶不注重Applet的時(shí)候,停止一些資源的工作以免影響系統(tǒng)運(yùn)行效率.并且我們不需要人為地去掉該方法.該方法同Delphi中的OnClose()事件差不多。

下面是一個(gè)Applet版的HelloWorld
文件名:HelloWorld.java

import java.applet.Applet;
import java.awt.Graphics;

public class HelloWorld extends Applet
{
String title;
public void init(){
title="Hello World";
}

public void paint(Graphics g)
{
g.drawString(title,50,20);
}

}

我們可以看到,程序中是沒(méi)有主函數(shù)的,那它如何運(yùn)行呢.既然Applet是在瀏覽器環(huán)境下運(yùn)行的,那我們就需要在HTML文件中來(lái)調(diào)用它.需要使用的相關(guān)標(biāo)簽就是<Applet>標(biāo)簽,我們首先建立HTML文件test.htm,源代碼如下.
<html>
<body>
Here comes my first applet:
<br>
<applet code=HelloWorld.class width=650 height=500>
</applet>
</APPLET>
</body>
</html>

將該文件和HelloWorld.java放在同一個(gè)目錄中,然后編譯HelloWorld.java之后,直接點(diǎn)擊test.htm打開(kāi),就可以看到Applet程序被啟動(dòng)了.或者使用AppletViewer命令A(yù)ppletViewer test.htm也可以不需要瀏覽器直接運(yùn)行該Applet.

下面一個(gè)程序可以更好的幫助我們理解Java Applet在整個(gè)生命周期是如何調(diào)用上面我們介紹的幾個(gè)方法的.

文件名:StartStop.java
import java.awt.*;
import java.applet.*;

public class StartStop extends Applet
{
StringBuffer message;
public void init()
{
message=new StringBuffer("Init done...");
}

public void start()
{
message.append("Started...");
}

public void stop()
{
message.append("Stopped...");
}

public void paint(Graphics g)
{
g.drawString(message.toString(),150,50);
}

}

運(yùn)行方法同上.(該程序可參考機(jī)械工業(yè)的<Java 簡(jiǎn)明教程>)

同C語(yǔ)言不一樣,使用Java實(shí)現(xiàn)GUI要輕松的多。由于是純面向?qū)ο蟮恼Z(yǔ)言,Java的AWT提供了各種界面元素供我們調(diào)用,如同Delphi里面的組件一樣。下面是Java中的GUI對(duì)象和Delphi中的相應(yīng)組件的對(duì)照表

Java Delphi

Button TButton
Canvas TCanvas
Checkbox TCheckbox
CheckboxGroup TRadioGroup
Choice TComboBox
Label TLabel
TextField TEdit
TextArea TMemo

然而,JDK并不是可視化的RAD(rapid application development)開(kāi)發(fā)工具,對(duì)于對(duì)象的使用不能如Delphi那樣只需要拖拉,移位就可以,而需要我們寫(xiě)調(diào)用代碼.這就產(chǎn)生了一個(gè)麻煩,我怎么樣才能夠讓元素按我的要求在界面中擺放呢?在元素不多時(shí)可以讓Java自動(dòng)布局(Layout),但是元素很多時(shí),或者需要根據(jù)應(yīng)用程序的要求來(lái)擺放元素時(shí),就需要使用面板了(Panel).面板在Delphi里也有相應(yīng)的組件(TPanel),但主要是用來(lái)對(duì)界面分割,進(jìn)行粗略的布局的,精確的定位還需要開(kāi)發(fā)人員手動(dòng)調(diào)節(jié).而Java則只能用Panel來(lái)定位,不能不說(shuō)是個(gè)缺陷.也許是我還沒(méi)學(xué)到吧。

入門(mén)之后,就該深入到對(duì)象的概念了。
假設(shè)在Java中創(chuàng)建了一個(gè)叫做Date的自定義數(shù)據(jù)類型如下
public class Date{
int day;
int month;
int year;
}
那么對(duì)于以下三條聲名變量的語(yǔ)句,java在為其分配內(nèi)存的時(shí)候有什么不同嗎?
(1) int i;
(2) Date mybirth;
(3) Date mybirth=new Date();

很顯然是有的,分配情況如下:
(1)Java自動(dòng)為整數(shù)i分配整形變量的內(nèi)存,一般是兩個(gè)字節(jié)
(2)Java聲明了一個(gè)Date類的實(shí)例變量mybirth,并為其分配了存儲(chǔ)空間,但這個(gè)存儲(chǔ)空間里面存儲(chǔ)的只是一個(gè)引用,或者說(shuō)是一個(gè)地址,目前的地址里面什么都沒(méi)有,那么我們就還不能使用這個(gè)實(shí)例變量,不能引用它的成員。
(3)Java創(chuàng)建了一個(gè)Date類的實(shí)例變量mybirth,并為其成員變量分配了足夠的存儲(chǔ)空間,最后返回對(duì)這個(gè)存儲(chǔ)空間的一個(gè)引用,也就是返回這個(gè)存儲(chǔ)空間的首地址,以后就通過(guò)mybirth,即這個(gè)首地址來(lái)訪問(wèn)這個(gè)實(shí)例變量里面的各個(gè)成員,如mybirth.day,mybirth.month,mybirth.year。
當(dāng)我們聲明一個(gè)基本數(shù)據(jù)類型的變量(如boolean, byte, short, char, int,long,flat,double)時(shí),系統(tǒng)會(huì)自動(dòng)為變量分配內(nèi)存。但是假如聲明了String或者用戶自定義的變量時(shí),系統(tǒng)不會(huì)立即為其分配內(nèi)存.為什么會(huì)這樣呢?
這是因?yàn)?String和用戶自定義的變量都屬于類的范疇.一個(gè)被聲明為類的變量,已經(jīng)不再是一個(gè)數(shù)據(jù)了,而變成對(duì)數(shù)據(jù)的一個(gè)引用,就是說(shuō)mybirth可以看作是一個(gè)指向類的一個(gè)實(shí)例的指針,里面存放的是地址.這樣的話就好理解了。
深入一點(diǎn),既然類的實(shí)例變量值是指針,這個(gè)指針指向一個(gè)類的實(shí)例,那么我們顯然可以定義多個(gè)名稱不同的類的實(shí)例變量,而將它們?nèi)贾赶蛞粋€(gè)實(shí)例.比如
University u=new University();//定義了一個(gè)類University的實(shí)例變量u,并為其分配對(duì)象的存儲(chǔ)空間
University u2=u;//又定義了一個(gè)實(shí)例變量u2,將u的值賦給u2
那么顯然u2和u除了名稱不同外,其實(shí)是一回事,因?yàn)樗鼈冎赶蛳嗤粋€(gè)地址.

我覺(jué)得弄清楚這一點(diǎn)還是很重要的。這些數(shù)據(jù)結(jié)構(gòu)的東西,是一個(gè)程序員需要知道的所以然.

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 英德市| 龙井市| 金溪县| 肥西县| 阿坝| 仁布县| 水城县| 涟水县| 新乐市| 家居| 福鼎市| 远安县| 南郑县| 汾阳市| 开阳县| 江达县| 奈曼旗| 进贤县| 孟津县| 新干县| 祁门县| 清远市| 荥阳市| 松阳县| 于田县| 英山县| 山西省| 靖边县| 阿尔山市| 略阳县| 禹城市| 巴青县| 临洮县| 静海县| 信丰县| 民和| 鹤峰县| 南召县| 永登县| 阜平县| 射洪县|