尚学堂__百战程序员__1573题------第五章 面向对象

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

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

         成员变量从属于对象;

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

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

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

             对

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

   必须一致

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

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

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

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

15、构造方法中能不能有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、【上机】设计一个类代表二维空间的一个点

class Point{
    int x1;
    int y1;
    public Point(int x1,int y1){
        super();
        this.x1 = x1;
        this.y1 = y1;
    }
    public void p(){
        System.out.println("判断的坐标为:("+x1+" ,"+y1+")");
    }
}

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

class Cricle{
    private int x;//圆心坐标
    private int y;//圆心坐标
    private int r;//圆的半径

//    无参构造
    public Cricle() {
    }
//全参构造
    public Cricle(int x, int y, int r) {
        this.x = x;
        this.y = y;
        this.r = r;
    }
//    求面积
    public void math(){
        System.out.println("圆的面积为:"+Math.PI*r*r);
    }

    public void show(){
        System.out.println("圆的坐标为:("+x+","+y+")"+"\n半径为:"+r);
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getR() {
        return r;
    }

    public void setR(int r) {
        this.r = r;
    }
}

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

        对象)内,并写程序验证

package baseSe;

import java.util.Scanner;

/**
 * @author lifechat
 * @version 1.0.0
 * @github <a href="https://github.com/lifechat">lifechat</a>
 * @date 2021-08-16 10:07
 * @description
 */
public class ch3_1 {
    public static void main(String[] args) {
        Cricle c = new Cricle(1,2,3);
        c.show();
        Scanner sc = new Scanner(System.in);
        System.out.println("输入一个坐标");
        int x1 = sc.nextInt();
        int y1 = sc.nextInt();
        c.pd(x1,y1);
    }
}

class Point{
    int x1;
    int y1;
    public Point(int x1,int y1){
        super();
        this.x1 = x1;
        this.y1 = y1;
    }
    public void p(){
        System.out.println("判断的坐标为:("+x1+" ,"+y1+")");
    }
}
class Cricle{
    private int x;//圆心坐标
    private int y;//圆心坐标
    private int r;//圆的半径

//    无参构造
    public Cricle() {
    }
//全参构造
    public Cricle(int x, int y, int r) {
        this.x = x;
        this.y = y;
        this.r = r;
    }
//    求坐标点在哪儿
    public void pd(int x1,int y1){
        double m = Math.abs(x1-x);
        double n = Math.abs(y1-y);
        double r1 = Math.sqrt(m*m+n*n);

        if(r1 <= r){
            System.out.println("在圈内");
        }else{
            System.out.println("不在圈内");
        }
    }
//    求面积
    public void math(){
        System.out.println("圆的面积为:"+Math.PI*r*r);
    }

    public void show(){
        System.out.println("圆的坐标为:("+x+","+y+")"+"\n半径为:"+r);
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int getR() {
        return r;
    }

    public void setR(int r) {
        this.r = r;
    }
}

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、如何对一个数组的多个对象按照不同的依据进行排序;

        运用Comparator 和 Comparable 对目标对象的属性进行排序

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

        Comparable接口实现

        

        Comparator接口实现

         

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

        垃圾回收,garbage collection,程序员无权调用垃圾回收器

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

        运行垃圾回收机制

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

        在垃圾收集器将对象从内存中清除出去前,做必要的清理工作。

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

  一个自动,一个手动

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

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

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

项目阶段3的太阳系模型的代码:

        https://gitee.com/xiaqi17/website/tree/master/SunModel

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值