Java期末复习题之选择题理论综合

 点击返回标题->23年Java期末复习-CSDN博客

 


选择题考察内容为——

  1. 构造函数的描述,
  2. 在文件中写入字符而不是字节选用什么类,
  3. java源文件import, class定义以及package的顺序,
  4. 静态成员变量作用域,
  5. 非抽象子类的接口实现,
  6. 异常抛出处理,
  7. 创建新线程,
  8. 重写和重载的关系,
  9. 线程生命周期,
  10. final关键字理解,
  11. 包的理解,
  12. 对象多态性体现,
  13. Socket创建对象

 上面这一段是老师强调的选择题部分考题的范围,可以理解为“考纲最高指示”,本篇就对这个“考纲”进行重点内容的解读(而不是系统性地讲的事无巨细,否则不如去看其它博客了是吧,其中我认为重要的内容会黑色加粗、十分重要的会用红色加粗字体标注。但不代表没这样做的就不重要,毕竟作为精华提炼出来写在这里的都是重点了。)


1.构造函数的描述 

Java构造函数是一种特殊的方法,它用于在创建对象时初始化对象的成员变量。构造函数的定义方式与普通方法相似,但没有返回类型,并且与类名相同

以下是构造函数的描述规则和特点:

1. 构造函数的名称必须与所在类的名称完全相同


2. 构造函数没有返回值类型,包括void(void是空,空不是没有,空也是返回值类型!)。


3. 构造函数可以有参数,也可以没有参数(习惯称前者为无参构造,后者为有参构造)。当没有显示定义构造函数时,Java会提供一个默认的无参构造函数,如果显示定义了构造函数,那么默认的构造函数将不再自动生成


4. 如果一个类中有多个构造函数,在创建对象时根据传入的参数个数及类型来确定使用哪个构造函数进行初始化。(4其实是构造方法重载的现象)


5. 构造函数可以进行一些初始化操作,例如给成员变量赋初值、执行其他方法等。


6. 构造函数不能被直接调用,只能在创建对象时隐式地调用

7.在子类的构造函数中,可以用super关键字调用父类的构造函数,且必须写在子类构造函数的第一行

8.当子类继承父类时,如果子类的构造函数没有任何super调用的语句,那么会隐式存在一句"super()"代码去调用父类的无参构造函数。


9. 当子类继承父类时,如果父类中有一个带参数的构造函数,则需要在子类构造函数中使用super关键字来显式调用父类的构造函数,并将参数传递给父类。

总结:构造函数的作用是为对象的成员变量赋初始值,确保对象在创建时处于合理的状态。通过合理使用构造函数,可以提高程序的可读性和可维护性。

 


2.在文件中写入字符而不是字节选用什么类

写入字符采用String类型,String类是Java中的一个引用数据类型,用于表示文本字符串。使用String类可以将文本数据写入文件中,而不是字节数据。

以下是一个简单的示例代码,演示如何使用String类将文本写入文件中:

import java.io.FileWriter;
import java.io.IOException;

public class Main {
    public static void main(String[] args) {
        String text = "Hello, world!";
        try {
            FileWriter writer = new FileWriter("output.txt");
            writer.write(text);
            writer.close();
            System.out.println("Text written to file successfully.");
        } catch (IOException e) {
            System.err.println("Error writing to file: " + e.getMessage());
        }
    }
}

 


3.java源文件import, class定义以及package的顺序

在Java源文件中,通常按照以下顺序组织import语句、class定义和package语句:

  1. package语句:用于指定当前源文件所属的包,位于文件最顶部
  2. import语句:用于引入需要使用的其他类或包,如果有很多import语句导入的是同一个包下的不同类,则可以使用通配符*来引入整个包。
  3. class定义:紧随import语句之后,是类的定义部分。它包含了该源文件中要实现的类的具体代码。

代码示例:


4.静态成员变量作用域

Java静态成员变量的作用域是在Java中定义的,它意味着该变量可以在类的所有方法中访问,包括静态方法。

静态成员变量通常用于存储类级别的数据,例如共享的配置信息或常量值。它们可以被类的所有实例共享,并且不需要创建类的实例就可以访问它们。

