国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

ssssss

itvincent / 1096人閱讀

摘要:運算符主要介紹不常用到的位運算符,位運算符都是相對整型二進制數位來說的假設是一個被移位的整型數據,是位移量。按位運算符也可以操作邏輯型數據。所以,如果以后有人問你是值傳遞還是引用傳遞,你直接告訴他這是個無聊的問題。

Java基礎 關鍵字

主要介紹不常用到的關鍵字:

native - native通常用來修飾方法,一個native方法就是一個Java調用非Java代碼的接口(A native method is a Java method whose implementation is provided by non-java code.),也就是說該方法的實現由非Java語言提供。另外,調用native方法的其他類甚至不知道它所調用的是一個本地方法,JVM將控制調用本地方法的所有細節,即JNI框架,這里就不展開敘述了。

default - 定義注解時用于返回屬性的默認值。Java 8用default來繞開已發布的接口無法再修改的障礙。在Java 8中,接口中的方法可以被實現。接口中被實現的方法叫做default方法,用關鍵字default作為修飾符來標識。當一個類實現一個接口的時候,它可以實現已經在接口中被實現過的方法,但這不是必須的。這個類會繼承default方法。這就是為什么當接口發生改變的時候,實現類不需要做改動的原因。

volatile - 被其修飾的域在每次被線程訪問時,都強迫從主內存中重讀該成員變量的值;而且當成員變量發生變化時,強迫線程將變化值回寫到主內存。這樣在任何時刻,兩個不同的線程總是看到域的同一個值,也稱作線程可見性

Java語言規范中指出:為了獲得最佳速度,允許**線程保存共享成員變量的私有拷貝**,而且只當線程進入或者離開同步代碼塊時才與共享成員變量的原始值對比。這樣當多個線程同時讀寫某個對象,并且沒有進行同步時(不在同步代碼快內),就需要讓線程及時的得到共享成員變量的變化。而volatile關鍵字就是告訴JVM對于這個域不能保存它的私有拷貝,而應直接與其它線程共享。

由此可以,使用volatile屏蔽掉了JVM中必要的代碼優化,所以在效率上比較低,因此一定在必要時才使用此關鍵字。

transient - 被其修飾的域不會被序列化,請查看序列化。

strictfp - 修飾符的一種,可應用于類、接口或方法。使用 strictfp 關鍵字聲明一個方法或類時,該方法或類中所有的float和double表達式都嚴格遵守FP-strict的限制,符合IEEE-754規范。通常處理器都各自實現浮點運算,各自專業浮點處理器為實現最高速,計算結果會和IEEE標準有細小差別。比如intel主流芯片的浮點運算,內部是80bit高精運算,只輸出64bit的結果。IEEE只要求64bit精度的計算,你更精確反而導致結果不一樣。所以設立嚴格浮點計算,保證在各平臺間結果一致,IEEE標準優先,性能其次;而非嚴格的浮點計算是性能優先,標準其次。

const - Java保留字,不支持使用。

goto - Java保留字,不支持使用。

基本數據類型
Data Type Length(bit) Default Value (for fields)
boolean 1 false
byte 8 (byte)0
short 2-byte (short)0
char 2-byte "u0000"
int 4-byte 0
long 8-byte 0L
float 4-byte 0.0f
double 8-byte 0.0d

這8個基本數據類型可以分為兩大類,一類是整型,另一類是浮點型。浮點型包括float和double類型,剩下的可以歸為整型。整型是精確的,而浮點型是不精確的。如果要求數值的絕對精確,不要用浮點型,更多細節請查看精密計算。

除了上述8個基本數據類型, Java還通過類類型提供了對char串的支持。

Data Type Default Value (for fields)
String (or any object) null

這里還涉及到字符編碼(比如ASCII和Unicode編碼)等知識,請另行查閱。

另外,Java還提供了與基本數據類型相關的類,即包裝類。尤其需要提到的是char的包裝類Character,而不是String。為什么需要包裝類這種東西?因為,基本類型不是對象,下面的代碼在Java里不被允許:

7.toString();

也正是這一點,有人說Java不是完全面向對象的語言,而比如Ruby,其基本類型也是對象。所以在需要對象的地方,就需要與基本類型對應的包裝類實例。

進制

Java支持二進制、八進制、十進制和十六機制的數值表示:

二進制:數字前加0b前綴,如0b101。

