Java程序设计基础(第五版)期末总复习

来自兰州理工大学Java程序设计期末复习划重点!文章涉及常考知识点。


文章目录

  • 第1章 Java语言概述
  • 第2章 Java语言开发环境
  • 第3章 Java语言基础
  • 第4章 流程控制
  • 第5章 数组与字符串
  • 第6章 类与对象
  • 第7章 Java语言类的特性
  • 第8章 继承,抽象类和接口
  • 第9章 异常处理
  • 第10章 Java语言的输入输出与文件处理
  • 第11章 多线程
  • 第14章 事件处理

第1章 Java语言概述

Java语言有哪些特点?

简单易学、面向对象、平台无关性、可靠性、安全性、支持多线程、支持网络编程、编译与解释并存。

什么是平台无关性?Java语言是怎样实现平台无关性的?

编写的应用程序不用修改就可以在不同的软硬件平台上运行。Java语言是靠JVM在目标代码级实现平台无关性的,可以说JVM是Java平台无关的基础。


第2章 Java语言开发环境

环境变量Path和ClassPath的作用是什么?如何设置这两个环境变量?

path环境变量作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到path变量所指定的路径中查找看是否能找到相应的命令程序。classpath环境变量的作用是指定类搜索路径,要使用已经编写好的类,前提是能够找到它们,JVM就是通过classpath来寻找类的。

Java应用程序和小程序之间有哪些差别?

一个程序中可以有多个类,但只能有一个类是主类。 在 Java 应用程序中,这个主类是指包含 main()方法的类。 在 Java 小程序中,这个主类是一个继承自系统类 JApplet 或 Applet 的子类。 应用程序的主类不一定要求是 public 类,但小程序的主类要求必须是 public 类。 主类是 Java 程序执行的入口点。 简单说应用程序是从主线程启动 (也就是 main () 方法)。 applet 小程序没有 main () 方法,主要是嵌在浏览器页面上运行 (调用**init ()或者run ()**来启动),嵌入浏览器这点跟 flash 的小游戏类似。

第3章 Java语言基础

写出由键盘输入数据的两种基本格式。

在1.5版本之前,Java用BufferedReader来读取输入数据,在1.5版本之后,Java用Scanner来读取输入数据

import java.io.*;
public class Buffer {
    public static void main(String[] args) throws IOException {
        String str;
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        str = buf.readLine();
    }
}
import java.io.*;
import java.util.*;
public class Scan {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in); 
        double num = sc.nextDouble();
    }
}

编写程序,由键盘输入圆柱体的底半径r和高h,然后计算其体积并输出。

import java.util.*;
public class Exercise {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int r = in.nextInt();
        int h = in.nextInt();
        System.out.println(Math.PI * r * r * h);
    }
}

第4章 流程控制

在键盘上输入数n,编程计算sum = 1 – (1 / 2!) + (1 / 3!) - … + ((-1)^(n - 1))*(1 / n!)。

import java.util.*;
public class Exercise {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        double sum = 0;
        int sign = 1, temp = 1;
        for (int i = 1; i <= n; i++) {
            temp *= i;
            sum += sign * (1.0 / temp);
            sign = -sign;
        }
        System.out.println(sum);
    }
}

水仙花数是指其个位,十位和百位三个数字的立方和等于这个三位数本身,求出所有的水仙花数。

public class Exercise {
    public static void main(String[] args) {
        for (int i = 100; i <= 999; i++) {
            int temp = i, sum = 0;
            while (temp != 0) {
                sum += Math.pow(temp % 10, 3);
                temp /= 10;
            }
            if (sum == i)
                System.out.println(i);
        }
    }
}

从键盘输入一个整数,判断该数是不是完全数,完全数是指所有因数(包括1但不包括其本身)的和等于该数自身的数。例如,28=1+2+4+7+14就是一个完全数。

import java.util.*;
public class Exercise {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int sum = 0;
        for (int i = 1; i < num; i++) {
            if (num % i == 0)
                sum += i;
        }
        System.out.println(sum == num);
    }
}

计算并输出一个整数各位数字之和,如,5423的各位数字之和5+4+2+3。

import java.util.*;
public class Exercise {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = in.nextInt();
        int sum = 0;
        while (num != 0) {
            sum += num % 10;
            num /= 10;
        }
        System.out.println(sum);
    }
}

