日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

日积跬步02

發(fā)布時間:2023/12/19 综合教程 45 生活家
生活随笔 收集整理的這篇文章主要介紹了 日积跬步02 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

重要思想繼續(xù):

1.對象的創(chuàng)建和存在時間:對象需要的數(shù)據(jù)位于哪兒?如何控制對象的“存在時間”呢?

方法一,C++認為程序的執(zhí)行效率是最重要的,所以允許程序員為獲得最快的運行速度,自行決定存儲以及存在時間——只需將對象放置在堆棧或者靜態(tài)存儲區(qū)域,同時犧牲靈活性,因為在編寫程序時必須準(zhǔn)確知道對象數(shù)量、存在時間以及類型。

方法二,在內(nèi)存池中動態(tài)創(chuàng)建對象,給內(nèi)存池叫“堆”或“內(nèi)存堆”。采用這種方式,除非進入運行期,否則根本不知道實際需要多少個對象,也不知道存在時間以及準(zhǔn)確類型。由于動態(tài)創(chuàng)建方法使對象本來就傾向于復(fù)雜,所以查找存儲空間以及釋放它所需的額外開銷不會為對象的創(chuàng)建造成明顯的影響。

如果在堆棧或者靜態(tài)存儲空間里創(chuàng)建一個對象,編譯器會判斷對象的持續(xù)時間有多長,到時會自動“破壞”或者“清除”它。程序員用兩種方法破壞對象:一是用程序化的方式消除對象,二是利用運行環(huán)境提供的“垃圾收集器”特性,垃圾收集器會自動尋找不再使用的對象并消除,但會額外帶來開銷。這并不符合C++的語言宗旨,C++嚴格要求使用完對象必須及時釋放。而Java提供了垃圾收集器設(shè)計。

2.違例控制:這里的“違例”(Exception)屬于一個特殊對象,它會從產(chǎn)生錯誤的地方“扔”出來 ,隨后這個違例會被“違例控制器”捕獲,甚至?xí)卸鄠€違例控制器并行捕獲對應(yīng)違例對象。這種設(shè)計理念是在不干擾常規(guī)代碼執(zhí)行的情況下,獨立處置違例錯誤,最后利用違例從糟糕的環(huán)境中恢復(fù),程序不用退出就能恢復(fù)執(zhí)行

3.多線程:Java的多線程機制已經(jīng)內(nèi)建到語言中,簡化了復(fù)雜的多線程。Java對多線程處理的支持是在對象一級的,所以一個執(zhí)行線程可表達為一個對象,Java也提供有限的資源鎖定方案,它能鎖定任何對象占用的內(nèi)存,即同一時間只能有一個線程使用特定的內(nèi)存空間。關(guān)鍵字synchronized。

4. java客戶端程序、java服務(wù)器端程序。。。。

==============================================================================================

“磨刀不誤砍柴工”,學(xué)習(xí)java基本組件:

Chapter2 一切都是對象

1. 一切都是對象,然而操縱標(biāo)識符實際是指向一個對象的“句柄”,(有參考書的說法是“引用”,甚至“指針”等)。String s; 這里創(chuàng)建的是句柄,而不是對象;始終堅持一個原則:創(chuàng)建句柄時,無論如何必須初始化

String s = "asdf"; 可以解釋為String是一種特殊類型——字串可用加引號的文字初始化。更通用的初始化方法:

String s = new String("asdf");

2.程序運行時,數(shù)據(jù)保存在什么地方?(非常喜歡作者能一直關(guān)注到代碼運行內(nèi)存保存情況,這是一程序員應(yīng)該考慮的事情,而不是一個拼湊代碼的碼農(nóng)care的)

一般來說,有6個地方可以保存數(shù)據(jù):

(1)寄存器:速度最快的保存區(qū)域,然而寄存器數(shù)量有限,由編譯器根據(jù)需要分配,對程序員來所透明;

(2)堆棧:常規(guī)RAM(隨機訪存)區(qū)域,特點是特別快速、特別有效,指針上下移動即可完成內(nèi)存創(chuàng)建、刪除;Java編譯器必須明確所保存數(shù)據(jù)的長度、以及存在時間,這會限制程序的靈活性。一般對象句柄保存在堆棧,而java對象不保存在堆棧;

(3)堆:一種常規(guī)用途的內(nèi)存池(RAM區(qū)域),其中保存Java對象。“內(nèi)存堆”(Heap)最大亮點是編譯器不必知道需要從堆里分配多少空間,也不必知道存儲的數(shù)據(jù)在堆停留多長時間;靈活性的代價是堆里分配空間會花掉較長時間;

(4)靜態(tài)存儲:“靜態(tài)”static是指“位于固定位置”,靜態(tài)存儲的數(shù)據(jù)隨時等候調(diào)用,關(guān)鍵字static指定。可以理解保存在RAM的中的靜態(tài)區(qū)域

(5)常數(shù)存儲:可直接置于程序代碼內(nèi)部,也可保存在ROM;

(6)非RAM存儲:數(shù)據(jù)完全獨立一個程序之外,程序運行時仍可存在。“流式對象”和“固定對象”。

3. Primitive 類型:一些頻繁使用、需要特別對待的類型,也叫基本類型。這些簡單的、小的變量沒必要保存在內(nèi)存堆。Java采用C/C++方法,不用new創(chuàng)建變量,二是創(chuàng)建一個非句柄的“自動”變量。這些變量容納具體值,并保存在堆棧中,存取高效;

常用的主類型:boolean char byte short int long float double Void

