1 關於C++/Java 中的static成員和對象成員的說法正確的是()
A static 成員變數在對象的構造時產生;
B static成員函數在對象的成員函數中無法調用;
C 虛成員函數不可能是static成員函數
D static成員函數不能訪問static成員變數
註解: 首先:所謂的成員函數和成員變數都是類中的成員函數;
A static成員函數是在類的載入時產生,即就是說: 是在建構函式之前產生的;
B static成員函可以被類的成員函數訪問, 但static不可以訪問類的成員函數,因為其沒有this指標,即是無法復原的;
靜態可以訪問靜態,靜態不可以訪問非靜態
非靜態可以訪問靜態,非靜態可以訪問非靜態
C 虛成員在java中類似於是抽象方法,即抽象方法不可以用static, final,native synchronized private 來修飾.
static是沒有指標的,是類層級,所以抽象方法(虛方法)要用類的成員函數來實現,此時,如果用static修飾是很不合理的native是方法修飾符。Native方法是由另外一種語言(如c/c++,FORTRAN,彙編)實現的本地方法。因為在外部實現了方法,所以在java代碼中,就不需要聲明了,有點類似於介面方法。Native可以和其他一些修飾符連用,但是abstract方法和Interface方法不能用native來修飾。
答案C
2 What is the result?()
public class Test2 {
public static void main(String[] args) { int x = 3; int y = 1; //if(x=y) if(x==y) System.out.println("Not Equal"); else System.out.println("Equal");}
}
A The output is “Equal”
B The output is “Not Equal”
C An error at line 5 causes compilation to fail;
D The program executes but does not print a message
註解: 在Java 中if()括弧中只能是true或者 false而在該題中的括弧中是指派陳述式,會報錯,這正是和C++中的if的不同之處,C++中如果不是“==”,則會將括弧中的結果的:大於0的數轉化為true,而將小於0 的數轉換為false
答案: C
3 以下的多線程對int型變數的x的操作,哪個不需要進行同步()
A ++xB x=yC x++D x=1
註解:考察的是原子操作:在多進程(線程)訪問資源時,能夠確保所有其他的進程(線程)都不在同一時間內訪問相同的資源。原子操作(atomic operation)是不需要synchronized,這是Java多線程編程的老生常談了。所謂原子操作是指不會被線程調度機制打斷
的操作;這種操作一旦開始,就一直運行到結束,中間不會有任何 context switch (切換到另一個線程),原子操作可以是一個步驟,也可以是多個操作步驟,但是其順序是不可以被打亂,或者切割掉只執行部分。
同步是害怕在操作過程的時候被其他線程也進行讀取操作,一旦是原子性的操作就不會發生這種情況。因為一步到位的操作,其它線程不可能在中間幹涉。另外三項都有讀取、操作兩個步驟,而X=1則是原子性操作。
例如:x++ 先從讀取變數x 放在寄存器中,再對寄存器中存放的數進進行操作++,然後再賦值給記憶體中的x。
答案:D
4 如下的描述中正確的是()
class Person
{
String name = "no name";public Person(String nm){ name = nm;}
}
class Employee extends Person
{
String emp = "xxxx";public Employee( String id) { //super(id); //題中無此句 emp = id;}
}
public class Test4 {
public static void main(String[] args) { Employee e = new Employee("123"); System.out.println(e.emp);}
}
A 輸出: xxxx
B 輸出 : 123
C 編譯錯誤
D 輸出: No name
註解:此題中:子類在執行構造方法之前先執行父類的構造方法,如果子類中沒有顯示調用父類的構造方法,此時,系統給會預設調用父類的無參的構造方法,但是:如果父類中自己定義了構造方法,此時,一定要通過子類傳參調用父類的構造方法,如果沒有顯示調用,此時,系統不會給我們提供調用父類的無參的構造方法。系統會報錯。答案: c
5 java 的構造器的說法正確的是()
A 構造器的傳回值是void
B 如果一個源檔案中有多個類, 那麼構造器必須與公用類同名
C 構造器可以有0,1,或多個參數
D 每一個類可以有一個以上的構造器
註解:答案: BC
構造方法可以重載
public class Test5 {
class test{ public test() {}}class test2{ public test2() {}}public static void main(String[] args) {}
}