学Java时遇见的错误集合(1)
来源:互联网 发布:超神平刷软件 编辑:程序博客网 时间:2024/05/22 05:27
要让一个类使用排序服务必须要让它实现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”的条件测试
- 学Java时遇见的错误集合(1)
- 平时遇见的错误集合
- Java 利用 BeanUtils进行遇见的错误
- C++:VS遇见的错误(持续)
- hibernate遇见的错误
- struts2遇见的错误
- hadoop遇见的错误
- angualr2遇见的错误
- andoroid_ActionBar_遇见的错误
- 过程中遇见的错误
- 网上商城中遇见的错误
- Maven常遇见的错误
- 遇见的几个Python错误
- java遇见的递归
- 《遇见未知的自己》学而思
- SpringMVC和mybatis整合时遇见的错误
- EJB中遇见的错误1和解决方法
- 我所遇见的PHP错误总结(1)
- 在linux上部署报错NoSuchMethodError
- lua tcp通讯封装 http通讯封装
- Android应用层View绘制流程与源码分析
- vtune中几个参数
- mac更新导致brew不能使用
- 学Java时遇见的错误集合(1)
- latex中,table的caption字母全部大写了,但是我们希望只有首字母是大写。
- 简介机器学习十大经典算法
- MySQL和oracle在开发中的区别
- PHP初体验
- 好用的截图软件
- 批量压缩文件夹
- activemq与spring的整合
- hashCode() 和equals() 区别和作用