尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
爆肝一个月,Java 从入门到精通16 - 作用域
在Java中我们经常看到public、protected、private这些修饰符。在Java中这些修饰符可以用来限定访问作用域。public定义为public的class、interface可以被其他任何类访问package abc; public class Hello { public void hi() { } }上面的Hello是public因此可以被其他包的类访问package xyz; class Main { void foo() { // Main可以访问Hello Hello h new Hello(); } }定义为public的field、method可以被其他类访问前提是首先有访问class的权限package abc; public class Hello { public void hi() { } }上面的hi()方法是public可以被其他类调用前提是首先要能访问Hello类package xyz; class Main { void foo() { Hello h new Hello(); h.hi(); } }private定义为private的field、method无法被其他类访问package abc; public class Hello { // 不能被其他类调用: private void hi() { } public void hello() { this.hi(); } }实际上确切地说private访问权限被限定在class的内部而且与方法声明顺序无关。推荐把private方法放到后面因为public方法定义了类对外提供的功能阅读代码的时候应该先关注public方法package abc; public class Hello { public void hello() { this.hi(); } private void hi() { } }由于Java支持嵌套类如果一个类内部还定义了嵌套类那么嵌套类拥有访问private的权限// private public class Main { public static void main(String[] args) { Inner i new Inner(); i.hi(); } // private方法: private static void hello() { System.out.println(private hello!); } // 静态内部类: static class Inner { public void hi() { Main.hello(); } } }定义在一个class内部的class称为嵌套类nested classJava支持好几种嵌套类。protectedprotected作用于继承关系。定义为protected的字段和方法可以被子类访问以及子类的子类package abc; public class Hello { // protected方法: protected void hi() { } }上面的protected方法可以被继承的类访问package xyz; class Main extends Hello { void foo() { // 可以访问protected方法: hi(); } }package最后包作用域是指一个类允许访问同一个package的没有public、private修饰的class以及没有public、protected、private修饰的字段和方法。package abc; // package权限的类: class Hello { // package权限的方法: void hi() { } }只要在同一个包就可以访问package权限的class、field和methodpackage abc; class Main { void foo() { // 可以访问package权限的类: Hello h new Hello(); // 可以调用package权限的方法: h.hi(); } }注意包名必须完全一致包没有父子关系com.apache和com.apache.abc是不同的包。局部变量在方法内部定义的变量称为局部变量局部变量作用域从变量声明处开始到对应的块结束。方法参数也是局部变量。package abc; public class Hello { void hi(String name) { // 1 String s name.toLowerCase(); // 2 int len s.length(); // 3 if (len 10) { // 4 int p 10 - len; // 5 for (int i0; i10; i) { // 6 System.out.println(); // 7 } // 8 } // 9 } // 10 }我们观察上面的hi()方法代码方法参数name是局部变量它的作用域是整个方法即1 ~ 10变量s的作用域是定义处到方法结束即2 ~ 10变量len的作用域是定义处到方法结束即3 ~ 10变量p的作用域是定义处到if块结束即5 ~ 9变量i的作用域是for循环即6 ~ 8。使用局部变量时应该尽可能把局部变量的作用域缩小尽可能延后声明局部变量。finalJava还提供了一个final修饰符。final与访问权限不冲突它有很多作用。用final修饰class可以阻止被继承package abc; // 无法被继承: public final class Hello { private int n 0; protected void hi(int t) { long i t; } }用final修饰method可以阻止被子类覆写package abc; public class Hello { // 无法被覆写: protected final void hi() { } }用final修饰field可以阻止被重新赋值package abc; public class Hello { private final int n 0; protected void hi() { this.n 1; // error! } }用final修饰局部变量可以阻止被重新赋值package abc; public class Hello { protected void hi(final int t) { t 1; // error! } }最佳实践如果不确定是否需要public就不声明为public即尽可能少地暴露对外的字段和方法。把方法定义为package权限有助于测试因为测试类和被测试类只要位于同一个package测试代码就可以访问被测试类的package权限方法。一个.java文件只能包含一个public类但可以包含多个非public类。如果有public类文件名必须和public类的名字相同。喜欢这个系列的同学可以关注我爆肝一个月Python 从入门到精通
RELATED

相关推荐

深度学习21:PyTorch:激活函数(Sigmoid,Tanh,ReLU,Softmax)

深度学习21:PyTorch:激活函数(Sigmoid,Tanh,ReLU,Softmax)

目录标题一、Sigmoid函数二、Tanh函数三、ReLU函数四、Softmax函数一、Sigmoid函数 import torch import matplotlib.pyplot as pltx torch.linspace(-10, 10, steps1000, requires_gradTrue) y torch.sigmoid(x)# 画图 fig, ax plt.subplots(nrows1, ncols2, figsize(12, …

📅 2026/10/28 18:56:27
ARM TLB字段

ARM TLB字段

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/28 18:56:27
工作总结PPT模板怎么用?以西北工业大学为例的全流程指南

工作总结PPT模板怎么用?以西北工业大学为例的全流程指南

简介:一套面向西北工业大学师生及工作人员的PPT模板包,包含10套不同风格的工作总结报告通用模板,适用于学术汇报、项目复盘、日常工作总结等场景。模板内容围绕“基础扎实、工作踏实、作风朴实、开拓创新”四维框架组织,可帮助使用…

📅 2026/10/28 18:56:26
MORE NEWS

更多资讯

📰

绿色便携软件实战指南:轻量、安全、跨环境的生产力方案

1. 为什么“绿色便携”在今天依然值得认真对待你有没有过这样的经历:刚重装完系统,兴冲冲打开浏览器下载几个常用工具,结果安装包动辄上百MB,点下一步、同意协议、选安装路径、勾选“捆绑软件”——稍不注意,桌面就多出…

📰

网络安全靶场选型与实战搭建指南

1. 网络安全靶场到底是什么?别被“靶场”俩字骗了很多人第一次听到“网络安全靶场”,下意识联想到射击训练场——一排排人形靶、噼里啪啦的枪声、硝烟味。但网络安全靶场(Cyber Range)和这个完全没关系。它不是物理空间&#xff0…

📰

DuckDB与MySQL查询性能对比实测与分析

1. 为什么需要对比DuckDB与MySQL的查询性能在数据爆炸式增长的时代,我们经常需要处理GB甚至TB级别的数据集。作为开发者或数据分析师,选择正确的数据库引擎对工作效率有着决定性影响。最近我在处理一个包含3亿条记录的电商交易数据集时,就面临…

📰

IDEA中使用Claude Code提升Java开发效率

1. 为什么要在IDEA中使用Claude Code作为一名长期使用IntelliJ IDEA进行开发的程序员,我一直在寻找能够提升编码效率的AI辅助工具。Claude Code的出现彻底改变了我的工作流——它不像传统代码补全工具那样仅仅提供简单的语法建议,而是能够理解整个项目的…

📰

面向对象编程高级特性与设计模式实战

1. 面向对象编程高级特性解析面向对象编程(OOP)的高级特性是每个开发者进阶必须掌握的技能点。在实际项目开发中,我们经常会遇到需要设计复杂对象关系、处理特殊场景的情况。这时候基础的面相对象知识就显得不够用了,必须深入了解继承、多态、封装等高级…

📰

目标检测技术演进与全局感知的突破

1. 目标检测技术演进与「全局感知」的突破目标检测作为计算机视觉领域的核心任务,已经从早期的滑动窗口检测发展到如今的端到端深度学习时代。传统方法如R-CNN系列通过区域提议和分类两个阶段实现目标定位,而YOLO系列则开创了单阶段检测的先河。但无论是…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