作題總結(三)

1.

下列整型常量 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();
    }
}

輸出:

image

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」。

相關文章
相關標籤/搜索