Ch4类和对象练习题之方法
一 简答题
1、 如果在一个返回值的方法中,不写return语句会发生什么错误?在返回值类型为void
的方法中可以有return语句吗?下面的方法中的return语句是否会导致语法错误? public static void xMethod(double x,double y){
System.out.println(x+y); return x+y;}
如果在一个返回值的方法中,不写return语句会发生无效的数据操作错误。在返回值类型为void的方法中可以有return语句。会导致语法错误。
2、 什么是值传递?给出下面程序运行的结果,分别给出调用max之前、刚进入max方法、
max方法刚要返回之前以及max方法返回之后堆栈的内容。 public class Test{
public statci void main(String[] args){ int max=0;
max(1,2,max);
System.out.println(max);
}
public static void max(int value1,int value2,int max){ if(value1>value2) max=value1; else
max=value2; } }
值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。
结果是0.调用max之前是0,刚进入max方法是2,max方法刚要返回之前是2,max返回之后是0.
3、 描述传递基本类型参数和传递引用类型参数的区别,给出下面程序的输出。
public class Test{
public static void main(String[] args){ Count myCount=new Count(); int times=0;
for(int i=0;i<100;i++)
increment(myCount,times);
System.out.println(“count is”+myCount.count); System.out.println(“times is”+times); }
public static void increment(Count c,int times){ c.count++; times++;
} }
public class Count{
public int count; public Count(int c){ count=c; }
public Count(){ count=1; }
}
基本类型是值传递,引用类型是引用传递.值传递不改变原来的值,引用传递会改变原来的值
结果是count is101 times is0
4、 假设TestClass类的定义如下
publi class TestClass{
int i;
static String s; void method1(){ }
static void method2(){
}
t是TestClass的一个实例,下列哪些语句是正确的? System.out.println(t.i);对 System.out.println(t.s);对 t.method1();对 t.method2();对
System.out.println(TestClass.i);错 System.out.println(TestClass.s);对 TestClass.method1();错 TestClass.method2();对
正确的是System.out.println(t.i); System.out.println(t.s); t.method1();
t.method2();
System.out.println(TestClass.s);
TestClass.method2();
5、 能否从静态方法中调用实例方法或引用一个实例变量?能否从实例方法中调用静态方
法或引用一个静态变量?下面代码错误在哪里? public class Test{
public static void main(String[] args){ method1(); }
public void method1(){ method2(); }
Public static void method2(){
System.out.println(“what is radius”+c.getRadius()); }
Circle c=new Circle(); }
不能从静态方法中调用实例方法或引用一个实例变量,能从实例方法中调用静态方法或引用一个静态变量。错在静态主函数方法不能访问非静态方法method1()。
6、 在下面代码中,Circle类中的radius是私有的,而myCircle是Circle类的一个对象,下面
强调的代码会导致什么问题吗?解释为什么?
public class Circle{ privat double radius=1.0; public double getArea(){ return radius*radius*Math.PI; }
public static void main(String[] args){ Circle myCircle=new Circle();
System.out.println(“Radius is”+myCircle.radius); } }
Circle类的所以对象里radius都是1.0,因为在Circle类中radius是私有的。 7、 描述this关键字的作用,下面代码有什么错误?
public class Test{ private int p; public Test(){
System.out.println(“Test’s no-rgs constructor invoked”); this(0); }
public Test(int p){ p=p; }
public void setP(int p){ p=p; } }
This是java中使用的一个有特定意义的引用,它指向当前对象自身。 this(0)是错误的,this是一个指向当前对象自身的引用,不是方法。 8、 运行下面的程序输出结果是什么?
class A{
public A(){
System.out.println(“A’s no-arg constructor is invoked”); }
}
class B extends A{ }
public class C{
public static void main(String[] args){ B b=new B(); } }
A’s no-arg constructor is invoked
下面的程序在编译时会出现什么问题?
class A{
public A(int x){ } }
class B extends A{ public B(){ }
}
public class C{
public static void main(String[] args){ B b=new B(); } }
父类当中是有参构造函数,而子类是无参,出错
9、 给出下面程序的输出结果,当调用new A(3)时,会调用Object的无参构造方法吗?
public class Test{
public static void main(String[] args){ A a=new A(3);
} }
class A extends B{ public A(int t){
System.out.println(“A’s constructor is invoked”); } }
class B{
public B(){
System.out.println(“B’s constructor is invoked”); } }
B’s constructor is invoked A’s constructor is invoked 会 10、
下面代码中A类和B类在同一个包中,如果问号分别被空白代替、private代替、
protected代替,B类能编译吗?
package p1; public class A{ ? int i; ? void m(){ ....................... } package p1; public classBextends A{ public void m1(String[] args){ System.out.println(i); m(); }
相关推荐: