Java学习笔记-Day14 Java包、访问控制符、final关键字和static关键字
一、Java的包
Java的包和文件夹一样,采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的。
1、包的作用
(1)把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。不同功能的类放在不同的包中(职责更加明确、单一),例如,entity(实体类)、dao(Data Acess Object 数据访问对象)。
(2)当同时调用两个不同包中相同类名的类时,应该加上包名加以区别,避免名字的冲突。
2、包的命名
根据Java包的约定,名字内的所有字母都应小写,用 . 来指明目录的层次。包结构会直接被反映成文件系统的文件夹结构。格式为:
例如,com.baidu.zhidao.dao 、com.baidu.tieba.service等。
3、包的声明
每个源文件只能有一个包声明,使用package语句进行包的声明,package语句必须作为Java源文件的第一条语句,指明该文件中定义的类所在的包。格式为:
若忽略该语句,则指定为无名包。
4、包的导入
为了能够使用其他包的成员,需要在 Java 程序中明确导入该包。使用 “import” 语句进行包的导入。其语法格式为:
import语句中类名部分可以使用通配符 * ,表示直接导入包中所有的类。
在 java 源文件中, import 语句应该位于 package 语句之后,所有类的定义之前。在 java 源文件中,可以没有import 语句,也可以有多条import 语句。
如果在一个包中,一个类想要使用本包中的另一个类,无需导入该包名。
包和子包之间不存在继承关系,只要两个类不直接在同一个文件中即认为位于不同的包,因此 * 号只能包含本包中的类而不能包含子包中的类。
快速导包的快捷键:ctrl + shift + o
注意:java.lang.* 包中包含了Java语言中的核心工具(lang为language),因此Java将其作为缺省加载的包存在,即使用该包中的类时无需import。
二、访问控制符
1、顶层类的访问级别
(1)public: 可以被任何代码访问。
(2)默认的(不提供访问控制符):仅可被同包的其他代码访问。
2、类成员的访问级别
(1)public:任何其它类对象都可以访问。
(2)protected:同一个类、同一个包、不同包的子类可以访问。
(3)default(无访问控制符修饰):同一个类、同一个包可以访问。
(4)private:只有在同一个类才可以访问。
注意:不能单纯以成员访问控制符确定一个成员是否能够访问,如果类本身不能被访问,那么即便成员为public公开权限,也是不能被访问的。
三、final关键字
在Java中,final关键字有最终的,不可修改的含义。
1、final变量
将某个变量修饰为final,那么该变量就成为常量,语法格式为:
常量在声明时必须初始化,声明之后不能对其进行二次赋值,其后任何试图对常量进行赋值的语句都将报错。
赋值方式:
① 定义并直接赋值。
② 定义时先不赋值,通过构造方法对常量进行赋值。
③ 定义时先不赋值,通过普通代码段对常量进行赋值。
2、final方法
用final修饰成员方法不能被子类方法重写。
3、final类
用final修饰类无法被继承。
Java中有一个最常用的final类:java.lang.String。
四、static关键字
用static关键字修饰的变量和方法,表明它们是属于类的,称为静态变量和静态方法。
静态变量和静态方法被类的所有的对象共享,能被类的所有的对象访问。
注意:null可以被转换成任意类型的对象,通过这样的方式可以执行对象的静态方法,但是如果方法不是静态方法的话,由于空对象没有被实例化(分配空间),虽然编译时不会报错,但是运行时会报空指针异常。
1、静态变量
使用static关键字修饰的成员变量,可以将其声明为静态成员变量。
静态变量属于类的,无论该类有多少个对象,静态变量也只会有一个。
静态成员变量的作用域只在类内部,但其生命周期却贯穿整个程序。(在程序结束时,才会释放内存)
静态变量的调用方式:
① 通过类名调用,格式: 类名.静态变量名
② 通过对象调用,格式: 对象.静态变量名
可以将static和final联合起来使用:当一个变量被static和final共同修饰时,其和仅用static修饰的变量的差异在于声明时必须初始化,而且在整个程序生命周期内不能再对这个变量进行二次赋值。
2、静态方法
使用static关键字修饰的成员方法,可以将其声明为静态成员方法。类中的静态方法可以被子类继承。
静态成员方法只能对方法自身的局部变量和类的静态成员变量进行操作。
静态成员方法没有this引用。
abstract和static不能同时修饰同一个方法,因为二者会产生矛盾。
静态成员方法的调用方式:
① 通过类名调用,格式: 类名.静态成员方法();
② 通过对象调用,格式: 对象.静态成员方法();
实例方法中可以直接访问静态成员变量,而static方法中不能直接访问非静态的成员变量。
实例方法(对象的成员方法)中可以直接调用static方法,而static方法中无法直接调用本类中声明的其他实例方法。如果需要调用,只能在方法体中构建本类的对象,然后利用该对象调用实例方法。
static方法可以直接调用本类中声明的其他static方法。
3、静态导入
JDK1.5中引入了静态导入机制,借助这一机制,可以用略掉所在的类或接口名的方式,来使用静态成员。
如 import static java.lang.Math.*; 表示导入Math类中所有的静态成员。
五、Thread.Sleep()的使用
Thread.sleep()是Thread类的一个静态方法,作用是使当前线程休眠,进入阻塞状态,即暂停执行。如果线程在睡眠状态中被中断,将会抛出InterruptedException 中断异常。在哪个线程里面调用Thread.sleep(),就阻塞哪个线程。