Java必须掌握的static-静态方法和工具类(含面试大厂题和源码)

在Java中,static 关键字可以用来声明静态方法和静态变量。静态方法属于类,而不是类的任何特定对象实例。这意味着你可以在没有创建类的实例的情况下调用静态方法。静态方法通常用于工具类,这些工具类包含了一组有用的方法,它们可以在不创建类实例的情况下执行。

静态方法

  • 使用场景:当一个方法不依赖于对象的状态,即它不需要访问非静态字段或方法时,应该将其声明为静态方法。
  • 优点:提高了代码的组织性和可重用性,因为你可以直接通过类名调用它们。
  • 限制:静态方法不能访问类的实例变量和实例方法,因为它们属于类,而不是类的某个特定实例。

工具类

  • 定义:通常是包含一组静态方法的类,用于提供常用功能,如数学计算、字符串处理等。
  • 特点:这些类的设计意图不是为了实例化,而是作为一个静态成员的集合。
  • 实现:为了防止工具类被实例化,通常会将构造函数私有化。

示例面试题

  1. 解释Java中的静态方法和静态变量,并给出使用它们的一个示例。

  2. 为什么我们会将工具类的构造器设置为私有的?

  3. Java中静态方法可以被重载或重写吗?请举例说明。

  4. 在Java中如何正确地实现一个单例模式?请给出代码示例。

  5. 解释静态初始化块(static initialization block)是什么,以及它与构造器相比有何优缺点?

  6. 考虑以下代码段,解释为什么我们不能从静态方法内部访问非静态变量或方法。

public class UtilityClass {private static int staticVar = 10;private int instanceVar = 20;public static void staticMethod() {System.out.println(staticVar);// 下面的行会编译错误:// System.out.println(instanceVar);}
}
  1. 如何在Java中创建一个不可变的类,并解释为什么所有的字段都应该是私有的和最终的(final)?请给出代码示例。

解答示例

  1. 静态方法和变量属于类,可以在没有类的实例的情况下调用。例如,Math.sqrt(double a) 是一个静态方法,因为它可以通过类名直接调用,如 Math.sqrt(4.0)

  2. 将工具类的构造器设置为私有的可以防止外部代码实例化这个类,因为工具类通常只包含静态方法和静态变量。

  3. 静态方法可以被重载,但不能被重写。因为静态方法是属于类的,而不是实例的。重载示例:可以在同一个类中定义多个名称相同但参数不同的静态方法。

  4. 单例模式确保了一个类只有一个实例,并提供了一个全局访问点。实现方式通常涉及将构造函数设为私有,以防止外部通过 new 关键字创建实例,同时提供一个静态方法返回唯一实例。

public class Singleton {private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}
  1. 静态初始化块在类首次加载到JVM时执行,用于初始化静态变量。与构造器不同,它不依赖于类的实例化。优点是可以在类加载时就完成初始化,缺点是没有针对实例的灵活性。

这些问题和解答示例可以帮助你准备面试中可能遇到的关于静态方法和工具类的问题。在面试中,理解这些概念的底层原理同样重要。
在准备Java面试时,对于static关键字及其在工具类中的应用是非常重要的。这里有三个常见的面试题目,这些题目不仅考察你对static关键字的理解,还涉及到其在实际开发中的应用场景。

面试题1: 静态方法和非静态方法的区别及使用场景

问题描述:
请解释静态方法(static方法)与非静态方法的主要区别,并给出各自的使用场景。

参考答案:
静态方法是属于类的,而非静态方法属于类的实例。静态方法可以通过类名直接调用,而非静态方法需要通过类的实例来调用。静态方法不能访问类的非静态成员变量和非静态方法,因为它们需要依赖具体的实例。非静态方法可以访问类的静态成员变量和静态方法。

  • 静态方法使用场景:

    • 当方法不需要访问对象状态,即方法所需信息通过参数传递,或者方法只影响静态变量时。
    • 工具类方法,如数学计算函数、文件操作方法等,这些方法不依赖于对象的状态。
  • 非静态方法使用场景:

