轉載:JAVA企業面試題精選 OOP 21-24

假裝鎮定發表於2018-09-30

轉載:https://blog.csdn.net/qq_38131668/article/details/75222751

2.21.物件導向的程式在執行時會建立多個物件,這些物件之間通常可以相互”傳送訊息”,談談你對”物件之間傳送訊息”這句話的理解,並編寫幾句Java示例程式碼展示物件之間傳送訊息的具體程式設計實現方法

參考答案:

  呼叫方法的行為通常被稱為傳送訊息給物件.程式碼示例如下:

    public boolean login(String userName,String pwd){
    //實現登入的程式碼
    }
    //處理使用者請求的程式碼
    public String action(){
        String userName = request.getParameter("userName");
        String pwd = request.getParameter("pwd");
        //呼叫login方法傳遞使用者名稱,密碼資訊進入方法
        login(userName,pwd);
        return "success";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

  上述程式碼中,在action方法中,呼叫login方法並傳遞使用者名稱,密碼資訊進入該方法,即將訊息傳遞到了login方法的內部.

2.22.重寫Clazz類的equals方法:

    public class Clazz{
        private in id;

        public int getId(){
            return id;
        }

        public void setId(int id){
            this.id = id;
        }

        @Override
        public boolean equals(Object obj){

        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

參考答案:

    public class Clazz{
        private in id;

        public int getId(){
            return id;
        }

        public void setId(int id){
            this.id = id;
        }

        @Override
        public boolean equals(Object obj){
            if(this == obj){
                return true;
            }
            if(obj == null){
                return false;
            }
            if(getClass() != obj.getClass()){
                return false;
            }
            Clazz other = (Clazz) obj;
            if(id != other.id){
                return false;
            }
            return true;
        }
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

2.23.請看下列程式碼:

Test1類:

package com.welkin.test;

public class Test1{

    public static String method(){
        return "hello world!";
    }

    public static void main(String[] args){
        System.out.println(Test1.method());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Test2類:

package com.welkin.test;

public class Test2{

    public static void main(String[] args){
        System.out.println(Test1.method());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

Test3類:

package com.welkin.test.a;

import com.welkin.test.Test1;

public class Test3{

    public static void main(String[] args){
        System.out.println(Test1.method());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Test4類:

package com.welkin.test.a;

import com.welkin.test.Test1;

public class Test4 extends Test1{

    public static void main(String[] args){
        System.out.println(Test1.method());
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

  將Test1中的method方法的作用域修飾符public以下第一列的作用域修飾符替換,請在第二,三,四,五列表格中以”√”和”x”標註在各種情況下類Test1,Test2,Test3,Test4是否能正常輸出結果.

作用域修飾符 Test1 Test2 Test3 Test4
public
protect
private
不寫

參考答案:

作用域修飾符 Test1 Test2 Test3 Test4
public
protect x
private x x x
不寫 x x

2.24.heap和stack有什麼區別?

參考答案:

  棧(stack)和堆(heap)都是Java用來在記憶體中存放資料的地方,二者區別在於:
1.棧存放基本型別變數和物件引用,當超過作用域後釋放;堆存放new出來的物件和陣列;

2.堆可以動態的分配記憶體大小,生存期也不必實現告訴編譯器,Java的垃圾回收器會自動收走這些不再使用的資料.存在棧中的資料大小與生存期必須是確定的,缺乏靈活性.棧的存取速度比堆要快,僅次於直接位於CPU中的暫存器.堆由於要在執行時動態分配記憶體,存取速度較慢;

3.棧資料可以共享,如字面量3等;堆不可以;

4.棧是一種線性集合,其新增和刪除元素的操作應在同一段完成,棧按照後進先出的方式進行處理;堆地址是不連續的,可隨機訪問.

相關文章