百战程序员5-面向对象

1、简述面向对象和面向过程的区别和联系?

     面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

    面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

2、对象和类的关系是?

     类是抽象的,对象是具体的,是类的实例。

3、栈的特点是?存放什么内容?

   先进先出。

  栈在程序的运行中有着举足轻重的作用。最重要的是栈保存了一个函数调用时所需要的维护信息,这常常称之为堆栈帧或者活动记录。堆栈帧一般包含如下几方面的信息:
  1.函数的返回地址和参数
  2. 临时变量:包括函数的非静态局部变量以及编译器自动生成的其他临时变量。

4、堆的特点是?存放什么内容?

 堆内存有内存地址,都是将内存的地址赋值给引用变量

堆内存变量无用后由垃圾回收机制回收;

堆内存会自动初始化;

堆内存存放引用数据类和new出来的

5、【上机】画出如下程序的内存结构(课堂上的代码):

//测试类和对象

public class TestObject{

       public static void main(String[] args){

              Car c1 = new Car();

              c1.changeColor("红色");

              c1.showColor();

              System.out.println(Car.tyreNum);

              System.out.println(c1.tyreNum);

             

              Car c2 = new Car();

              Engine e = new Engine();

              e.speed = 1000;

              e.weight = 10;

              c2.engine = e;

              c2.color="黑色";

              c2.tyreNum = 10;

              System.out.println(c1.tyreNum);

       }

}

class Car {

       static int tyreNum=4;

       Engine engine;

       String color;   //char sequence :字符序列

      

       void changeColor(String c){

              color = c;

       }

      

       void showColor(){

              System.out.println("我的颜色是:"+color);

       }

}

class Engine{

       int speed;

       int weight;

}

 

6、局部变量、成员变量、静态变量分别怎么声明?

   局部变量:在方法或代码块中声明的变量

  成员变量:在类中生命的变量称为 成员变量

  静态变量:用static 修饰额成员变量,也叫类变量

7、局部变量使用之前,必须要手动初始化吗?

 对

8、如果不手动指定成员变量的值,系统将会自动初始化。那么初始化的规则是?

   整型初始化为0;

  浮点型初始化为0.0

  引用数据类型初始化为null;

  boolean型初始化为false;

  char 型初始化为\uoooo

8、成员变量从属于谁? 静态变量又叫什么以及从属于谁? 局部变量从属于谁?

 成员变量从属于对象;

静态变量也叫类变量,属于类;

局部变量的从属于方法或者代码块

9、构造方法的作用是两个:一个构造类的对象,另一个作用是初始化对象的属性。这
        种说法对不?

             对

10、构造方法的名称必须保持跟类名一致吗?

   必须一致

11、构造方法有没有返回值?详细用文字描述返回值问题。

   构造方法没有返回值,也不能加void

12、构造方法如何被调用?

   实例化对象的时候调用,new

13、构造方法中能不能有return语句?

   不能

14、系统一定会给我们添加无参数的构造方法吗? 请详细解释。

   没有构造方法的时候,java会默认添加无参构造方法

15、下面的代码有什么问题:

class Computer {

              int price;

              int type;

              String brand;

             

              public void  start(){

                     System.out.println("启动中....");

              }

              computer(int _price, int type, String _brand){

                     //this.price = price;

                     price = _price;

                     type = type;

                     brand = _brand;

              }

}

   当局部变量的名称与成员变量的名称相同时,使用this代表成员变量

16、【上机】设计一个类代表二维空间的一个点

 

17、【上机】设计一个类代表二维空间的一个圆。要求两个成员变量。一个是圆心,一
        个是半径提供计算面积的方法。

 18、【上机】为上述Cricle类添加一个方法,计算一个点(Point对象)是否在圆(Cricle

        对象)内,并写程序验证

19、构造方法能不能重载?

   可以

20、this在普通方法中,指的是哪个对象?在构造方法中,指的是?

   this在普通方法中总是指向调用该方法的对象

  this在构造方法中总是指向正要初始化的对象