需要注意的是:數(shù)值類型全部都是有符號的;主數(shù)據(jù)類型擁有自己的“封裝器”(wrapper)類。高精度計算:BigInteger和BigDecimal,兩者都沒有對應(yīng)“主類型”,需要通過方法調(diào)用。

單獨說一下數(shù)組,C和C++中數(shù)組就是實際的內(nèi)存塊,如果越界訪問或未初始化,會產(chǎn)生不可預(yù)測后果(C++優(yōu)先使用標(biāo)準(zhǔn)模板庫的容器)。Java推崇安全性的設(shè)計目標(biāo)——系統(tǒng)自動進行范圍檢查,缺點是會造成少量內(nèi)存開銷。創(chuàng)建對象數(shù)組,實際創(chuàng)建的是一個句柄數(shù)組,每個句柄初始化成特殊值null,Java強制要求在使用前句柄指向一個對象。

4.作用域和存在時間

例子:

{
int x = 12;
/* only x available */
{
   int q = 96;
  /* both x & q available */
}
/* only x available */
/* q “out of scope” */
}

作為在作用域里定義的變量,只有在作用域結(jié)束之前才能使用。

Java對象的存活時間不同于主類型。new創(chuàng)建的Java對象,存活周期會超過作用域的范圍。

{

  String s = new String("a string")

}/*作用域的終點*/

句柄s會在作用域終點處消失,而s指向的對象依然占據(jù)內(nèi)存,只要你愿意,甚至可以一直保留下去。好任性的說,因為Java的內(nèi)存垃圾收集器特性,避免了C++程序員忘記釋放內(nèi)存導(dǎo)致的“溢出問題”。

5.類、成員和方法

關(guān)鍵字class定義一個類,類的基本元素:類成員和類方法。

類成員是一種對象(通過句柄與其通信),類成員可以是任何類型,或者是主類型,或者是指向?qū)ο蟮木浔H绻菍ο缶浔仨毷褂?strong>“構(gòu)建器”初始化;而如果是主類型,可直接在定義位置初始化;

類方法的基本形式

返回類型 方法名(/* 自變量列表 */) {/* 方法主體 */}

自變量列表規(guī)定了傳送給類方法的信息,這些信息采用對象的形式,實際傳遞的是對象“句柄”。主數(shù)據(jù)類型是例外。

若返回類型是void,則關(guān)鍵字return的唯一作用是退出方法。所以一旦到達方法末尾,該關(guān)鍵字可不需要。

6.Java程序構(gòu)建

名字可見性:C++引入“命名空間”概念,Java設(shè)計者鼓勵程序員使用自己的Internet域名作為命名空間(域名很難重復(fù))。java這種機制保證所有文件自動保存在自己的命名空間,而且每個類自動獲得唯一的標(biāo)識符(現(xiàn)在可以理解Eclipse打開類名時出現(xiàn)的一長串字母的含義了),語言已經(jīng)幫你搞定命名重復(fù)問題。

如果在自己的程序里使用一個預(yù)定義好的類,編譯器如何找到它?一種情況是那個類就定義在當(dāng)前源文件中,只需直接引用即可,不用擔(dān)心“向前引用”問題,即使它直到文件后面才定義。Java語言又幫你消除一個限制。另一種情況是(大部分情況)采用標(biāo)準(zhǔn)Java庫的組件 ,他們與編譯器配套:

import java.util.*; //使用* 通配符,可以不必要明確聲明那個具體庫

static關(guān)鍵字:如果設(shè)置了static關(guān)鍵字,數(shù)據(jù)或方法就不會同那個類的任何對象實例聯(lián)系到一起。即使從未創(chuàng)建那個類對象,但仍能調(diào)用static方法或訪問static數(shù)據(jù)。static的重要用途是確保在不創(chuàng)建對象的前提下調(diào)用類方法,特別是在定義程序運行入口方法main()的時候。

7.開始第一個Java程序

//:Property.java
import java.util.*;

/** The first Thinking in Java example program
* Lists system information on current machine.
* @author Bruce Eckel
* @author http://www.BruceEckel.com
* @version v1.0
*/

public class Property{
/** Sole entry point to class & application
* @param args array of string argus
* @return No return value
* @exception exceptions No exceptions thrown
*/
public static void main(String[] args){
System.out.println(new Date());
/**
* using Properties class in main function
*/
Properties p = System.getProperties();
p.list(System.out);
System.out.println("---Memory Usage:");
Runtime rt = Runtime.getRuntime();
System.out.println("Total Memory = "
+ rt.totalMemory()
+ " Free Memory = "
+ rt.freeMemory());
try{
Thread.currentThread().sleep(5*1000);
} catch(InterruptedException e){}
}
} ///:end

需要注意的是:

(1)程序開頭必須導(dǎo)入文件代碼里用到的類(import),類庫java.lang會自動導(dǎo)入。在網(wǎng)上http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4 可以查找java API.

(2)如果是創(chuàng)建獨立程序,文件中必須存在一個類與文件同名,而且類里必須包含一個名為main()的方法,形式如下:

public static void main(String[] args) //注意使用static修飾,自變量args不會在本程序用到,但必須列出,該變量保存了命令后調(diào)用的自變量。

(3)javadoc命令可以提取注釋到html文件,具體參見http://www.cnblogs.com/bluestorm/archive/2012/10/04/2711329.html

(4)一個非正式的Java編程標(biāo)準(zhǔn):大寫類名的首字母,如果類名由幾個單詞組成,不能使用下劃線,且每個單詞首字母大寫。例如:

class AllTheColorsOfTheRainbow {
int anIntegerRepresentingColors;
void changeTheHueOfTheColor(int newHue) {
// ...
}
// ...
}

總結(jié)

以上是生活随笔為你收集整理的日积跬步02的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。