静态成员变量在Java中具有以下特点:

  1. 它们属于类本身,而不是类的任何特定实例。
  2. 它们可以在类的任何方法中访问,包括静态方法
  3. 它们可以被多个对象共享,并且不会因为创建了类的实例而创建多个副本
  4. 它们的作用域限制在类中,不能在类的外部直接访问,但可以间接访问(类名.静态成员)。

下面示例展示了如何访问类内外的静态成员:

使用静态成员变量可以方便地共享数据,并且可以避免在多个对象之间传递参数。此外,静态成员变量还可以用于存储常量值,因为它们在编译时就被确定下来,不会在运行时改变。

需要注意的是,由于静态成员变量在类中存储,因此它们不能被修改为非静态成员变量。这意味着静态成员变量必须在类的整个生命周期内保持不变,并且在任何时候都不能被重新赋值。因此,使用静态成员变量时需要谨慎考虑其生命周期和可变性。


5.非抽象子类的接口实现

Java中,非抽象子类可以通过实现接口来实现接口的方法。具体步骤如下:

1. 定义一个接口(interface):在 Java 中,接口是一种约定,它定义了一组方法声明,而不提供方法的实现(也不允许存在方法体,就算只写了一对花括号也不行!)。

public interface MyInterface {
    void method1();
    void method2();
    //错误的写法:
    //void method3(){}
}

2. 创建一个非抽象子类(class)并实现接口:使用 `implements` 关键字,让该类实现接口中的方法。

public class MyClass implements MyInterface {
    @Override
    public void method1() {
        // 实现method1的代码逻辑
    }

    @Override
    public void method2() {
        // 实现method2的代码逻辑
    }
}

3. 在子类中实现接口方法:通过 `@Override` 注解来标记子类中对接口方法的实现,确保方法签名与接口中的方法一致。

4. 可以通过创建子类的实例对象,来调用接口中的方法。
 

MyClass myObject = new MyClass();
myObject.method1();
myObject.method2();

上述代码示例中的 `method1` 和 `method2` 都是抽象方法,需要根据具体需求在子类中进行实现。

接口常考细节(移步本篇学习->Java继承(extends)下-CSDN博客):

  1. 接口中无任何修饰符的变量默认是public static final修饰的,也就是说->接口中的变量默认是全局常量
  2. 接口中无任何修饰符的方法默认是public abstract修饰的,也就是说->接口中的方法默认是抽象方法
  3. public接口中的变量和方法默认是public权限的(测试发现也只能是public权限,否则怎么被继承和实现?),对于一般public类来说->变量和方法默认是default修饰的

6.异常抛出处理

笔者暂时能想到的是以下这些考点,如果你不放心可以移步去系统性的学习->

Java异常-CSDN博客

try..catch...finally语句