21、static变量在内存中放置在哪个区? static变量和方法为什么被称为类变量和类方
        法?可以被该类所有对象共享吗?

   static 变量存在数据区

  static修饰的归类所有,可以用类名调用

  可以被该类所有对象共享

22、静态初始化块和main方法哪个先被执行?

   静态初始化代码块先执行

23、一个构造方法调用另一个构造方法怎么调用? this(),这样的调用方式必须位于第
        一句吗?

   this()调用本类的无参构造方法

  this(实参列表) 调用本类的带参构造方法

  super(),super(实参列表)则是调用父类的;

  this()调用必须位于构造方法的第一句

24、package的两个作用是什么?

   解决类的重名问题,

  方便类的管理;

25、增加package以后,我们在DOS下编译怎么做?

   javac -d . Test.java

26、import是用于导入包还是导入类?

   导包,也就是导入包中的类

27、import  Java.util.*; 会不会降低程序运行速度?为什么?

   因为只有在程序运行时用到了某个类时,才会加载它(且只加载一次),未用的类都不会加载,即类是动态加载的。因此不会影响运行速度。

28、import static 静态导入的作用是导入类还是导入类的静态属性和静态方法?

   导入类的静态属性和静态方法

29、如果同时导入:Java.util.Date;  Java.sql.Date; 在程序中怎么区分它们?

   用包名加类名的形式来显示,例如:Java.util.Date表示Date

30、【上机】 完成this、static、package、import的测试代码

 31、Javadoc注释怎么写?

 /**开头

结尾*/

32、Java项目的API文档如何生成?请将步骤写出。

创建java源文件包。java文件都是存放在一个package包中,这样方便对java文件进行操作和区分,首先在磁盘上创建文件夹一样的方式创建package包。

创建java源文件。在包下,创建与文件名相同的java源文件,输入一些文档注释,这些文档注释用于自动的api文件进行说明使用。

进入java源文件目录。通过cd等windows命令进入java源文件包所在的磁盘位置。

查看javadoc命令使用说明。如果是第一次使用javadoc命令,可以通过javadoc -help命令查看javadoc使用说明。

开始创建api文件。使用命令输入javadoc -d javaapi -header 测试的API -doctitle 这是我的第一个文档注释 -version -author javadoc/Hello.java 进行文档生成。-d:文件存储位置; -head:文件头部名称; -version:显示版本; -author:显示作者; javadoc/Hello.java 处理的文件包以及java源文件.

查看生成的api文件。创建成功之后,就会自动创建指定的文件夹下生成api文件。打开index.html就是api文件的入口。

转载:

33、面向对象中的封装,追求的是“高内聚,低耦合”。解释一下,内聚什么?什么叫
       耦合?

 内聚就是一个模块内各个元素彼此结合的紧密程度,

高内聚就是一个模块内各个元素彼此结合的紧密程度高。

34、封装的几个关键字:private,default,protected,public的含义。

 

35、一般属性是否要设置为private?

 是的,防止数据泄露和非法修改

36、如果属性设置为private,如何让外部访问该属性?

 提供public的get方法

37、提供getter、setter方法的操作,Eclipse中如何实现?

   source->Generate getter and setter

38、对于boolean类型的属性,提供的getter方法是:getXXX或是isXXX?

   isXXX

39、Javabean就是只包含属性和相关getter、setter方法,不包含业务逻辑处理的类,
       这种说法对吗?

   javabean 既可以封装数据,也可以封装业务逻辑

40、继承的好处是什么?

   一、类是对象的抽象,继承是某一批类的抽象

  二、代码复用

 41、Java中有多继承吗?C++中有多继承吗? 单继承相比多继承优势在什么地方?

 java只有单继承,但可以实现多个接口;

c++有多继承;

单继承有利于系统维护,简化

42、【上机】模仿课堂上动物世界的例子,我们自己写个例子。

 43、Java的继承使用哪个关键字实现?

 extends

