一、包package和引用import
1.关键字package
package语句作为Java源文件的第一条语句,指明该文件中定义的类所在的包(若缺省该语句,则指定为无名包)。包的存在是为了区别同名类名的命名空间。
包的语法格式
package 顶层包名.子包名;
实例:
package P1;//指定类Test属于包p1 public class Test{ public void display(){ System.out.println("in method display()); } }
注意:包对应于文件系统的目录,package语句中,用”.“来指明包(目录)的层次。
Java中的包package等同于文件夹的概念,包和文件夹一样可以有多级,也就是包下可以有包和文件,多级的包使用”.“分隔,例如com包下的cn包下的test包,写法为com.cn.test。
包通常用小写单词,类名首字母通常大写。
2.关键字import
为使用定义在不同包中的Java类,需用import语句来引入指定包层次下所需要的类或全部类(.*)。import语句告诉编译器到哪里去寻找类。
语法格式:
import 包名.子包名.类名;
实例
import p1.Test;//指明p1中的Test类。(若是import p1.*;则表示引入p1包中的所有类) public class TestPackage{ public static void main(String args[]){ Test t = new Test(); t.display(); } }
注意:若引入的包为java.lang,则编译器默认可获取此包下的类,不需要再显示声明。
import语句出现在package语句之后、类定义之前。
一个源文件中可包含多个import语句。
可以使用import Lee.*;语句,表明引入lee包下的所有类。而lee包下的sub子包的类则不会被导入。
import语句不是必须的,可坚持在类里使用其他类的全名
3.JDK中主要的包介绍
java.lang----包含一些Java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。
java.net----包含执行与网络相关的类和接口。
java.io----包含能提供多种输入/输出功能的类。
java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
java.test----包含了一些Java格式化相关的类
java.sql----包含了Java进行JDBC数据库编程的相关类/接口
java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。
java.applet----包含applet运行所需的一些类。
二、封装和隐藏
使用者对类内部定义的属性(对象的成员变量)的直接操作会导致数据的错误、混乱或安全性问题。
实例:
package day10; public class Person { public int age; //我们需要对不能让调用者随意使用的属性做封装和隐藏 public void printAge(){ System.out.println("年龄是:" + age); } } package day10; import day10.Person;//如果使用的是同一个包下的类,import可以省略 public class Test { public static void main(String[] args){ Person p = new Person(); p.age = -100;//这样的情况,程序是对的,但不符合实际情况 //这种情况,类的属性是开放的,调用者可以随意调用,容易出问题。 p.printAge(); } }
以上程序可以进行隐藏和优化更改为:
package day10; public class Person { //public int age; //我们需要对不能让调用者随意使用的属性做封装和隐藏 private int age; public int getAge(){ return age; } public void setAge(int a){ if(a <=150 && a>=0){ age = a; }else{ System.out.println("输出的年龄:" + a + "不在0到150之间"); } } public void printAge(){ System.out.println("年龄是:" + age); } } package day10; import day10.Person;//如果使用的是同一个包下的类,import可以省略 public class Test { public static void main(String[] args){ Person p = new Person(); //p.age = -100;//这样的情况,程序是对的,但不符合实际情况 //这种情况,类的属性是开放的,调用者可以随意调用,容易出问题。 p.setAge(-100); p.printAge(); } }
打印结果:
信息的封装和隐藏
Java中通过将数据声明为私有的(private),再提供公共的(public)方法:getXxx()和setXxx()实现对该属性的操作,以实现下述目的:
1.隐藏一个类中不需要对外提供的实现细节;
2.使用者只能通过事先定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作;
3.便与修改,增加代码的可维护性;
四种访问权限修饰符
Java权限修饰符public、protected、private置于类的成员定义前,用来限定对象对该类成员的访问权限。
对于class的权限修饰只可以用public和default(缺省)。
public类可以在任何地方被访问,在同一个Java文件中可以写多个的class,但是只能有一个是public的,其他的只能是缺省的。
default类只可以被同一个包内部的类访问。