可以;必須只有一個類名與文件名相同。
byte 的取值范圍是 -128 -> 127 之間,一共是 256 位。一個 byte 類型在計算機中占據一個字節,那么就是 8 bit,所以最大就是 2^7 = 1111 1111。
Java 中用補碼來表示二進制數,補碼的最高位是符號位,最高位用 0 表示正數,最高位 1 表示負數,正數的補碼就是其本身,由于最高位是符號位,所以正數表示的就是 0111 1111 ,也就是 127。最大負數就是 1111 1111,這其中會涉及到兩個 0 ,一個 +0 ,一個 -0 ,+0 歸為正數,也就是 0 ,-0 歸為負數,也就是 -128,所以 byte 的范圍就是 -128 – 127。
在最外層循環前加一個標記如outfor,然后用break outfor;可以跳出多重循環。例如以下代碼:
public class TestBreak {
????public static void main(String[] args) {
????????outfor: for (int i = 0; i < 10; i++){
???????? for (int j = 0; j < 10; j++){
???????? if (j == 5){
???????????? break outfor;
???????????? }
???????????? System.out.println("j = " + j);
???????? }
???? }
????}
}
運行結果如下所示:
j = 0
j = 1
j = 2
j = 3
j = 4
早期的 JDK 中,switch(expr)中,expr 可以是 byte、short、char、int。從 1.5 版開始,Java 中引入了枚舉類型(enum),expr 也可以是枚舉,從 JDK 1.7 版開始,還可以是字符串(String)。長整型(long)是不可以的。
&運算符是:邏輯與;&&運算符是:短路與。
1)&和&&在程序中最終的運算結果是完全一致的,只不過&&存在短路現象。如果是&運算符,那么不管左邊的表達式是true還是false,右邊表達式是一定會執行的。當&&運算符左邊的表達式結果為false的時候,右邊的表達式不執行,此時就發生了短路現象,也就是說&&會更加的智能。這就是他們倆的本質區別。
2)當然,&運算符還可以使用在二進制位運算上,例如按位與操作。
char 類型可以存儲一個中文漢字,因為Java中使用的編碼是Unicode編碼,一個char 類型占2個字節(16 比特),所以放一個中文是沒問題的。
補充:使用Unicode 意味著字符在JVM內部和外部有不同的表現形式,在JVM內部都是 Unicode,當這個字符被從JVM內部轉移到外部時(例如存入文件系統中),需要進行編碼轉換。所以 Java 中有字節流和字符流,以及在字符流和字節流之間進行轉換的轉換流,如 InputStreamReader和OutputStreamReader,這兩個類是字節流和字符流之間的適配器類,承擔了編碼轉換的任務。
早期的 JDK 中,switch(expr)中,expr 可以是 byte、short、char、int。從 1.5 版開始,Java 中引入了枚舉類型(enum),expr 也可以是枚舉,從 JDK 1.7 版開始,還可以是字符串(String)。長整型(long)是不可以的。
Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在參數上加0.5然后進行取整。
前者不正確,后者正確。
對于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 類型,因此 s1+1 運算結果也是 int 型,需要強制轉換類型才能賦值給 short 型。
而 short s1 = 1; s1 += 1;可以正確編譯,因為 s1+= 1;相當于 s1 = (short)(s1 + 1);其中有隱含的強制類型轉換。
Java中的數組沒有length()方法,但是有length屬性。String有length()方法。
2 << 3,將2左移3位
public class Test{
????public static void main(String[] args) {
???????Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150; System.out.println(f1 == f2);
???????System.out.println(f3 == f4);
????}
}
f1==f2的結果是 true,而f3==f4 的結果是false。為什么呢?先來說說裝箱的本質。當我們給一個Integer 對象賦一個 int 值的時候,會調用 Integer 類的靜態方法 valueOf,如果看看valueOf的源代碼就知道發生了什么。如果整型字面量的值在-128 到 127 之間,那么不會 new 新的 Integer 對象,而是直接引用常量池中的Integer對象,所以上面的面試題中f1==f2的結果是 true,而f3==f4 的結果是false。
Java 的JDK從 1.5 開始引入了自動裝箱/拆箱機制。它為每一個基本數據類型都引入了對應的包裝類型(wrapper class),int的包裝類就是 Integer,其它基本類型對應的包裝類如下:
原始類型: boolean,char,byte,short,int,long,float,double包裝類型:Boolean,Character,Byte,Short,Integer,Long,Float,Double
方法的返回值是指我們獲取到的某個方法體中的代碼執行后產生的結果!(前提是該方法可能 產生結果)。返回值的作用:接收出結果,使得它可以用于其他的操作!
調用數值類型相應包裝類中的方法 parse***(String)或 valueOf(String) 即可返回相應基本類型或包裝類型數值;
將數字與空字符串相加即可獲得其所對應的字符串;另外對于基本類型 數字還可調用 String 類中的 valueOf(…)方法返回相應字符串,而對于包裝類型數字則可調用其 toString()方法獲得相應字符串;
可用該數字構造一 java.math.BigDecimal 對象,再利用其 round()方法 進行四舍五入到保留小數點后兩位,再將其轉換為字符串截取最后兩位。
false,因為有些浮點數不能完全精確的表示出來。
java中有三種移位運算符
<< :左移運算符,x << 1,相當于x乘以2(不溢出的情況下),低位補0
>> :帶符號右移,x >> 1,相當于x除以2,正數高位補0,負數高位補1
>>> :無符號右移,忽略符號位,空位都以0補齊
泛型中類型擦除 Java泛型這個特性是從JDK 1.5才開始加入的,因此為了兼容之前的版本,Java泛型的實現采取了“偽泛型”的策略,即Java在語法上支持泛型,但是在編譯階段會進行所謂的“類型擦除”(Type Erasure),將所有的泛型表示(尖括號中的內容)都替換為具體的類型(其對應的原生態類型),就像完全沒有泛型一樣。
注解是JDK1.5版本開始引入的一個特性,用于對代碼進行說明,可以對包、類、接口、字段、方法參數、局部變量等進行注解。它主要的作用有以下四方面: 生成文檔,通過代碼里標識的元數據生成javadoc文檔。 編譯檢查,通過代碼里標識的元數據讓編譯器在編譯期間進行檢查驗證。 編譯時動態處理,編譯時通過代碼里標識的元數據動態處理,例如動態生成代碼。 運行時動態處理,運行時通過代碼里標識的元數據動態處理,例如使用反射注入實例。
Java自帶的標準注解,包括@Override、@Deprecated和@SuppressWarnings,分別用于標明重寫某個方法、標明某個類或方法過時、標明要忽略的警告,用這些注解標明后編譯器就會進行檢查。
元注解:元注解是用于定義注解的注解,包括@Retention、@Target、@Inherited、@Documented @Retention用于標明注解被保留的階段 @Target用于標明注解使用的范圍 @Inherited用于標明注解可繼承 @Documented用于標明是否生成javadoc文檔 自定義注解,可以根據自己的需求定義注解,并可用元注解對自定義注解進行注解。