Java必须掌握的权限修饰符和代码块(含知识点和源码)

在Java中,权限修饰符(Access Modifiers)和代码块(Code Blocks)是两个基本但重要的概念,经常会在面试中被提及。理解这些概念对于编写安全和高效的代码至关重要。

Java权限修饰符

权限修饰符定义了Java类中成员(变量、方法)的访问权限。Java提供了四种访问级别:

  1. private:该修饰符的成员只能被其所在类访问。
  2. default(无修饰符):如果不指定修饰符(即默认),成员可以被同一个包内的类访问。
  3. protected:该修饰符的成员可以被同一个包内的类以及其他包中的该类的子类访问。
  4. public:成员可以被任何其他类访问。

访问权限从严格到宽松依次是:private < default < protected < public。

Java代码块

Java中的代码块用于组织代码,可以提高代码的可读性和执行效率。代码块主要有以下几种类型:

  1. 普通代码块:在方法或语句中使用,用于限定变量的生命周期,通常由大括号 {} 包围。
  2. 静态代码块(static block):使用 static 关键字,它在类加载时执行一次,常用于初始化静态变量。
  3. 实例初始化块(instance initializer block):在创建对象时执行,每次创建对象时都会执行,并且在构造函数之前执行。
  4. 同步代码块(synchronized block):用于多线程编程,保证该代码块内的操作对于同一时间只有一个线程可以执行。

示例

下面是一些使用权限修饰符和代码块的Java代码示例:

public class Test {private int privateVar = 1;int defaultVar = 2;protected int protectedVar = 3;public int publicVar = 4;// 静态代码块static {System.out.println("静态代码块执行。");}// 实例初始化块{System.out.println("实例初始化块执行。");}public Test() {System.out.println("构造函数执行。");}public void method() {// 普通代码块{int localVar = 5;System.out.println("普通代码块中的局部变量:" + localVar);}// 同步代码块synchronized (this) {System.out.println("同步代码块执行。");}}public static void main(String[] args) {Test test = new Test();test.method();}
}

在准备面试时,不仅要理解每种权限修饰符和代码块的基本概念和用法,还应该能够解释它们在实际编程中的应用场景和重要性。希望这些信息能帮助你在面试中表现出色!如果你有其他问题或需要更多的帮助,请随时告诉我。为了帮助你更好地准备Java面试,我会提供三个面试常见的题目,这些题目覆盖了基础算法、设计模式及并发编程等方面,每个题目都将包含问题描述和Java源代码解决方案。

题目1:反转链表

问题描述: 实现一个函数来反转一个单链表。

解决方案:

public class ListNode {int val;ListNode next;ListNode(int x) { val = x; }
}public class Solution {public ListNode reverseList(ListNode head) {ListNode prev = null;ListNode curr = head;while (curr != null) {ListNode nextTemp = curr.next;curr.next = prev;prev = curr;curr = nextTemp;}return prev;}
}

题目2:单例模式

问题描述: 实现一个线程安全的单例模式。

解决方案(双重校验锁):

public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

题目3:生产者-消费者问题

问题描述: 使用Java多线程编程实现生产者-消费者模式。

解决方案(使用Objectwait()notify()方法):

import java.util.LinkedList;
import java.util.Queue;public class ProducerConsumerExample {private static final int MAX_SIZE = 10;private final Queue<Integer> queue = new LinkedList<>();public void produce() throws InterruptedException {int value = 0;while (true) {synchronized (this) {while (queue.size() == MAX_SIZE) {wait();}System.out.println("Produced: " + value);queue.add(value++);notify();Thread.sleep(1000);}}}public void consume() throws InterruptedException {while (true) {synchronized (this) {while (queue.isEmpty()) {wait();}int value = queue.poll();System.out.println("Consumed: " + value);notify();Thread.sleep(1000);}}}public static void main(String[] args) {ProducerConsumerExample example = new ProducerConsumerExample();Thread producerThread = new Thread(() -> {try {example.produce();} catch (InterruptedException e) {e.printStackTrace();}});Thread consumerThread = new Thread(() -> {try {example.consume();} catch (InterruptedException e) {e.printStackTrace();}});producerThread.start();consumerThread.start();}
}