    • 当方法操作的数据是对象实例的状态时。
    • 需要访问或修改对象的非静态字段时。

面试题2: 静态变量和实例变量的区别及其在工具类中的应用

问题描述:
请解释静态变量(static变量)和实例变量的区别,并说明为什么在设计工具类时,我们通常不使用实例变量。

参考答案:
静态变量是类的所有实例共享的变量,而实例变量是属于类的每个具体实例的。因此,静态变量在内存中只有一个副本,而每个实例都有自己的实例变量副本。

在设计工具类时,我们通常不使用实例变量,因为工具类通常包含的是一些静态方法,用来提供通用功能,而不是用来表示对象的状态。使用静态变量可以避免创建类的实例就能访问这些变量,从而节省资源。

面试题3: 单例模式与静态类的对比

问题描述:
比较单例模式和使用静态方法的类(工具类)在设计上的不同及各自的优势。

参考答案:
单例模式通过确保类在JVM中只有一个实例来限制类的实例化,并且可以延迟其初始化,即懒加载。这对于资源密集型对象特别有用,比如数据库连接或文件系统的访问点。

静态类(或含静态方法的工具类)不需要实例化即可使用,便于访问共享的方法。它们主要用于提供一组相关的静态方法,如辅助函数、数学计算等。

  • 单例模式的优势:

    • 对于需要大量配置和初始化的类,单例可以减少对象创建的开销。
    • 可以通过延迟加载资源来提高应用的启动速度。
    • 控制实例的数量,节省系统资源。
  • 静态类的优势:

    • 使用简单,不需要创建对象实例即可调用。
    • 适合组织工具方法,提高代码的复用性。

每种设计都有其适用场景,选择哪一种取决于你的具体需求和上下文环境。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传感器为智能化基础,L3车规落地打开激光雷达新空间(下)

3 L3车规落地打开激光雷达新空间,未来进一步迭代降本 3.1 技术落地,智能驾驶迈入L3关键节点 L3是区分辅助驾驶与智能驾驶的关键节点,L0-L2“人为主、车为辅”,L3之后“车为主、人为辅”。随着技术持续升级,智能驾驶…

洛谷 P2249 【深基13.例1】查找

思路:这是最典型和基础的二分查找题,因为符合单调性和有界性,如果直接暴力查找的话,会超时,只需要用一下二分即可 左边界为:0(因为编号最小为1) 右边界为:n1&#xff0…

spark基础内容总结

spark是master-worker结构的,master负责资源调度,类似RM,worker掌握所在节点的信息,类似于NM。 执行时候物理结构分为driver-executor, driver负责执行mian方法,将程序转为job;负责在executor之…

LeetCode # 206. 反转链表

206. 反转链表 题目 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 示例 1: 输入:head [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head [1,2] 输出:[2,1] 示例…

Java SpringBoot 获取 yml properties 自定义配置信息

Java SpringBoot 获取 yml properties 自定义配置信息 application.yml server:port: 9090servlet:context-path: /app第一种方法 HelloController package com.zhong.demo01.controller;import org.springframework.beans.factory.annotation.Value; import org.springfram…

qt5与qt6的cmake区别

文章目录 使用cmake构建qt项目,坑很多。一是本身就麻烦,二是,确实坑,因为不同的qtcreator版本,选了不同的kits(套件) 生成的CMakeList.txt文件也不一样。 如果可以的话都选择Qt6的相关选项&…

人工智能到深度学习:药物发现的机器智能方法(综述学习)

Artificial intelligence to deep learning: machine intelligence approach for drug discovery - PubMed (nih.gov) 人工神经网络、深度神经网络、支持向量机、分类和回归、生成对抗网络、符号学习和元学习是应用于药物设计和发现过程的算法的例子。人工智能已应用于药物设计…

【Spring】回顾反射机制

一、分析方法四要素 package org.qiu.reflect;/*** author 秋玄* version 1.0* email qiu_2022aliyun.com* project Spring* package org.qiu.reflect* date 2022-11-11-17:26* since 1.0*/ public class SomeService {public void doSome(){System.out.println("public …

森林监测VR虚拟情景再现系统更便利

AI人工智能技术已经逐渐渗透到各个领域,为我们的生活带来了诸多便利。在虚拟仿真教学领域,AI技术的应用也日益丰富,为虚拟情景交互体验带来了前所未有的好处。 提高VR虚拟情景的逼真度 通过深度学习和计算机视觉等技术,AI/VR虚拟现…

Vue3 + xterm + eventSource

xterm 是一个使用 typescript 编写的前端终端组件&#xff0c;可以在浏览器中实现一个命令行终端应用&#xff0c;通常与 websocket一起使用。 一、安装 pnpm install xterm or yarn add xterm or pnpm install xterm二、代码实现: 实现日志展示 <template><a-modal…

从 0 到 1 搭建亿级商品 ES 搜索引擎

建设并维护一个亿级的搜索引擎并非易事&#xff0c;也不存在一劳永逸的最优治理方法。本文是在实践中不断学习和总结的成果&#xff0c;介绍了如何搭建一个可支持从千万级到亿级商品量级的搜索系统&#xff0c;并实现查询总 QPS 从百级增长到千级&#xff0c;写入总 QPS 从百级…

jvm中的cms垃圾回收器和G1垃圾回收器有什么区别

JVM&#xff08;Java虚拟机&#xff09;中的CMS&#xff08;Concurrent Mark-Sweep&#xff09;垃圾回收器和G1&#xff08;Garbage-First&#xff09;垃圾回收器是两种不同的垃圾回收器&#xff0c;它们在处理内存管理和垃圾回收时有一些区别。 工作原理&#xff1a; CMS&…

androidapp的开发流程,王者笔记

昨天去面了一家公司&#xff0c;价值观有受到冲击。 面试官技术方面没的说&#xff0c;他可能是个完美主义的人&#xff0c;无论什么事情到了他那里好像都有解决的方案&#xff0c;我被说的无所适从&#xff0c;感觉他很厉害。 但我不能认可的是&#xff0c;面试官觉得加班是…

nextjs13如何进行服务端渲染?

目录 一、创建一个新项目 二、动态获取后端数据进行服务端渲染出现的问题 三、nextjs13如何进行服务端渲染 nextjs13是nextjs的一个重大升级&#xff0c;一些原本在next12当中使用的API在nextjs13上使用十分不便。本文将着重介绍在nextjs13及以上版本当中进行服务端渲染的方…

Linux - 基本指令

1、ls 指令 语法&#xff1a;ls [选项][目录或文件] 功能&#xff1a;对于目录&#xff0c;该命令列出该目录下的所有子目录与文件。对于文件&#xff0c;将列出文件名以及其他信息。 常用选项&#xff1a; -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件-l …

Docker本地部署GPT聊天机器人并实现公网远程访问

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址9. 结语 前言 随着ChatGPT 和open Sora 的热度剧增,大语言模型时代,开启了AI新篇章,大语言模型的应用非常广泛&…

最新消息【沃尔玛不再接受“完全通知”审核报告】

沃尔玛&#xff08;Walmart&#xff09;于2024年2月12日发布公告&#xff0c;自2024年8月1日起&#xff0c;沃尔玛道德采购将不再接受“完全通知&#xff08;Fully Announced&#xff09;”的审核报告&#xff0c;仅接受突击&#xff08;unannounced&#xff09;审核报告或半通…

Linux Shell脚本练习(一)

一、 Linux下执行Shell脚本的方式&#xff1a; 1、用shell程序执行脚本&#xff1a; a、根据你的shell脚本的类型&#xff0c;选择shell程序&#xff0c;常用的有sh&#xff0c;bash&#xff0c;tcsh等 b、程序的第一行#!/bin/bash里面指明了shell类型的&#xff0c;比如#!/…

Matlab: Introduction to Hybrid Beamforming

文章目录 来源混合波束赋形的基本概念System Setup关键函数 来源 在matlab的命令行输入 doc hybrid beamforming 混合波束赋形的基本概念 混合波束形成简介 本例介绍了混合波束形成的基本概念&#xff0c;并说明了如何模拟这种系统。 现代无线通信系统使用空间复用来提高散…

讲述微信小程序 sitemap.json 索引作用配置

做过pc端国内网址的朋友 对SEO这个词不会陌生 主要就是通过条件搜索网址 目前 我们小程序也有这样的功能提供 那么 因为我们百度seo优化的处理程度不同 被搜索出来的东西 会进行一个先后顺序的排序 那么 我们小程序的 sitemap.json 就是用来配置 我们小程序 是否允许被微信索…