目录
一、概念
封装——简言之,套壳屏蔽细节。将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。
举例说明:一部电脑提供给用户的就只是开关机、通过键盘输入,显示器,USB插孔等,让用户来和计算机进行交互,完成日常事务。但实际上,电脑真正工作的却是CPU、显卡、内存等一些硬件元件。计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可。
二、访问限定符
java中实现封装的方式有两种:类和访问权限。
类可以将数据以及封装数据的方法结合在一起,而访问权限用来控制方法或者字段能否直接在类外使用。
下图是java提供的四种访问限定符以及用法。
注意:
1、default为默认权限
2、访问权限除了可以限定类中成员的可见性,也可以控制类的可见性
package test20210902;
public class Student {
String name;
public String gender;
private int age;
public Student(String name,String gender,int age){
this.name=name;
this.gender=gender;
this.age=age;
}
public void Class(){
System.out.println("go to class!");
}
}
package test20210902;
public class Teststudent {
public static void main(String[] args) {
Student sc=new Student("luka","man",21);
System.out.println(sc.name); //在Student中被default修饰(默认)
System.out.println(sc.gender); //在Student中被public修饰
System.out.println(sc.age); //在student中被private修饰,只能在student类中使用,编译失败
}
}
3、一般情况下成员变量设置为private,成员方法设置为public。
三、包
1、概念
为了更好的管理类,把多个类收集在一起成为一组,称为软件包。
比如:为了更好的管理电脑中的电影,把相同类别的电影放在一个文件下
在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式。在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。
2、导入包中的类
在java中为我们提供了很多现成的类,比如Date类,使用java.util.Date可以导入java.util这个包中的Date类。
public class Demo {
public static void main(String[] args) {
java.util.Date date=new java.util.Date();
System.out.println(date.getTime());
}
}
方便起见,也可以使用import语句导入包
import java.util.Date;//使用import语句导入包更加方便
public class Demo {
public static void main(String[] args) {
Date date=new Date();
System.out.println(date.getTime());
}
}
当用户想要使用java.util中的其它类时,可以使用import java.util.*语句
import java.util.*;
public class Demo {
public static void main(String[] args) {
Date date=new Date();
System.out.println(date.getTime());
System.out.println(date.toString());
}
}
但是很有可能发生冲突导致编译失败
import java.util.*;
import java.sql.*;
public class Demo {
public static void main(String[] args) {
Date date=new Date();//编译出错,java.util和java.sql中都含有该类
}
}
所以我们更推荐显式指明要导入的类名
可以使用import static导入包中静态的方法和字段,这样的好处是在当前类中使用写起来很方便。如下所示:
import static java.lang.Math.*;
public class Test {
public static void main(String[] args) {
double x = 30;
double y = 40;
// 静态导入的方式写起来更方便一些.
// double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
double result = sqrt(pow(x, 2) + pow(y, 2));
System.out.println(result);
}
}
3、自定义包
基本规则:
在文件的最上方加上一个 package 语句指定该代码在哪个包中.
包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如 com.bit.demo1 ).
包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在一个对应的路径 com/bit/demo1 来存储代码.
如果一个类没有 package 语句, 则该类被放到一个默认包中.
操作步骤:
1、新建一个包:
2、输入包名:
3、在com.bit.demo1包下创建类Test(输入类名省略)
4、此时磁盘中的目录结构已经生成:
5、在Test文件的最上方可以看到package字样:
4、包的访问权限举例
包com.bit.demo2: Student类。
package com.bit.demo2;
public class Student {
String name;
public String gender;
private int age;
protected int num;
public Student(String name,String gender,int age,int num){
this.name=name;
this.gender=gender;
this.age=age;
this.num=num;
}
public void Class(){
System.out.println("go to class!");
}
}
包com.bit.demo1: 导入包com.bit.demo2中的Student类。
package com.bit.demo1;
import com.bit.demo2.Student;
public class Test {
public static void main(String[] args) {
Student sc=new Student("luka","man",21,0511);
System.out.println(sc.gender);
//gender被public修饰,可以在全局范围内调用,编译通过
System.out.println(sc.num);
//num被protected修饰,只能在同一包或不同包的子类中调用,编译失败
System.out.println(sc.age);
//age被private修饰,只能在所在类中调用,编译失败
System.out.println(sc.name);
//name默认被default修饰,只能在所在包中调用,编译失败
sc.Class();
}
}
5、常见的包
1. java.lang: 系统常用基础类(String、Object),此包从JDK1.1后自动导入。
2. java.lang.reflect: java 反射编程包;
3. java.net: 进行网络编程开发包。
4. java.sql: 进行数据库开发的支持包。
5. java.util: 是java提供的工具程序包。
6. java.io: I/O编程开发包。
OVER!!!