前言:
我们都知道面向对象程序有三大特性:封装、多态以及继承。由此可知封装的在Java中的江湖地位有多高。下面我们一起来学习一下封装的特性以及应用。
概念:
封装,就是对代码进行壳层屏蔽细节操作。
何为壳层屏蔽细节?其实就是把数据和操作数据的方法进行有机结合,将对象的属性和方法实现细节给隐藏起来,仅对外界公开接口进行交互。
封装的情况有:
1。开发者不希望别人直接对你写的代码进行改动,
2、开发者不希望你写的代码的核心部分外漏给别人看
3、开发者写的代码中有部分数据or操作数据的方法会被大量使用到,此时为了解耦合可以对部分代码进行封装。
访问限定符:
java中主要通过类和访问权限来实现封装:类可以将数据和封装数据的方法结合在一起,而访问权限则是控制封装数据的方法所在的类能否直接在类外使用。
那么要对类的数据进行封装以及给类追加访问权限,就要用到访问限定符。Java中提供了四种访问限定符。
以下是不同的访问限定符在不同的范围内所特有的访问权限:
private:封装的数据以及方法只能在同一个包内的同一个类内使用(只有自己知道)
default:封装的数据以及方法只要在同一个包内都可以被访问,在写类的方法以及成员时没有给定访问权限的时候默认用default进行封装。(什么都不写的时候默认为default)
protected:多用于继承 (后续单独写一篇讲继承)
public:访问权限最大的限定符(相当于公开的部分,所有人都能在代码中直接看到或直接访问的数据)
注意:一般情况下成员变量设置为private,成员方法设置为public
拓展:
一、包的概念:
一个包含多个类的集合
二、导入包中的类:
为了满足日常开发需求,Java为开发者提供了许多现成的方法以及类,这些工具都被封装、分类在不同的包中,我们想要使用这些工具就得在写代码时导入这些包。
例如:我们想要在控制台中进行输入,此时要调用一个Scanner类,此时我们可以直接在导入该类所在的包,就可以调用包内所有的API。
包的导入有两种方式:
1、直接用包名进行实例化或者包名.访问包内提供的API。(不太推荐这种用法)
public class demo1 {
public static void main(String[] args) {
java.util.Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
}
}
2、用import关键字在.java文件中导入要用的包,然后在使用时调用包中的类或者API
import java.util.Scanner;
public class demo1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
}
}
注意:我们在导入包的时候一般都建议显式说明导入的包名,避免不必要的冲突。
例如:
在这段代码中我们想获得一个d1的时间戳,此时导入了两个包(假设开发需求要两个包都要用到)
import java.util.*;
import java.sql.*;
public class demo1 {
public static void main(String[] args) {
Date d1 = new Date();
System.out.println(d1.getTime());
}
}
在程序运行时我们就会收到报错,这是因为java.util和java.sql中都存在Data这个类。
当我们在调用类的时候没有显式写出导入的包名且调用的类在不同的包同时存在时,编译器在编译的时候会分不清楚具体是调用哪个包的类。
三、自定义包
基本准则:
在.java文件的左上角加上一句package语句指明代码所在的包.
所创建的包名字要和包的路径一致.
如果一个类没有明确说明是被放在哪一个包,那么会被放到一个默认的包内.
操作步骤:
在IDEA中创建一个包:
点击package然后再弹窗中输入包名
然后在包中创建类即可
此时我们可以通过我们创建项目的路径可以看到以及有包生成
本次博客到此结束啦,请不要吝啬您的三连啦!!