①在异常处理中,若try中的代码可能产生多种异常则可以对应多个catch语句,若catch中的参数类型有父类子类关系,此时应该将子类放在前面,父类放在后面。(子前父后

②在异常处理中,有try语句不一定要出现catch语句,也可以是try...finally的组合。

throw和throws关键字

声明异常的关键字是throws,抛出异常的关键字是throw。(常考的易混淆点)

异常类声明

Java语言中的所有异常类都是java.lang.Throwable的子类。


7.创建新线程

感觉全都很重要的笔者抓不到重点,建议直接看这篇->

多线程的实现方式-CSDN博客


8.重写和重载的关系

在英文上的区别:重写是override,重载是overload

重写:指的是在继承(extends)关系中子类对父类方法覆写的操作,或者实现(implements)关系中派生类对接口方法覆写的操作。

要求重写的方法与被重写的方法返回值类型和形参都不能改变即外壳不变,核心重写!

重载:指的是为避免实现多个具有相同功能、但细节大同小异的方法时,从而定义好几个不同名字的方法导致维护成本提高的情况出现,所采取的策略,即方法重载。

要求互相重载的方法拥有相同的返回值类型,但参数列表必须不同,其中参数列表是区分不同重载方法的核心


9.线程生命周期

欲系统性学习见本篇->线程的生命周期及其六种状态的转换 - 知乎 (zhihu.com)

线程的5大状态

  1. 新建状态(NEW):新创建一个线程对象。
  2. 就绪状态(RUNNABLE):线程对象创建后,调用该对象的start()方法。该状态的线程等待被线程调度选中,获取CPU的使用权。
  3. 运行状态(RUNNING):就绪状态(RUNNABLE)的线程获取CPU时间片开始执行程序代码。
  4. 阻塞状态(BLOCKED):阻塞状态是指线程因为某种原因让出了CPU使用权,直到线程再次进入就绪状态(RUNNABLE),等待再次获取CPU时间片进入运行状态。
  5. 死亡状态(DEAD):run方法正常退出而自认死亡或者异常终止run方法导致线程结束。

10.final关键字理解

final 关键字是什么?

final 在 Java 中是一个保留的关键字,可以声明成员变量方法等。一旦用final修饰某个引用,你将不能改变这个引用了,编译器会检查代码,比如你如果试图修改final变量的值的话,编译器会直接报编译错误。

final 变量:

final修饰的变量不可被重新赋值,因此final变量经常和 static 关键字一起使用,作为常量。

final int a = 10;
a = 20;//报错:无法将值赋给 final 变量 

final 方法:

final修饰的方法不允许在派生类中进一步被覆写。

final 类:

final修饰的类不允许被继承,final类的功能通常是比较完整的,所以用final修饰表明它不需要被派生类来完善。

final关键字的好处:

  • final 关键字提高了性能,JVM 和 Java 应用都会缓存 final 变量
  • final 变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销

11.包的理解

欲系统性学习见本篇->Java 包(package) | 菜鸟教程 (runoob.com)

为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

包的作用

  • 1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。

  • 2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。

  • 3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类。

import 关键字

为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。

在 Java 中,import 关键字用于导入其他类或包中定义的类型,以便在当前源文件中使用这些类型。

import 关键字用于引入其他包中的类、接口或静态成员,它允许你在代码中直接使用其他包中的类,而不需要完整地指定类的包名。

在 java 源文件中 import 语句必须位于 Java 源文件的头部,其语法格式为:

import package1[.package2…].(classname|*);

比如:

import java.util.ArrayList;

如果在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略。

可以使用import语句来引入一个特定的类,比如GUI中常用的JFrame类:

这样,你就可以在当前源文件中直接使用swing类的方法、变量或常量。

import javax.swing.JFrame;

也可以使用通配符 * 来引入整个包或包的子包,比如GUI中常用的swing包:

这样,你可以导入javax.swing包中的所有类,从而在当前源文件中使用该包中的任何类的方法、变量或常量。注意,使用通配符 * 导入整个包时,只会导入包中的类,而不会导入包中的子包

import javax.swing.*;

12.对象多态性体现

多态是指一个类可以表现出多种形态(继承父类或实现接口而引申出多个形态的派生类)。

这一块的考点主要是类的向上、向下转型的细节。这一部分建议要重点地、系统地看一下,见本篇->Java多态-CSDN博客

向上转型的对象——

  • 调用的变量是父类中的变量,且父类中必须有该变量,否则编译报错
  • 调用的方法是子类中的方法,且该方法一定是从父类中继承过来的(可重写)
  • 不能调用子类中独有的方法(这一点和上一点相互照应)!
  • 自编顺口溜(*^_^*)->"变量只用老子的,方法先看儿子的,儿子独有的不用"

向下转型必须先出现向上转型,所以一定先包含向上转型的语法格式:

  • 父类类型 上转型对象1 = new 子类类型A();//这一行先是向上转型
  • 子类类型A 下转型对象 = (子类类型A)上转型对象1;

注意点:

必须先向上转型,子类类型A 子类对象 = (子类类型A)new 父类类型();//这种写法是错误的,因为右边new出来的对象没有经过向上转型
第2句的括号(子类类型A)不可以省略

可以理解为把大范围数据类型赋值给小范围数据类型,如把int类型变量i赋值给short类型变量s,

即:

int i = 10;

short s = (short)i;//这个括号显式强转在Java中是不可省略的!

第2句的括号(子类类型A)必须和第一句的new 子类类型A对应,这很好理解->假如第一句是Dog类示例化的对象向上转型成Animal类,那么第二句也得是向下转型为Dog类而不是Cat类或Rabbit类(物种突变!?)


13.Socket创建对象

这个是Java网络编程的知识点,明确只会出现在选择题部分中,在讲到这部分时,曾暗示考题可能就出现在下面这部分,多的我就不说了。

Socket(String host, int port)
使用该构造方法在创建Socket对象时,会根据参数去连接在指定地址和端口上运行的服务器程序,其中参数host接收的是个字符串类型的IP地址。


Socket(lnetAddress address, int port)

该构造方法在使用上与第二个构造方法类似,参数address用于接收一个InetAddress类型的对象,该对象用于封装一个IP地址。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/268266.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实现打印一个数字金字塔。例如:输入5,图形如下图所示

1*12**123***1234**** 12345*****#include<stdio.h> void main() {int i,j,l,n,k;scanf("%d",&n);/**********Program**********//********** End **********/ } 当我们拿到这个题目的时候可以看见题目给了我们五个变量&#xff0c;其中n是我们输入的数…

Elasticsearch 写入优化探索:是什么影响了refresh 耗时?

1、问题背景&#xff1a; 数据写入后&#xff0c;refresh耗时过长&#xff0c;能达到1s-5s。 想通过测试&#xff0c;探索确认影响refresh的因素&#xff0c;比如&#xff1a;写入操作是新增还是更新&#xff0c;deleted文档占比是否有影响&#xff0c;是否有其他索引配置&…

一、网络ensp安装

一、网络ensp安装https://blog.csdn.net/G_GUi/article/details/135176493 文章目录 一、下载4个软件安装二、工具栏常用图标 一、下载4个软件安装 前面3个软件必须要安装&#xff0c;不然用不了ensp https://pan.baidu.com/s/1kV7cL–BEbgANwSrZJ5t1Q?pwdqqqq 二、工具栏常…

【XML】TinyXML 详解(一):介绍

【C】郭老二博文之&#xff1a;C目录 1、简介 优点&#xff1a; TinyXML 是一个简单、小型的 C XML 解析器&#xff0c;可以轻松集成到项目中。 TinyXML 解析 XML 文档&#xff0c;并根据该文档构建可读取、修改和保存的文档对象模型 (DOM) TinyXML 是在 ZLib 许可下发布的&a…

AI一键注释代码、阅读整个项目、转换编程语言。已开源!

获取github源码地址和国内url、key方式&#xff1a;在文章底部 大家好今天给大家介绍一款开源项目&#xff0c;这个项目是由渡码维护的&#xff0c;这个项目支持自己的大模型和使用openai两种方式&#xff0c;本文章介绍使用openai的方式&#xff01; 使用过程中发现两个问题…

Java 第16章 坦克大战1-2 思路整理

文章目录 1 绘制坦克坦克画板Panel画框Frame 2 让坦克动起来画板Panel 3 本章作业 1 绘制坦克 坦克 不同坦克有共同属性&#xff0c;可以先提取共同特征&#xff08;坐标位置&#xff09;作为父类&#xff0c;然后其他坦克类继承它。 画板Panel 有坦克在画板上显示&#xf…

四. 基于环视Camera的BEV感知算法-PETR

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比5. PETRv2总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基…

[MySQL binlog实战] 增量同步与数据搜索~从入门到精通

学习基础知识&#xff0c;并落实到实际场景&#xff08;增量同步数据搜索&#xff09; 对基础知识不感兴趣的&#xff0c;可以直接跳到应用场景 文章目录 binlog是什么简介产生方式文件格式statementrowmixed 怎么办开启 binlog查看 binlog其他查看相关命令运维查看 binlog设置…

mysql8.x版本_select语句源码跟踪

总结 源码基于8.0.34版本分析&#xff0c;函数执行流程含义大致如下&#xff1a; do_command 方法从连接中读取命令并执行&#xff0c;调用 dispatch_command 对命令进行分发。dispatch_command 调用 mysql_parse 对命令进行解析&#xff0c;如果遇到一条语句用 ; 分隔多条命…

猫头虎带您探索Go语言的魅力:GoLang程序员必备的第三方库大盘点 ‍ ‍

猫头虎带您探索Go语言的魅力&#xff1a;GoLang程序员必备的第三方库大盘点 ‍ &#x1f680;&#x1f431;‍&#x1f4bb; 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#x…

Netty Review - 深入探讨Netty的心跳检测机制:原理、实战、IdleStateHandler源码分析

文章目录 概述心跳检测Code模拟心跳超时正常情况 IdleStateHandler源码分析channelReadchannelActiveinitialize 概述 心跳检测 Netty 的心跳检测机制是一种用于保持网络连接活跃的机制&#xff0c;它通过定期发送和接收特定的消息&#xff08;心跳包&#xff09;来确保客户端…

Java复习二—CH3-Exception 、CH4-I/O

CH3 Java Exception (异常) 3.1 Exception&#xff08;异常&#xff09;和 Error&#xff08;错误&#xff09; 异常能被程序本身可以处理&#xff0c;错误是无法处理 大多数错误与代码编写者执行的操作无关&#xff0c;而表示代码运行时 JVM 出现的问题 异常发生的原因有很…

电子科大软件系统架构设计——软件建模详细设计

文章目录 软件建模详细设计概述软件建模详细设计目标软件建模详细设计原则开闭原则里氏 (Liskov) 替换原则依赖倒置原则接口分离原则单一职责原则最少知识原则&#xff08;迪米特法则&#xff09;高内聚原则松耦合原则可重用原则 软件建模详细设计内容 UML 软件静态结构视图建模…

现代控制理论-李雅普诺夫

现代控制理论-李雅普诺夫 单输入单输出系统&#xff08;BIBO&#xff09;的系统函数如下&#xff1a; 则&#xff0c;该系统的能控标准型&#xff08;能空性&#xff09;为&#xff1a; 能观性&#xff1a; 李雅普诺夫下的稳定性&#xff1a; 李雅普诺夫下的渐进稳定性&a…

Ubuntu20.04纯命令配置PCL(点云库)

Ubuntu20.04纯命令配置PCL&#xff08;点云库&#xff09; 最近在学习点云库&#xff08;PCL&#xff09;的使用&#xff0c;第一步就是在自己的电脑安装配置PCL。 首先&#xff0c;对于ubuntu 16.04以上版本&#xff0c;可以直接使用命令进行安装&#xff0c;新建好一个文件夹…

小程序radio单选框回显

话不多说&#xff0c;效果图如下&#xff1a; 具体代码如下&#xff1a; <radio-group name"radio" bindchange"getSex"><label><radio value"1" checked"{{xingbie1}}" />男</label><label><radio…

Python序列之元组

系列文章目录 Python序列之列表 Python序列之元组 系列文章目录前言一、元组是什么&#xff1f;二、元组操作1.元组的创建&#xff08;1&#xff09;通过()创建。小括号可以省略。&#xff08;2&#xff09;通过tuple()函数创建。&#xff08;3&#xff09;通过生成器推导式创…

HBase 集群搭建

文章目录 安装前准备兼容性官方网址 集群搭建搭建 Hadoop 集群搭建 Zookeeper 集群解压缩安装配置文件高可用配置分发 HBase 文件 服务的启停启动顺序停止顺序 验证进程查看 Web 端页面 安装前准备 兼容性 1&#xff09;与 Zookeeper 的兼容性问题&#xff0c;越新越好&#…

ubuntu docker 进入容器内使用ping 指令,提示bash: ping: command not found问题

解决方法 #更新软件列表 apt update #安装 ping 工具iputils-ping apt install -y iputils-ping #最后使用ping一下容器ping 172.18.0.3欢迎关注我的公众号“点滴分享技术猿”&#xff0c;原创技术文章第一时间推送。

WT2605C音频蓝牙语音芯片:单芯片实现蓝牙+MP3+BLE+电话本多功能应用

在当今的电子产品领域&#xff0c;多功能、高集成度成为了一种趋势。各种产品都需要具备多种功能&#xff0c;以满足用户多样化的需求。针对这一市场趋势&#xff0c;唯创知音推出了一款集成了蓝牙、MP3播放、BLE和电话本功能的音频蓝牙语音芯片——WT2605C&#xff0c;实现了单…