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