包和访问控制


一、包

1.包的概述

包是类的容器,用于分割类名空间
包的作用:

  • 类似于操作系统树形文件夹的组织形式,能分门别类地存储、管理类,易于查找并使用类。
  • 解决了同名类的命名冲突问题。
  • 包允许在更广的范围内保护类、属性和方法。

package关键字用来指明源文件中的类属于哪个具体的包。
程序中如果有package语句,该语句一定是源文件中的第一条可执行语句,它的前面只能有注释或空行。 一个文件最多只能有一条package语句,即只能把一个类放在一个包中。

2.包的命名:

包的名字应该有层次关系,各层之间以.分隔。
命名规则:

  • 包名全部用小写字母
  • 一般使用翻转的internet域名。例如:com.abc.fly.tools。

3.JDK中的包

在这里插入图片描述
JDK类库中不同包的主要功能:

  • java.lang:lang 是 language 的简写,这个包提供 Java 语言的基础类,例如 String、Math、Integer、System 和 Thread 等。
  • java.lang:lang 是 language 的简写,这个包提供 Java 语言的基础类,例如 String、Math、Integer、System 和 Thread 等。
  • java.io:io 是 input 和 output 的合并简写,指输入和输出,组织了数据流、序列化和文件系统相关的类。
  • java.net:net 即网络,这个包组织了为实现网络应用程序而提供的类。
  • java.awt:抽象窗口工具集(Abstract Window Toolkit),包含用于创建用户界面和绘制图形图像的类。

4.导入包

improt 包名.类名
这里的包名、类名既可以是 JDK 提供的包和类的名称,也可以是用户自定义的包名和类名。
如果要使用一个包中的多个类,可以使用import 包名.*;包的导入只能导入当前目录中的类,而不能导入其子目录中的类。
import语句需要放在package语句后,在类定义之前。

二、访问控制

一个商业的 Java 应用系统有很多类,其中有些类并不希望被其他类使用,有些属性和方法需要对外界不可见或仅在有限的范围内可见。
Java 语言中的访问权限修饰符有 4 种,但却只有 3 个关键字。因为不写访问权限修饰符时,在 Java 中被称为默认权限(包权限),本文中以 default 代替。

1.对类的访问控制

对于类而言,能使用的访问权限修饰符只有public和default。
如果使用 public 修饰某个类,则表示该类在任何地方都能被访问,如果不写访问权限修饰符,则该类只能在本包中使用。

2.对类成员的访问控制

对于类的成员(属性和方法)而言,4种访问权限修饰符都可以使用。
按照权限从小到大:private<默认<protected<public。
私有权限private
private 可以修饰属性、构造方法、普通方法。被 private 修饰的类成员只能在定义它们的类中使用,在其他类中都不能访问。
之后介绍封装的时候,使用了private这个访问权限符。对于封装良好的程序而言,一般将属性私有化,提供公有的getter和setter方法,供其它类调用。
默认权限default
不写任何权限关键字就代表使用默认权限,属性、构造方法、普通方法都能使用默认权限。默认权限也称为同包权限。同包权限的元素只能在定义它们的类中以及同包的类中被调用。
受保护权限protected
protected 可修饰属性、构造方法、普通方法,能在定义它们的类中以及同包的类中调用被 protected 修饰的成员。如果有不同包中的类想调用它们,那么这个类必须是这些成员所属类的子类。
公共权限public
public 可以修饰属性、构造方法和普通方法。被 public 修饰的成员,可以在任何一个类中被调用,是权限最大的访问权限修饰符。
访问权限修饰符适用范围

三、static关键字

对象的成员变量有两种级别的使用范围:对象级别和类级别。

先通过类实例化一个对象,然后再通过对象名.变量名的形式访问。这种访问成员变量的形式,实际就是对象级别的访问形式。对象级别的成员变量只能在当前对象的范围内使用。
对象级别中的成员变量,在不同对象中是各自独立的。

但如果想让多个不同的对象共享同一个变量,就需要使用类级别的成员变量了。
用 static 修饰类的成员变量
在类成员的声明前,加上static关键字,就能创建出类级别的成员变量。
声明为static的变量称为静态变量或者类变量。可以直接通过类名.静态变量名,也可以通过实例名来引用静态变量,(推荐使用前者)

除了修饰变量以外,声明为static的方法称为静态方法或类方法,最常见的例子是main方法。和静态变量一样,静态方法也可以被类名直接引用。

用 static 修饰类的成员方法
用static修饰类的成员方法,表示该方法被绑定于类本身(即属于类级别的方法),而不是类的实例。
在这里插入图片描述
静态方法不能操作实例变量
静态方法可以操作静态变量,不能操作实例变量。
在这里插入图片描述

静态方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。

静态方法中不能使用this关键字,因为静态方法不属于任何一个实例。

四、Java静态块

在使用new关键字创建并初始化对象的过程中,具体的初始化分为以下4步:

  • 给对象的实例变量分配空间,默认初始化成员变量。
  • 成员变量声明时的初始化。
  • 初始化块初始化。
  • 构造方法初始化。
static{
	语句块
}

Java 类首次装入 JVM 时,会对静态成员或静态块进行一次初始化,注意此时还没有产生对象静态成员和静态块都是和类绑定的,会在类加载时就进行初始化操作。
当类加载完毕后,才能实例化出对象,并在对象产生的同时对实例成员进行初始化。因此,实例成员是和对象绑定的,会在实例化对象时一并进行初始化。

静态变量和静态块都是在类实例化对象前被执行的,而且只执行一次。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值