上海百奥除湿机维修:JAVA学习入门 对初次接触者 相当有用222,Java基础,编程开发,Java,好视点技术文档

来源:百度文库 编辑:偶看新闻 时间:2024/05/04 20:11:06

五、面向对象篇

34extends和implements有什么不同?

答:extends用于(单)继承一个类(class),而implements用于实现一个接口(inter

face

)。

interface的引入是为了部分地提供多继承的功能。

在interface中只需声明方法头,而将方法体留给实现的class来做。

这些实现的class的实例完全可以当作interface的实例来对待。

有趣的是在interface之间也可以声明为extends(单继承)的关系。

35java怎么实现多继承?

答:java不支持显式的多继承。

因为在显式多继承的语言例如c++中,会出现子类被迫声明祖先虚基类构造函数的问题,

而这是违反面向对象的封装性原则的。

java提供了interface和implements关键字来部分地实现多继承。参见34。

36abstract是什么?

答:被声明为abstract的方法无需给出方法体,留给子类来实现。

而如果一个类中有abstract方法,那么这个类也必须声明为abstract。

被声明为abstract的类无法实例化,尽管它可以定义构造方法供子类使用。

37public,protected,private有什么不同?

答:这些关键字用于声明类和成员的可见性。

public成员可以被任何类访问,

protected成员限于自己和子类访问,

private成员限于自己访问。

Java还提供了第四种的默认可见性,当没有任何public,protected,private修饰时,成

员是?br>?一包内可见??br>

类可以用public或默认来修饰。

38Override和Overload有什么不同?

答:Override是指父类和子类之间方法的继承关系,这些方法有着相同的名称和参数类

型。

Overload是指同一个类中不同方法(可以在子类也可以在父类中定义)间的关系,

这些方法有着相同的名称和不同的参数类型。

39我继承了一个方法,但现在我想调用在父类中定义的方法。

答:用super.xxx()可以在子类中调用父类方法。

40我想在子类的构造方法中调用父类的构造方法,该怎么办?

答:在子类构造方法的第一行调用super(...)即可。

41我在同一个类中定义了好几个构造方法并且想在一个构造方法中调用另一个。

答:在构造方法第一行调用this(...)。

42我没有定义构造方法会怎么样?

答:自动获得一个无参数的构造方法。

43我调用无参数的构造方法失败了。

答:如果你至少定义了一个构造方法,就不再有自动提供的无参数的构造方法了。

你需要显式定义一个无参数的构造方法。

44我该怎么定义类似于C++中的析构方法(destructor)?

答:提供一个voidfinalize()方法。在GarbargeCollector回收该对象时会调用该方法

注意实际上你很难判断一个对象会在什么时候被回收。作者从未感到需要提供该方法。

45我想将一个父类对象转换成一个子类对象该怎么做?

答:强制类型转换。如

publicvoidmeth(Aa)

{

Bb=(B)a;

}

如果a实际上并不是B的实例,会抛出ClassCastException。所以请确保a确实是B的实例

46其实我不确定a是不是B的实例,能不能分情况处理?

答:可以使用instanceof操作符。例如

if(ainstanceofB)

{

Bb=(B)a;

}

else

{

...

}

47我在方法里修改了一个对象的值,但是退出方法后我发现这个对象的值没变!

答:很可能你把传入参数重赋了一个新对象,例如下列代码就会造成这种错误:

publicvoidfun1(Aa)//a是局部参数,指向了一个外在对象。

{

a=newA();//a指向了一个新对象,和外在对象脱钩了。如果你要让a作为传

出变

量,不要写这一句。

a.setAttr(attr);//修改了新对象的值,外在对象没有被修改。

}

基本类型也会出现这种情况。例如:

publicvoidfun2(inta)

{

a=10;//只作用于本方法,外面的变量不会变化。

}

六、java.util篇

48java能动态分配数组吗?

答:可以。例如intn=3;Language[]myLanguages=newLanguage[n];

49我怎么知道数组的长度?

答:用length属性。如上例中的myLanguages.length就为3。

50我还想让数组的长度能自动改变,能够增加/删除元素。

答:用顺序表--java.util.List接口。

你可以选择用ArrayList或是LinkedList,前者是数组实现,后者是链表实现。

例如:Listlist=newArrayList();或是Listlist=newLinkedList();。

51什么是链表?为什么要有两种实现?

答:请补习数据结构。

52我想用队列/栈。

答:用java.util.LinkedList。

53我希望不要有重复的元素。

答:用集合--java.util.Set接口。例如:Setset=newHashSet()。

54我想遍历集合/Map。

答:用java.util.Iterator。参见API。

55我还要能够排序。

答:用java.util.TreeSet。例如:Setset=newTreeSet()。放进去的元素会自动排

序。

你需要为元素实现Comparable接口,还可能需要提供equals()方法,compareTo()方法,

hash

Code()方法。

56但是我想给数组排序。

答:java.util.Arrays类包含了sort等实用方法。

57我想按不同方法排序。

答:为每种方法定义一个实现了接口Comparator的类并和Arrays综合运用。

58Map有什么用?

答:存储key-value的关键字-值对,你可以通过关键字来快速存取相应的值。

59set方法没问题,但是get方法返回的是Object。

答:强制类型转换成你需要的类型。参见45。

60我要获得一个随机数。

答:使用java.util.Random类。

61我比较两个String总是false,但是它们明明都是"abc"!

答:比较String一定要使用equals或equalsIgnoreCase方法,不要使用==!

==比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。