下列整型常量 i 的定義中,正確的是( )java
A.final i;
B.static int i;
C.static final int i=234;
D.final float i=3.14f;
解析:關於final關鍵字,final能夠修飾類,修飾類的以後,該類就不能再被繼承了。(能夠出於安全角度考慮,可是儘可能不把 類設爲final)。final能夠修飾方法,被修飾的方法就不會被該類的子類的方法覆蓋,也就是將這個方法鎖定。final能夠修飾變量,可是變量的值一經賦值便不能改變,也就是說被final修飾的變量是常量。正則表達式
2.
數據庫
public static void main (String[] args) {
String classFile = "com. jd. ". replaceA11(".", "/") + "MyClass.class";
System.out.println(classFile);
}
輸出:安全
///////MyClass.class
解析:replaceAll這個方法的參數是正則表達式,在正則表達式中「.」表明任何字符
3.byte b1=1,b2=2,b3,b6; final byte b4=4,b5=6; b6=b4+b5; b3=(b1+b2); System.out.println(b3+b6);
該代碼編譯出錯的緣由?app
b1和b2是byte型,在計算的時候java將其上轉成int型進行計算,也就是b1+b2的和是int型,而b3是byte型,因此b3=(b1+b2)這一步編譯出錯。優化
表達式的數據類型自動提高, 關於類型的自動提高,注意下面的規則。 this
①全部的byte,short,char型的值將被提高爲int型; spa
②若是有一個操做數是long型,計算結果是long型; .net
③若是有一個操做數是float型,計算結果是float型; code
④若是有一個操做數是double型,計算結果是double型;
而聲明爲final的變量會被JVM優化,第3行至關於 b6 = 10.
4.String str = new String(「abc」),「abc」在內存中是怎麼分配的?
堆,字符串常量區。
解析:什麼是字符串常量池
JVM爲了減小字符串對象的重複建立,其維護了一個特殊的內存,這段內存被成爲字符串常量池或者字符串字面量池
工做原理
當代碼中出現字面量形式建立字符串對象時,JVM首先會對這個字面量進行檢查,若是字符串常量池中存在相同內容的字符串對象的引用,則將這個引用返回,不然新的字符串對象被建立,而後將這個引用放入字符串常量池,並返回該引用。
5.該段代碼的輸出:
public class test02{ public static void main(String[] args){ Integer var1=new Integer(1); Integer var2=var1; doSomething(var2); System.out.print(var1.intValue()); System.out.print(var1==var2); } public static void doSomething(Integer integer){ integer=new Integer(2); } }
結果: 1true
解析:只有對引用對象的內部作了修改,纔會影響原對象,若是直接將引用修改了,則對原對象沒有影響,惟一的影響就是:這個被修改的引用,如今不是原來對象的引用,而是新對象的引用。
也就是說doSomething這個方法其實do了nothing!
class likeInteger{ int value; public likeInteger(int value){ this.value=value; } } public class test02{ public static void change1(likeInteger n){ n=new likeInteger(2); } public static void change2(likeInteger n){ n.value=3; } public static void main(String[] args) { likeInteger num=new likeInteger(1); System.out.print(num.value); change1(num); System.out.print(num.value); change2(num); System.out.print(num.value); } }
這段代碼的輸出是:113
6.下列選項中關於Java中super關鍵字的說法正確的是()
A.super關鍵字是在子類對象內部指代其父類對象的引用
B.super關鍵字不只能夠指代子類的直接父類,還能夠指代父類的父類
C.子類經過super關鍵字只能調用父類的方法,而不能調用父類的屬性
D.子類經過super關鍵字只能調用父類的屬性,而不能調用父類的方法
解析:看代碼:
class animals{ String move="slow"; public void f(){ System.out.println("this is fatherclass f"); } } class tiger extends animals { String move="fast"; public void f(){ System.out.println(super.move); super.f(); System.out.println(this.move); } } public class test03{ public static void main(String[] args) { tiger t=new tiger(); t.f(); } }
輸出:
C,D都是錯誤的。
7.String和StringBuffer的區別?
解析:String的長度是不可變的,StringBuffer的長度是可變的。若是對於一個常常須要修改內容的字符串來講,用StringBuffer比價好,由於StringBuffer的append方法相對於String的+不須要每次都分配新的內存。
使用StringBuffer的append方法進行字符串的鏈接,將比String更加節約內容,例如應用於數據庫SQL語句的鏈接,例如:StringBuffer sb = new StringBuffer();String user = 「test」;String pwd = 「123」;sb.append(「select * from userInfo where username=「).append(user).append(「 and pwd=」).append(pwd);這樣對象sb的值就是字符串「select * from userInfo where username=test and pwd=123」。