44、定义某个类时,如果没有使用extends,那么继承了哪个类?

   Objective类

45、Java中,有没有多继承? 请说明,Java为什么取消了多继承?

 没有。太难了

45、重写(override)指的是什么?

   子类对父类 方法的重写

46、假如父类有main方法,子类能不能继承?

   子类不能继承父类的main方法,因为会造成死循环,最后导致栈内存溢出

47、Object是所有类的根类吗?是所有类的直接父类吗?

   Object是所有类的根类。但不是直接父类

48、在哪里查看Object类的源代码?

  jdk ->src

 49、Object类中的toString方法能否被子类重写?请做测试。

 可以

50、【上机】完成继承、Object相关的测试代码

 51、super指的是什么?

 直接父类

52、构造方法中,第一个话总是super吗?

  不一定,也可以是this()

53、叙述一下,有继承结构时,构造方法的调用顺序?

  

   结论:先执行父类构造函数,再执行子类构造函数

54、重写中,子类的返回值类型可不可以跟父类不完全一致?说出你的理由。

 可以,可以相同也可以是子类

55、如何判断两个对象内容是否相同?重写equals(()有什么要求?

   重写equals()

56、举一个现实的例子,说明多态。

57、多态的三个必要条件是什么?

 继承、方法重写、父类引用指向子类对象

59、什么是向上转型?什么是向下转型?

 向上转型:父类引用指向子类对象

向下转型:父类引用转化为子类对象

60、多态的常用使用场合有哪些?

 父类做返回值,可以返回父类的任何子类对象,父类做形参,实参可以是父类的任何子类对象

61、Java的方法绑定采用动态绑定还是静态绑定?

 对象象方法是动态绑定,静态方法、private、构造器、super的是静态绑定

62、final修饰变量、方法、类分别表示什么含义?

   final修饰的变量是常量,不可改变

  final修饰的方法不能被子类重写;

  final修饰的类不能被继承

63、final修饰的方法能不能被重载?能不能被重写?

 可以重载,但不能覆盖(重写)

64、String类能不能被继承?为什么?

   不能,String类是final

 65、包含抽象方法的类是抽象类吗? 抽象类一定包含抽象方法吗?

   包含抽象方法的是抽象类,

  抽象类不一定包含抽象方法,

  注意:必须

66、抽象类中能不能有普通方法?能不能定义构造方法?

   可以,可以

67、抽象类能不能被new出来?即抽象类的构造方法能不能被调用?

 不能实例化,但构造方法可以被子类调用

68、接口中只能定义常量和抽象方法吗?

   

69、接口描述了现实世界中什么逻辑?

 

70、接口中的常量一定是public static final吗?抽象方法一定是public abstract吗?

 是的

71、接口中能不能定义普通变量,普通方法?从设计接口的角度说明为什么这么做?

   不能,接口就是制定规则的。

72、接口能不能被new?

 不能

73、接口中有没有多继承?

 有

74、一个类能不能实现多个接口?

 可以

75、【上机】完成抽象类、接口的语法测试代码

 

 76、【上机】使用接口,定义电子产品系统(智能手机、MP3、智能手表)。

 

77、如何对一个数组的多个对象按照不同的依据进行排序;

 实现compareable接口或者comparator接口

78、模拟实现Comparable和Comparator接口;

 

79、GC指的是什么?写出英文全称。垃圾回收机制中,程序员能不能调用垃圾回收器?

 

80、System.gc()指的是什么意思?

 运行垃圾回收器

81、finalize方法可以用来做什么?

82、通过两个事例描述C++,Java不同的内存回收机制。

  一个自动,一个手动

  很久很久以前,每家每户“自扫门前雪”,自己收垃圾。

  现在,环保局的垃圾车自动收垃圾。

  通过,这些例子类比Java和C++不同的回收机制及特点。

猜你喜欢

转载自www.cnblogs.com/lshaoyu/p/10450591.html