JAVA企业面试题精选 OOP 21-24

本文探讨了Java中对象间如何通过方法调用发送消息,并提供了示例代码。此外,还详细介绍了equals方法的重写及不同访问修饰符对类间方法调用的影响。最后,对比分析了堆和栈的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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是否能正常输出结果.

作用域修饰符Test1Test2Test3Test4
public
protect
private
不写
参考答案:
作用域修饰符Test1Test2Test3Test4
public
protectx
privatexxx
不写xx

2.24.heap和stack有什么区别?

参考答案:

  栈(stack)和堆(heap)都是Java用来在内存中存放数据的地方,二者区别在于:
1.栈存放基本类型变量和对象引用,当超过作用域后释放;堆存放new出来的对象和数组;

2.堆可以动态的分配内存大小,生存期也不必实现告诉编译器,Java的垃圾回收器会自动收走这些不再使用的数据.存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.栈的存取速度比堆要快,仅次于直接位于CPU中的寄存器.堆由于要在运行时动态分配内存,存取速度较慢;

3.栈数据可以共享,如字面量3等;堆不可以;

4.栈是一种线性集合,其添加和删除元素的操作应在同一段完成,栈按照后进先出的方式进行处理;堆地址是不连续的,可随机访问.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值