Java的包访问权限(friendly)

本文深入探讨了Java性能优化的七个核心策略,包括避免创建多余对象、静态方法性能提升、直接访问字段、常量定义、增强循环、包访问权限使用及合理利用浮点数。通过这些实践,显著提高应用性能。

Java 性能优化

1、避免创建不必要的对象;

2、如果方法用不到成员变量,可以把方法声明为static,性能提升15%-20%;

3、避免使用getters/setters存取Field,可以把Field声明为public,直接访问;

4、static的变量如果不需要修改,应使用static final修饰符定义为常量;

5、使用增强For循环for(:);

6、私有内部类访问外部类的Field或方法,可以把外部类的Field或方法声明为包访问权限(即不加任何关键字)

7、合理利用浮点数,浮点数比整形慢两倍。


Java默认访问权限没有任何关键字,但通常是指包访问权限(有时也表示成为friendly)。

这就意味着当前的包中的所有其他类对那个成员都有访问权限,但对于这个包之外的所有类,这个成员却是private。

由于一个编译单元(即一个文件),只能隶属于一个包,所以经由包访问权限,处于同一个编译单元中的所有类彼此之间都是自动可访问的


Java中包访问权限允许将包内所有相关的类组合起来,以使它们彼此之间可以轻松地相互作用。

当把类组织起来放进一个包内之时,也就给它们的包访问权限的成员赋予了相互访问的权限,您“拥有”了该包内的程序代码。“只有您拥有的程序代码才可以访问您所拥有的其他程序代码”,这是合理的。

应该说,包访问权限为把类群聚在一个包中的做法提供了意义和理由。在许多语言中,在文件内组织定义的方式是任意的,但在Java中,则要强制您以一种合理的方式对它们加以组织。

另外,您可能还想要排除这样的类 — 它们不应该访问在当前包中所定义的类。


类控制着哪些代码有权访问自己的成员。其他包内的类不能刚一上来就说:“嗨,我们是会员。”并且还想看到protected,包访问权限和private成员。取得对某成员的访问权的唯一途径是:


1、使该成员成为public。于是,无论是谁,无论在哪里,都可以访问该成员。


2、通过不加访问权限修饰词井将其他类放置于同一个包内的方式给成员赋予包访问权。于是包内的其他类也就可以访问该成员了。


3、在继承技术中您会看到继承而来的类既可以访问public成员也可以访问protected成员(但访问private成员却不行)。只有在两个类都处于同一个包内时,它才可以访问包访问权限的成员但现在不必担心继承和protected。


5、提供访问器(accessor)和变异器(mutator)方法(也称作get/set方法),以读取和改变数值。对OOP而言,这是最优雅的方式,而且这也是JavaBeans的基本原理。

### Java 访问修饰符概述 Java 提供了四种访问修饰符用于控制程序结构的可见性和可访问范围:`public`, `private`, `protected` 和 `default`。这些修饰符适用于类、变量、方法和构造函数。 #### Public 访问修饰符 `public` 是最宽松的访问级别,表示被声明为 public 的成员可以在任何地方被访问[^1]。这意味着不仅同一内的其他类可以访问它,不同下的类也能自由调用或修改带有此修饰符的内容。 ```java // 定义了一个公共类 public class MyClass { // 公共字段 public String myField; // 构造器也设为了公开 public MyClass() {} } ``` #### Private 访问修饰符 相反地,`private` 则是最严格的限定方式之一,仅限于定义它的那个类内部使用[^2]。即使是继承自该父类的子类也无法触及到这部分私有化的组件;同样道理,在同一个项目里即便处于相同目录下别的文件里的实体也不能越界操作此类中的私密部分。 ```java class MyPrivateClass { // 私有字段 private int secretNumber; // 只能在本类内使用的私有方法 private void setSecret(int value) { this.secretNumber = value; } } ``` #### Protected 访问修饰符 对于标记成 `protected` 的元素来说,除了创建它们的那个具体类别之外,还允许其所有的直系后代(即直接派生出来的子类),无论是在哪个软件里面都能够正常获取并运用这些受保护的数据项或是行为逻辑[^3]。此外,默认情况下同内的其它非父子关系类型的对象也是有权接触这类资源的。 ```java class Parent { // 被保护的字段 protected double salary = 4000.0; } class Child extends Parent { // 子类可以直接访问salary这个受保护的成员变量 public void displaySalary() { System.out.println("My Salary is " + salary); } } ``` #### Default (无修饰符) 当某个成分既没有特别指明上述三种权限等级时,则认为它是具有默认级别的——也就是所谓的 package-private 或者说 friendly 类型[^4]。这种设定意味着只有位于同一套件之内的伙伴们才享有读写权利;而一旦跨越边界到了外部世界就完全丧失了这样的许可权能了。 ```java // 假定这是一个名为 'com.example' 的的一部分 class PackageLevelAccessExample { // 默认访问级别的字段 String name = "Package Level"; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值