第五章 包及访问控制权限
5.1 包的定义
所谓的包实际上就是文件夹,在java中使用package关键字来定义包,此语句必须写在*.java文件的首行。
例:package com.yootk.demo;
表示文件保存在com/yootk/demo目录下
5.2 包的导入
包的导入:import 包的定义:package\
同一个包默认可以相互访问。
package com.company;
public class Message {
public void TestMessage(){
System.out.println("Hello World!");
}
}
package com.company;
import com.company.Message;
public class TestDemo {
public static void main(String[] args) {
// write your code here
Message msg = new Message();
msg.TestMessage();
}
}
程序在编译过程中应该先编译Message,在编译TsetMessage。
关于public class 与class的区别:
public class:文件名称必须与类名称保持一致,在一个*.java文件里面只能有一个public class声明,如果一个类需要被不同的包访问,那么一定要定义为public class;
class: 文件名称可以与类名称不一致,并且一个* .java 文件里面可以有多个class定义,编译后会形成多个*.class文件,如果一个类使用的是class定义,那么表示这个类只能被本包访问。
为了方便访问,特地使用了**import com.company.***进行全部导入。
当不同的包存在相同的类名称时:可以使用 包.类名称,进行具体化导入。
5.3 系统常见包
No. | 包名称 | 作用 |
---|---|---|
1 | java.lang | 基本的包,像String这样的类就都保存在此包中,在JDK 1.0时如果想编写程序,则必须手工导入此包,但是现在可以自动导入了。 |
2 | java.lang.reflect | 反射机制的包 |
3 | java.util | 工具包,一些常见的类库,日期操作等 |
4 | java.text | 提供一些文本的处理 |
5 | java.sql | 数据库操作包 |
6 | java.net | 网络编程开发包 |
7 | java.io | 进行输入输出处理及文本操作 |
8 | java.awt | 包含构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI) |
9 | javax.swing | 建立图形用户界面 |
10 | java.applet | Applet程序开发包,(已经不用了) |
5.4 jar命令
-c:建立一个新文件
-v:生成标准的压缩信息
-f:由用户自己指定一个*.jar的文件名称。
5.5 访问权限
private:只能在同一个类中访问;
default:只能在一个包中访问;
protected:在不同包的子类中可以访问;
public:所有都可以访问;
- 属性声明主要使用private权限;
- 方法声明主要使用public权限;
5.6 命名规范
-
类名称:每一个单词的开头首字母大写
-
变量名称:第一个单词的首字母小写,之后每个单词的首字母大写;
-
方法名称:第一个单词的首字母小写,之后每个单词的首字母大写;
-
常量名称:每个字母大写
-
包名称:所有字母小写
5.7 单例设计模式 (Singleton)
意义:
如果要控制一个类中实例化对象的产生个数,首先要锁定的就是类中的构造方法(使用private定义构造方法),因为在实例化任何新对象时都要使用构造方法,如果构造方法被锁,就自然无法产生新的实例化对象。
如果要调用类中定义的操作,那么很显然需要一个实例化对象,这时就可以在类的内部使用static方式来定义一个公共的对象,并且每一次通过static方法返回唯一的一个对象,这样外部不管有多少次调用, 最终一个类只能产生唯一 的对象,这样的设计就是单例设计模式。
package com.company;
class Singleton {
private final static Singleton instance=new Singleton();
private Singleton(){
}
public void print(){
System.out.println("Hello world!");
}
public static Singleton getInstance(){
return instance;
}
}
public class TestDemo {
public static void main(String[] args) {
// write your code here
Singleton inst=null;
inst=Singleton.getInstance();
inst.print();
}
}
5.8 多例设计模式
多例设计模式:定义出多个对象。
package com.company;
class Sex {
private String title;
private static final Sex MALE=new Sex("男");
private static final Sex FEMALE=new Sex("女");
private Sex (String title){
this.title=title;
}
public String toString(){
return this.title;
}
public static Sex getInstance(int ch){
switch (ch){
case 1:
return MALE;
case 2:
return FEMALE;
default:
return null;
}
}
}
public class TestDemo {
public static void main(String[] args) {
// write your code here
Sex sex=Sex.getInstance(1);
System.out.println(sex);
}
}