Java基础 -- 访问控制权限
一 包:库单元
假设我们存在两个类名相同的类,如果没有一定的措施对其进行区分,就会无法区别到底使用的是哪一个类。因此java引入了包来进行名字空间管理。
包(类库)包含有一组类,这些类在单一的名字空间之下被组织在了一起。例如在Java的标准发布中有一个工具库,它被组织在java.util名字空间之下。java.util中有一个叫做ArrayList的类,使用ArrayList的一种方式是用其全名java.util.ArrayList来指定。
1 2 3 4 5 6 | public class FullQulification { public static void main(String[] args) { java.util.ArrayList list = new java.util.ArrayList(); System.out.println( "测试!" ); } } |
这样就会使的程序语句变长了,为此java中引入了import关键字进行了简化。
1 2 3 4 5 6 7 | import java.util.ArrayList; public class FullQulification { public static void main(String[] args) { ArrayList list = new ArrayList(); System.out.println( "测试!" ); } } |
假设我们自己也定义一个ArrayList类,为了和系统的ArrayList类区别开来,我们可以创建一个access.mypackage包,然后在该包下创建一个ArrayList类:
1 2 3 4 5 6 7 8 9 | package access.mypackage; public class ArrayList { public String toString() { return "ArrayList [getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super .toString() + "]" ; } } |
如果想使用自己定义的ArrayList类,只需要import access.mypackage.ArrayList即可。
1 2 3 4 5 6 7 | import access.mypackage.ArrayList; public class FullQulification { public static void main(String[] args) { ArrayList list = new ArrayList(); System.out.println( "测试!" +list.toString()); } } |
实际上java包的管理就是文件的管理,包access.mypackage对应的文件路径access/mypackage/。
.如果想引入别人写好的包,可以直接添加在当前项目src目录下,或者添加在环境变量CLASSPATH中指定的目录下。
二 Java访问权限修饰符
访问控制权限,从最大权限到最小权限依次为:public、protected、包访问权限(没有关键字)、private。在编写类库时,尽可能将一切方法都定为private,如果没有指定任意的访问权限,则意味着它是"包访问权限"。
1、包访问权限
如果一个类中的成员没有指定访问权限修饰符,则默认是包访问权限,即当前类所属的包中的所有其它类对该成员都有访问权限,但是包之外的所有类,这个成员却是private。
包访问权限允许将包内所有相关的类组合起来,以使它们彼此之间可以轻松的相互作用。
2、public
使用public修饰的成员表示这个成员对每个类都是可用的。
创建一个access.dessert的包,在该包下创建一个Cookie类:
1 2 3 4 5 6 7 8 9 10 11 | package access.dessert; public class Cookie { public Cookie() { System.out.println( "Cookie constructor!" ); } //默认包访问权限 void bite() { System.out.println( "bite!" ); } } |
在默认包下面创建一个使用Cookie类的程序:
import access.dessert.*; public class Dinner { public static void main(String[] args) { Cookie x = new Cookie(); //x.bite(); //无法访问,因为bit只向在access.dessert包中的类提供访问权限 } }
可以看到在默认包之中,无法访问bite()函数。
3、private
除了包含该成员的类之外,其他任何类都无法访问这个成员。
亲爱的读者和支持者们,自动博客加入了打赏功能,陆陆续续收到了各位老铁的打赏。在此,我想由衷地感谢每一位对我们博客的支持和打赏。你们的慷慨与支持,是我们前行的动力与源泉。
日期 | 姓名 | 金额 |
---|---|---|
2023-09-06 | *源 | 19 |
2023-09-11 | *朝科 | 88 |
2023-09-21 | *号 | 5 |
2023-09-16 | *真 | 60 |
2023-10-26 | *通 | 9.9 |
2023-11-04 | *慎 | 0.66 |
2023-11-24 | *恩 | 0.01 |
2023-12-30 | I*B | 1 |
2024-01-28 | *兴 | 20 |
2024-02-01 | QYing | 20 |
2024-02-11 | *督 | 6 |
2024-02-18 | 一*x | 1 |
2024-02-20 | c*l | 18.88 |
2024-01-01 | *I | 5 |
2024-04-08 | *程 | 150 |
2024-04-18 | *超 | 20 |
2024-04-26 | .*V | 30 |
2024-05-08 | D*W | 5 |
2024-05-29 | *辉 | 20 |
2024-05-30 | *雄 | 10 |
2024-06-08 | *: | 10 |
2024-06-23 | 小狮子 | 666 |
2024-06-28 | *s | 6.66 |
2024-06-29 | *炼 | 1 |
2024-06-30 | *! | 1 |
2024-07-08 | *方 | 20 |
2024-07-18 | A*1 | 6.66 |
2024-07-31 | *北 | 12 |
2024-08-13 | *基 | 1 |
2024-08-23 | n*s | 2 |
2024-09-02 | *源 | 50 |
2024-09-04 | *J | 2 |
2024-09-06 | *强 | 8.8 |
2024-09-09 | *波 | 1 |
2024-09-10 | *口 | 1 |
2024-09-10 | *波 | 1 |
2024-09-12 | *波 | 10 |
2024-09-18 | *明 | 1.68 |
2024-09-26 | B*h | 10 |
2024-09-30 | 岁 | 10 |
2024-10-02 | M*i | 1 |
2024-10-14 | *朋 | 10 |
2024-10-22 | *海 | 10 |
2024-10-23 | *南 | 10 |
2024-10-26 | *节 | 6.66 |
2024-10-27 | *o | 5 |
2024-10-28 | W*F | 6.66 |
2024-10-29 | R*n | 6.66 |
2024-11-02 | *球 | 6 |
2024-11-021 | *鑫 | 6.66 |
2024-11-25 | *沙 | 5 |
2024-11-29 | C*n | 2.88 |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了