八進制:數字前加0前綴,如0107。

十進制:數字前不加前綴,如109。

十六機制:數字前加0x前綴,如0x10F。

運算符

主要介紹不常用到的位運算符,位運算符都是相對整型二進制數位來說的:

<< 假設a是一個被移位的整型數據,n是位移量。a<運算的結果是通過將a的所有位都左移n位,每左移一位,左邊的高階位上的0或1被移出丟棄,并用0填充右邊的低位。更多細節請另行查閱。

>> 假設a是一個被移位的整型數據,n是位移量。a>>n運算的結果是通過將a的所有位都右移n位,每右移一位,右邊的低階位上的0或1被移出丟棄,并用0或1填充左邊的高位。a是正數時用0填充,是負數時用1填充。更多細節請另行查閱。

>>> 假設a是一個被移位的整型數據,n是位移量。a>>>n運算的結果是通過將a的所有位都右移n位,每右移一位,右邊的低階位上的0或1被移出丟棄,并用0填充左邊的高位。更多細節請另行查閱。

&(&=) 按位與。

|(|=) 按位或。

^(^=) 按位異或,相同為0,不同為1。

按位運算符也可以操作邏輯型數據。按位運算的一個典型應用是定義一組常量,將2的不同倍數賦予每個常量:

// Bit field enumeration constants - OBSOLETE!
public class Text {
    public static final int STYLE_BOLD = 1 << 0; // 1
    public static final int STYLE_ITALIC = 1 << 1; // 2
    public static final int STYLE_UNDERLINE = 1 << 2; // 4
    public static final int STYLE_STRIKETHROUGH = 1 << 3; // 8
    
    // Parameter is bitwise OR of zero or more STYLE_ constants
    public void applyStyles(int styles) {
        if ((styles & STYLE_BOLD) == STYLE_BOLD) {
            System.out.println("bold");
        }
        if ((styles & STYLE_ITALIC) == STYLE_ITALIC) {
            System.out.println("italic");
        }
        if ((styles & STYLE_UNDERLINE) == STYLE_UNDERLINE) {
            System.out.println("underline");
        }
        if ((styles & STYLE_STRIKETHROUGH) == STYLE_STRIKETHROUGH) {
            System.out.println("strikethrough");
        }
    }
}

這種表示法允許你用按位或|運算符將幾個常量合并到一個表達式中,稱作位域(bit field)

text.applyStyles(STYLE_BOLD | STYLE_ITALIC);

位域表示法也允許利用位運算符,執行聯合、差集以及交集等操作。

訪問權限
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
package-private(default) Y Y N N
private Y N N N

注意:Override可以減弱訪問權限,但不能增強。

遞歸

#Todo#

標簽

Java允許通過標簽(結合關鍵字breakcontinue)實現流程控制,但最好不這樣做:

outer: while (...) {
    inner: for (...) {
        if (...) {
            break inner;
        }
        continue outer;
    }
}
接口

語言層面上,相較于類,接口有著自己的一些特性。

接口的所有成員變量都是public static final的,無論你顯式聲明與否。為什么是這樣,引用SO上的兩個答案感受一下:

Protected methods are intended for sharing implementation with subclasses. Interfaces have nothing to offer as far as implementation sharing goes, because they have no implementation at all. Therefore all methods on interfaces must be public.
Because an interface is supposed to mean "what you can see from outside the class". It would not make sense to add non-public methods.

但是這里有個問題,因為Java 8支持接口提供默認的方法實現,這樣的話,如果一個接口是為了被其它接口繼承而設計的,受保護(protected)的方法是不是就有意義了呢?當然,這也是一種非常極端的用法,可能并不提倡。

接口的所有方法都是public abstract的,無論你顯式聲明與否;但Java 8 提供了接口方法的默認實現,叫做default方法,用關鍵字default作為修飾符來標識,這一定意義上破壞了這一約束。

接口本身是public abstract的,abstract修飾符被默認隱藏。

靜態

靜態代碼的真正意義是什么?靜態代碼是屬于類的代碼,即便對象不存在,屬于類的代碼也存在也可訪問,只要類已經被加載。#Todo#

值傳遞還是引用傳遞

Java是值傳遞還是引用傳遞?不知道這個問題有沒有使你感到困擾,但這個問題確實一直困擾著我,我覺得對象是引用傳遞,但是很多教科書式的答案都是說Java只有值傳遞,直到我讀到《Thinking in Java 4th Edition》里面的一段話,才豁然開朗:

This brings up the terminology issue, which always seems good for an argument. The term is "pass by value," and the meaning depends on how you perceive the operation of the program. The general meaning is that you get a local copy of whatever you’re passing, but the real question is how you think about what you’re passing. When it comes to the meaning of "pass by value," there are two fairly distinct camps:

Java passes everything by value. When you’re passing primitives into a method, you get a distinct copy of the primitive. When you’re passing a handle into a method, you get a copy of the handle. Ergo, everything is pass by value. Of course, the assumption is that you’re always thinking (and caring) that handles are being passed, but it seems like the Java design has gone a long way toward allowing you to ignore (most of the time) that you’re working with a handle. That is, it seems to allow you to think of the handle as "the object," since it implicitly dereferences it whenever you make a method call.

Java passes primitives by value (no argument there), but objects are passed by reference. This is the world view that the handle is an alias for the object, so you don’t think about passing handles, but instead say "I"m passing the object." Since you don’t get a local copy of the object when you pass it into a method, objects are clearly not passed by value. There appears to be some support for this view within Sun, since one of the "reserved but not implemented" keywords is byvalue. (There’s no knowing, however, whether that keyword will ever see the light of day.)

Having given both camps a good airing and after saying "It depends on how you think of a handle," I will attempt to sidestep the issue for the rest of the book. In the end, it isn"t that important – what is important is that you understand that passing a handle allows the caller’s object to be changed unexpectedly.

其實,對于Java這種純面向對象的語言,無所謂值傳遞還是引用傳遞,更準確的理解就是傳遞的就是那個對象,所以對傳遞進來的對象的修改,會反映到原來對象上,這就足夠了。只有在低級語言如C++才會需要明顯區分地址、引用和值這些概念,而對于高級的面向對象語言則完全是多此一舉。所以,如果以后有人問你Java是值傳遞還是引用傳遞,你直接告訴他這是個無聊的問題。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/65560.html

相關文章

  • JS基礎篇--replace替換全部的正確應用

    摘要:一般使用使用正則循環替換如下這種情況,表情標簽的替換,我們需要正常的字符串替換,例如結合實現。 一般使用 var str = test-test-test; str = test-test-test.replace(test, ok); console.log(str); 使用正則: var str = test-test-test; str = test-test-test.repl...

    jackzou 評論0 收藏0
  • JS設計模式之Obeserver(觀察者)模式、Publish/Subscribe(發布/訂閱)模式

    摘要:觀察者模式定義設計模式中對的定義一個對象稱為維持一系列依賴于它觀察者的對象,將有關狀態的任何變更自動通知給它們。如圖模式比較觀察者模式則多了一個類似于話題調度中心的流程,發布者和訂閱者解耦。 Obeserver(觀察者)模式 定義 《js設計模式》中對Observer的定義:一個對象(稱為subject)維持一系列依賴于它(觀察者)的對象,將有關狀態的任何變更自動通知給它們。 《設計模...

    荊兆峰 評論0 收藏0
  • SpringCloud(第 054 篇)簡單 Quartz-Cluster 微服務,采用注解配置 Q

    摘要:加載配置文件失敗加載配置文件失敗添加定時調度任務定時調度任務添加定時調度任務定時調度任務執行的張表入數據庫添加啟動類簡單微服務,采用注解配置分布式集群。 SpringCloud(第 054 篇)簡單 Quartz-Cluster 微服務,采用注解配置 Quartz 分布式集群 - 一、大致介紹 1、因網友提到有沒有采用注解式配置的Quartz例子,因此本人就貼上了這樣一個樣例; 2、至...

    isLishude 評論0 收藏0
  • 《Python有什么好學的》之修飾器

    摘要:然后煎魚加了一個后再調用函數,得到的輸出結果和加修飾器的一樣,換言之等效于因此,我們對于,可以理解是,它通過閉包的方式把新函數的引用賦值給了原來函數的引用。 Python有什么好學的這句話可不是反問句,而是問句哦。 主要是煎魚覺得太多的人覺得Python的語法較為簡單,寫出來的代碼只要符合邏輯,不需要太多的學習即可,即可從一門其他語言跳來用Python寫(當然這樣是好事,誰都希望入門簡...

    lewinlee 評論0 收藏0

發表評論

0條評論

itvincent

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<