第5章 数组与字符串

写Java应用程序,比较命令行中给出的两个字符串是否相等,并输出比较的结果。

public class Exercise {
    public static void main(String[] args) {
       System.out.println(args[0].equals(args[1]));
    }
}

从键盘上输入一个字符串和子串开始的位置与长度,截取该字符串的子串并输出。

import java.util.*;
public class Exercise {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.next();
        int start = in.nextInt(), len = in.nextInt();
        System.out.println(s.substring(start, start + len));
    }
}

从键盘上输入一个字符串和一个字符,从该字符串中删除指定的字符。

import java.util.*;
public class Exercise {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.next();
        char c = in.next().charAt(0);
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) != c)
                System.out.print(s.charAt(i));
        }
    }
}

第6章 类与对象

成员变量和局部变量的区别有哪些?

由类和方法的定义可知,在类和方法中均可定义属于自己的变量。类中定义的变量是成员变量,而方法中定义的变量是局部变量。

  1. 从语法形式上看,成员变量是属于类的,而局部变量是在方法中定义的或是方法的参数;成员变量可以被 public、private、static 等修饰符所修饰,而局部变量则不能被访问控制符及 static 所修饰;成员变量和局部变量都可以被 final 修饰。
  2. 从变量在内存中的存储方式上看,成员变量是对象的一部分,而对象是存在与堆内存中的,而局部变量是存在与栈内存中的。
  3. 从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而产生,随着方法调用的结束而自动消失。
  4. 成员变量如果没有被赋初值,则会自动以类型的默认值赋值(有一种情况例外,被 final 修饰但没有被 static 修饰的成员变量必须显式的赋值);而局部变量则不会自动赋值,必须显式地赋值后才能使用。

创建一个对象用什么运算符,对象的实体与对象的引用有什么不同?

创建一个对象使用 new 运算符;对象实体是实在存在于堆内存中的,而对象的引用是管理对象实体的句柄存在于栈内存中。

在成员变量或成员方法前加上关键字this表示什么含义?

this.成员名 表示 对象本身的成员。this 代表调用此成员的对象。

定义一个Student类包含如下内容:

  • 成员变量:学号,姓名,性别,班干部否,数学,语文,外语。
  • 成员方法:输入,总分,平均分。

编程实现这个类,并调用相应的方法输入数据,计算总分和平均分。

import java.util.*;
public class Student {
  private String id;
  private String name;
  private String gender;
  private String isLeader;
  private int math;
  private int chinese;
  private int english;

  public void input() {
    Scanner in = new Scanner(System.in);
    id = in.next();
    name = in.next();
    gender = in.next();
    isLeader = in.next();
    math = in.nextInt();
    chinese = in.nextInt();
    english = in.nextInt();
    in.close();
  }

  public int total() {
    return math + chinese + english;
  }

  public double aver() {
    return total() / 3.0;
  }
}

第7章 Java语言类的特性

什么是方法的重载

重载是指在同一个类内具有相同名称的多个方法,这多个同名方法如果参数个数不同,位置不同或是数据类型不同,则这些同名的方法就具有不同的功能。方法的重载是实现“多态”的一种方法。

对象的相等与指向它们的引用相等,两者有什么不同?

对象的相等指的是对象的内容相等;指向它们的引用相等指的是引用变量指向的地址相同;== 操作符专门用来比较两个变量的值是否相等;equals 方法是用于比较两个独立对象的内容是否相同。

什么是静态初始化器?其作用是什么?静态初始化器由谁在何时执行?它与构造方法有何不同?

静态初始化器是由关键字 static 修饰的一对大括号“{}”括起来的语句组。它是用来完成初始化工作的;静态初始化器有 Java 虚拟机在类初始化的时候一次执行;静态初始化器与构造方法有以下几点不同:

  1. 构造方法是对每个新创建的对象初始化,而静态初始化器是对类自身进行初始化。
  2. 构造方法是在用 new 运算符创建新对象时由系统自动执行,而静态初始化器一般不能由程序来调用,它是在所属的类被加载入内存时由系统调用执行的。
  3. 用 new 运算符创建多少个新对象,构造方法就被调用多少次,但静态初始化器则在类被加载入内存时只执行一次,与创建多少个对象无关。
  4. 不同于构造方法,静态初始化器不是方法,因而没有方法名,返回值和参数。

