类和对象(三)
包
定义:Package是Java中一个组织类的方式,用于防止类名冲突和提高代码的可读性。包允许将类组织在一个层次结构中,类似于文件系统中的目录
在Java中也引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式。可以这么理解,包就是文件夹,用来把Java类分门别类存放,避免类名冲突、方便管理代码
包的作用:1.解决类名重复,不同包里可以有同名类。2.代码分层管理。3.控制权限访问,配合private、protected、public、default,限制跨包访问。4.简化导入,可以批量导入包里所有类
导入包中的类
Java中已经提供了很多现成的类供我们使用,例如Date类,可以使用 Java.util.Date 导入Java.util 这个包中 Date类;但是这种写法⽐较⿇烦, 可以使⽤ import 语句导⼊包:
…
import java.util.Date;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到⼀个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
…
如果需要使⽤ java.util 中的其他类, 可以使⽤ import java.util.* ,只要是 java.util 下的类都是可以在当前Test类中使⽤
…
import java.util.*;
public class Test {
public static void main(String[] args) {
Date date = new Date();
// 得到⼀个毫秒级别的时间戳
System.out.println(date.getTime());
}
}
…
但是最好还是显式的指定要导入的类名,否则容易发生冲突,比如:
…
import java.util.*;
import java.sql.*;
public class Test {
public static void main(String[] args) {
// util 和 sql 中都存在⼀个 Date 这样的类, 此时就会出现歧义, 编译出错
Date date = new Date();
System.out.println(date.getTime());
}
}
…
上述这种情况下需要使用完整的类名,因为 java.sql. 中也有一个Date类,此时无法确定到底要引入那个包中的类,应如下:
…
import java.util.*;
import java.sql.*;
public class Test {
public static void main(String[] args) {
java.util.Date date = new java.util.Date();
System.out.println(date.getTime());
}
}
…
也可以使用 import static 导入包中静态的方法和字段
自定义包
基本规则
在⽂件的最上⽅加上⼀个 package 语句指定该代码在哪个包中,包名需要尽量指定成唯⼀的名字, 通常会⽤公司的域名的颠倒形式(例如 com.bit.demo1 ),包名要和代码路径相匹配. 例如创建 com.bit.demo1 的包, 那么会存在⼀个对应的路径 com/bit/demo/1 来存储代码,如果⼀个类没有 package 语句, 则该类被放到⼀个默认包中
如何使用idea创建包

包的命名一般用全小写,如果我们在定⼀个类的时候,如果没有指定成员变量/成员⽅法的访问权限,此时默认的访问权限就是包访问权限
封装
访问限定符详解
包的访问权限有以下四种:1.private 2. public 3.protected 4.default(包访问权限,也叫默认权限)
1.private修饰的成员变量,只能在当前类中来使⽤
2.public修饰的成员变量,在所指定情况下均是可以正常访问的
3.protected同包随便用,跨包只有子类能用
4.default表⽰什么修饰符都不加,此时只能在包当中才能被访问
封装的概念
⾯向对象程序三⼤特性:封装、继承、多态。⽽类和对象阶段,主要研究的就是封装特性。封装:把类的成员变量私有化,对外只提供公开的方法来访问和修改变量。
可以理解为封装是将数据(属性)和操作这些数据的⽅法(函数)包装在⼀个单元(通常是类)内,不让外界随便直接改。
封装的好处
1.降低代码的耦合性,封装可以降低对象和对象之间的耦合度,当对象内部发⽣变化时,只需要修改对象内部即可,不会影响到外部程序,因为公开的接⼝是不会发⽣改变的 2.降低代码的复杂度,封装是隐藏了对象内部的实现细节,只提供了公开的接⼝给外部,使⽤起来更加简单 3.提高安全性,封装可以隐藏对象的具体实现细节,阻⽌外部程序直接访问对象的内部状态,从⽽保护数据不被意外修改或破坏