这些题目和解决方案覆盖了Java面试中的重要知识点,希望它们能帮助你在面试中展示你的编程能力和对Java核心概念的理解。练习这些题目之外,也不要忘记复习Java的基础知识,以及其他高级概念和最佳实践。祝你面试成功!如果你有任何问题或需要进一步的帮助,请随时联系我。

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

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

相关文章

学习JAVA的第十四天(基础)

目录 Collection集合 迭代器遍历 增强for遍历 Lambda表达式遍历 List集合 遍历 数据结构 栈 队列 数组 链表 前言&#xff1a; 学习JAVA的第十三天 Collection集合 Collection的遍历方式&#xff1a; 迭代器&#xff08;不依赖索引&#xff09;遍…

爱普生宣布开发出独特的宽幅度LVDS输出 —可灵活选择与LSI

爱普生宣布开发出独特的宽幅度LVDS输出 —可灵活选择与LSI -相匹配的低噪声输出 精工爱普生公司(TSE: 6724&#xff0c;“爱普生”)开发了一种新的晶体振荡器差分输出方案。新方案&#xff0c;宽幅低压差分信号(WA-LVDS)&#xff0c;可以灵活选择最适合LSI所需的幅值水平的输出…

单例九品--第二品

单例九品--第二品 第一品回顾写在前边代码部分实现方式评注与思考下一品设计的思考 第一品回顾 第一品传送门 第一品的实现方式完全没有阻止构建类的多个对象&#xff0c;在这一品中将会修复这种问题。 写在前边 基本思路 • 将构造、析构函数设置为私有成员 • 使用静态成员…

ES: ES+Kibana 环境部署

ESKibana 部署 机器信息 10.10.8.62 10.10.8.63 10.10.8.64版本选择&#xff1a;6.8.1 基础环境优化 所有节点 # 关闭防火墙 systemctl stop firewalld.service systemctl disable firewalld.service# 查看selinux getenforce # 关闭selinux setenforce 0 # 永久关闭se…

取证工作:如何解锁受密码保护的 SQL Server 数据库并重置密码?

Advanced SQL Password Recovery 是 Elcomsoft 取证工具包中的密码破解软件之一。该软件可以即时访问受密码保护的 SQL Server 数据库。更改以 Microsoft SQL Server 格式保护数据库的任何用户或管理密码。 即时重置密码以保护 Microsoft SQL Server 数据库任何语言和编码的密…

浅谈碳化硅MOSFET TO-247封装单管引入开尔文管脚必要性

相较于传统的硅MOSFET和硅IGBT 产品&#xff0c;基于宽禁带碳化硅材料设计的碳化硅 MOSFET 具有耐压高、导通电阻低&#xff0c;开关损耗小的特点&#xff0c;可降低器件损耗、减小产品尺寸&#xff0c;从而提升系统效率。而在实际应用中&#xff0c;我们发现&#xff1a;带辅助…

外包干了一个月,技术退步明显。。。

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 这次来聊一个大家可能也比较关心的问题&#xff0c;那就是就业城…

Sora的双重边缘:视频生成的革新与就业的再思考

随着科技的日新月异&#xff0c;人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;技术如潮水般涌入我们的日常生活&#xff0c;为各个领域带来了翻天覆地的变化。在这一浪潮中&#xff0c;Sora作为一款前沿的AI视频生成工具&#xff0c;凭借其高度逼真…

MindOpt优化器: 浅谈版本0.x和1.x之间API的差异

Mindopt 是一个优化求解器&#xff0c;如果它有两个主要版本——0.xx和1.x.x&#xff08;最新版本1.1.1&#xff09;&#xff0c;它们代表着软件开发的两个不同阶段。版本1.0.0表示软件的一个大的里程碑&#xff0c;代表着软件第一个正式的“成熟”发布版本&#xff0c;而0.25是…

MySQL--优化(索引--索引失效场景)

MySQL–优化&#xff08;索引–索引失效场景&#xff09; 定位慢查询SQL执行计划索引 存储引擎索引底层数据结构聚簇和非聚簇索引索引创建原则索引失效场景 SQL优化经验 常见的索引失效场景 1、场景准备&#xff1a; 给 tb_user 表创建联合索引&#xff0c;字段为&#xff1…

SSR和CSR

SSR&#xff1a;服务端渲染&#xff08;Server-Side Rendering&#xff09; 浏览器每次请求时&#xff0c;服务端都会生成页面完整的HTML响应&#xff0c;最后在浏览器将静态的HTML“激活”。 CSR&#xff1a;客户端渲染&#xff08;Client-Side Rendering&#xff09; 首次…

消息队列-Kafka-消费方如何分区与分区重平衡

消费分区 资料来源于网络 消费者订阅的入口&#xff1a;KafkaConsumer#subscribe 消费者消费的入口&#xff1a;KafkaConsumer#poll 处理流程&#xff1a; 对元数据重平衡处理&#xff1a;KafkaConsumer#updateAssignmentMetadataIfNeeded 协调器的拉取处理&#xff1a;onsum…

linux下改变主机名,永久生效的方法

hostnamectl set-hostname test 例子 #支持大写必须就要这样写 hostnamectl set-hostname 名称 --static

缩放算法优化步骤详解

添加链接描述 背景 假设数据存放在在unsigned char* m_pData 里面&#xff0c;宽和高分别是&#xff1a;m_nDataWidth m_nDataHeight 给定缩放比例&#xff1a;fXZoom fYZoom&#xff0c;返回缩放后的unsigned char* dataZoom 这里采用最简单的缩放算法即&#xff1a; 根据比…

每天一个数据分析题(一百九十五)

关于用户标签的分类&#xff0c;下列哪些说法是正确的&#xff1f; A. 属性标签主要包括用户的个人信息&#xff0c;如性别和出生日期&#xff0c;这些数据虽无因果关系&#xff0c;但可以用于预测用户行为。 B. 状态标签反映的是用户的社会经济状态和社会资本&#xff0c;如…

PostgreSQL教程(二十四):服务器管理(六)之数据库角色

PostgreSQL使用角色的概念管理数据库访问权限。一个角色可以被看成是一个数据库用户或者是一个数据库用户组&#xff0c;这取决于角色被怎样设置。角色可以拥有数据库对象&#xff08;例如&#xff0c;表和函数&#xff09;并且能够把那些对象上的权限赋予给其他角色来控制谁能…

代理IP以及动态拨号VPS的关系是什么?

在数字时代&#xff0c;网络安全和隐私保护已成为全球关注的热点话题。代理IP和动态拨号VPS作为提升网络匿名性和安全的重要技术&#xff0c;它们在维护网络隐私中扮演着至关重要的角色。虽然这两种技术在表面上看似相似&#xff0c;实际上它们在功能、应用场景以及用户需求满足…

react + antdesign table组件合并行,展开子表格

假如你有这样的一个数据&#xff1a; [{"bigClass":"吃的","smallClass":"水果","item":"苹果"},{"bigClass":"吃的","smallClass":"水果","item":"香蕉…

mutex 和 channel 哪一个工作效率更高?

关于Rust中mutex和channel哪一个工作效率更高的问题&#xff0c;实际上并没有一个绝对的答案&#xff0c;因为效率的高低取决于具体的使用场景和需求。 互斥锁&#xff08;mutex&#xff09;主要用于保护共享资源&#xff0c;确保一次只有一个线程可以访问它。当需要多个线程同…

这些养老难题,只能靠AI来解决了

3 月 5 日刚召开的两会&#xff0c;AI 这个话题妥妥站上了 C 位。不仅政府工作报告首次提出要开展“人工智能”行动&#xff0c;各路科技大佬和人大代表也是围绕着 AI 大模型的技术创新、应用落地和政策法规&#xff0c;展开了热烈积极的建言献策。甚至有互联网大佬建议将人工智…