第8章 继承,抽象类和接口

什么是抽象类与抽象方法,使用时应注意哪些问题?

抽象类是以修饰符 abstract 修饰的类,抽象方法是以 abstract 关键字开头的方法,此方法只声明返回值的数据类型、方法名称与所需要的参数,但没有方法体。需要注意的是:

  1. 由于抽象类是需要被继承的,所以 abstract 类不能用 final 来修饰。也就是说,一个类不能既是最终类,又是抽象类,即关键字 abstract 与 final 不能合用。
  2. abstract 不能与 private、static、final 或 native 并列修饰同一方法。

什么是接口,为什么要定义接口?

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能);

接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。

如何定义接口,接口与抽象类有哪些异同?

接口与抽象类有以下不同:

  1. 接口的数据成员都是静态的,并且必须初始化。
  2. 接口中的方法必须全部都声明为 abstract 的,也就是说,接口不能像抽象类一样拥有一般的方法,而必须全部是抽象方法。

接口定义的语法格式如下:

[public] interface 接口名称 [extends 父接口列表]
{
    [public] [static] [final] 数据类型 成员变量名 = 常量;
    [public] [abstract] 返回值的数据类型 方法名(参数表)}

第9章 异常处理

什么是抛出异常?系统定义的异常如何抛出?用户自定义的异常又如何抛出?

程序在运行过程中,如果发生了异常事件,则产生代表该异常的一个“异常对象”,并把它交给运行系统,再由运行系统寻找相应的代码来处理这一异常。生成异常对象并把它提交给运行系统的过程称为抛出异常;所有系统定义的运行时异常都可以由系统自动抛出;用户自定义的异常不能由系统自动抛出,因而必须借助于 throw 语句来定义何种情况算是产生了此种异常对应的错误,并应该抛出这个异常类的对象。

第10章 Java语言的输入输出与文件处理

InputStream,OutputStream,Reader和Writer四个类在功能上有何 异同?

InputStream 和 OutputStream 类通常是用来处理 “字节流” 即 “位流” 的,也就是二进制文件,而Reader 和 Writer 类则是用来处理 “字符流” 的, 也就是文本文件。InputStream、OutputStream、Reader 和 Writer 4 个类均是抽象类,所以不能直接使用这四个类,而是使用它们的子类来创建对象,再利用对象来处理读写操作。

第11章 多线程

Java程序实现多线程有那两个途径?

Java 语言中实现多线程的方法有两种:一种是继承 java.lang 包中的 Thread 类,另一种是用户在自己定义的类中实现 Runnable 接口。但不管采用哪种方法,都要用到 Java 语言类库中的 Thread 类以及相关的方法。

在什么情况下必须以类实现Runnable接口来创建线程?

如果类本身已经继承了某个父类,由于 Java 语言不允许类的多重继承,所以无法再继承 Thread 类,此时就必须以类实现 Runnable 接口来创建线程。Runnable 接口适合处理多线程访问同一资源的情况,并且可以避免由于 Java 语言的单继承性带来的局限。

第14章 事件处理

什么是事件?简述Java语言的委托事件模型。

所谓事件(Event),就是用户使用鼠标或键盘对窗口中的组件进行交互时所发生的事情。事件用于描述发生了什么事情,对这些事件作出响应的程序称为事件处理程序。在 Java 语言中对事件的处理,采用的是委托事件模型机制。 委托事件模型是将事件源(如命令按钮)和对事件做出的具体处理(利用监听者来对事件进行具体的处理)分离下来。一般情况下,组件(事件源)不处理自己的事件,而是将事件处理委托给外部的处理实体(监听者),这是事件处理模型就是事件的委托处理模型,即事件源将事件处理任务委托给监听者。总的来说,委托事件模型是有产生事件的对象(事件源)、事件对象以及事件监听者对象之间的关系所组成。而其中的 “事件监听者” 就是用来处理事件的对象,也就是说,监听者对象会等待事件的发生,并在事件发生时收到通知。事件源会在事件产生时,将关于该事件的信息封装在一个对象中,这就是 “事件对象”,并将该事件对象作为参数传递给事件监听者,监听者就可以根据该 “事件对象” 内的信息决定适当的处理方式,即调用相应的事件处理程序。

你可能感兴趣的:(Java编程,进阶之路,java,开发语言)