学Java时遇见的错误集合(1)

来源:互联网 发布:超神平刷软件 编辑:程序博客网 时间:2024/05/22 05:27
问题1: 
要让一个类使用排序服务必须要让它实现compareTo方法,因为要向sort方法提供对象的比较方式。但为什么不能在类中直接提供一个compareTo方法,而必须实现Comparable接口呢?
答:主要原因在于Java程序设计语言是一种强类型(strongly typed)语言。在调用方法的时候,编译器将会检查这个方法是否存在。在sort方法中可能存在下面这样的语句:
if (a[i].compareTo(a[j]) > 0)
{
……
}
为此,编译器必须确认a[i[一定有compareTo方法。如果a是一个Comparable对象的数组,就可以确保拥有compareTo方法,因为每一个实现Comparable接口的类都必须提供这个方法的定义。


问题2:
错误:Implicit super constructor xx() is undefined for default constructor. Must define an explicit constructor  
答:
因为父类已经定义了一个有参数的构造函数,且没有默认的无参构造函数。当子类继承父类时,必须在自己的构造函数显式调用父类的构造函数,才能确保子类在初始化前父类会被实例化。如果父类中有无参的构造函数,子类就不会强制要求自己构造函数,编译器会默认调用父类的构造函数。比如:
class Person { 
protected String name; 
protected int age; 
//你已经定义了自动的构造函数,此时编译器不会为你创建默认的构造函数 
public Person(String name,int age) { 
this.name=name; 
this.age=age; 

public void print() { 
System.out.println("Name:"+name+"/nAge:"+age); 
}

/*由于父类的构造函数是有参的,所以编译不会为你自动调用默认的构造函数,此时,子类在自己的构造函数中必须显式的调用父类的构造函数 */
class Student extends Person { 
public Student(String name,int age)
{      //子类构造函数 
//super();   不行,因为你的父类没有无参的构造函数 
super(name,age); 
      //显示调用父类的构造函数,而且必须是第一行调用 


class Test { 
public static void main(String args[]){ 






问题3:
Java里什么时候用throws
答:
throws只会出现在方法的头部,意在抛出方法中的异常给调用者,自己不出来程序中出来的异常。抛出自定义的异常用throws new Exception(){};最后这个异常不处理还是要throws到调用者那。另外,如果想将异常在方法中处理掉,就用try{} catch(){}。


问题4:
Java 的克隆对象时抛出 CloneNotSupportedException异常?
答:
Object声明的protected clone 虽然可以阻止实现clone() 的子类,在子类外部直接调用clone(),但对静态方法却没有办法,因为静态方法可以直接访问protected的方法,而这样就有可能会出现对对象使用clone(),而实际对象不支持clone(),所以就会抛出这个异常。


问题5:

问题1:Java中break return continue 区别

答:

1、return 语句的作用
      (1) return 从当前的方法中退出,返回到该调用的方法的语句处,继续执行
      (2) return 返回一个值给调用该方法的语句,返回值的数据类型必须与方法的声明中的返回值的类型一致,可以使用强制类型转换来是数据类型一致
      (3) return 当方法说明中用void声明返回类型为空时,应使用这种格式,不返回任何值。
2、break语句的作用
      (1) 只能在循环体内和switch语句体内使用break语句。
      (2) 当break出现在循环体中的switch语句体内时,其作用只是跳出该switch语句体。
      (3) 当break出现在循环体中,但并不在switch语句体内时,则在执行break后,跳出本层循环体。
      (4) 在循环结构中,应用break语句使流程跳出本层循环体,从而提前结束本层循环
3、continue语句作用
      (1) continue语句continue语句的一般形式为:continue;
      (2) 其作用是结束本次循环,即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定。
      (3) 注意:执行continue语句并没有使整个循环终止。在while和do-while循环中,continue语句使得流程直接跳到循环控制条件的测试部分 ,然后决定循环是否继续进行。
      (4) 在for 循环中,遇到continue后,跳过循环体中余下的语句,而去对for语句中的“表达式3”求值,然后进行“表达式2”的条件测试

原创粉丝点击