包
包的作用
1.区分相同名字的类。
2.当类很多时,可以很好的管理类。
3.控制访问范围.
包的基本语法
package com.hspedu
1.package 关键字,表示打包
2.com.hspedu: 表示包名
包的本质
实际上就是创建不同的文件夹或者是目录,来保存类文件。
包的命名
命名规则:
只能包含数字、字母、下划线、小圆点,但是不能以数字开头、不可以是关键字或者是保留字。
例如:
dema.ab12.oa
命名规范:
一般是小写字母+小圆点
com.公司名.项目名.业务模块名
例如:
com.sina.crm.user——用户模块
com.sina.crm.order——订单模块
com.sina.crm.utils——工具类
常用的包
一个包下有很多类,Java当中常用的包:
java.lang.*——lang包是基础包,默认引入,不需要再引入
java.util.*——util包是系统提供的工具包,工具类
java.net.*——net包是网络包,应用网络开发
java.awt.*——awt包是Java页面开发,GUI
引入包
例如:
声明xiaoming这个包,创建Dog类
package com.xiaoming;
public class Dog {
}
声明xiaoqiang这个包,创建Dog类
package com.xiaoqiang;
public class Dog {
}
声明xiaomei这个包,创建Hello类
package com.xiaomei;
public class Hello {
}
创建一个我们的主函数,进行测试
package com.use;
//import引入xiaoming这个包的Dog这个类
import com.xiaoming.Dog;
public class Test {
public static void main(String[] args) {
//这里的Dog便是xiaoming这个包下的类
Dog dog = new Dog();
System.out.println(dog);
}
}
当我们需要多个包中的类的时候
package com.use;
public class Test {
public static void main(String[] args) {
//com.包名.类名
com.xiaoming.Dog dog1 = new com.xiaoming.Dog ();
System.out.println(dog1);
com.xiaoqiang.Dog dog2 = new com.xiaoqiang.Dog();
System.out.println(dog2);
//不引用头文件,在创建时直接使用包的名字来引用类
com.xiaomei.Hello hello = new com.xiaomei.Hello();
}
}
引入包的方法
语法:import 包;
我们之所以引入包,起原因是我们需要其包当中的类,以便给我们提供方法或者是属性等。
例如:在main函数当中使用scanner方法
package com.zlqedu.pkg;
//引入scanner类
import java.util.Scanner;
public class PkgDetail {
public static void main(String[] args) {
//使用scanner方法,使控制台输入
Scanner myscanner = new Scanner(System.in);
}
}
package com.zlqedu.pkg;
//引入util包的所有,其中包含scanner,当引用util所以得时候,只要其包含都可以使用
import java.util.*;
public class PkgDetail {
public static void main(String[] args) {
//使用scanner方法,使控制台输入
Scanner myscanner = new Scanner(System.in);
}
}
注意细节
1.package的作用是声明当前类所在的包,需要放在类的最上面,一个类当中只有一句package。
2.import指令位置放在package的下面,在类的定义前面,可以有多句,而且是无顺序的的要求。
//package的作用是声明当前类所在的包,需要放在类的最上面
//一个类中最多只有一句package
package com.zlqedu.pkg;
//import指令,位置放在package的下面,在类的定义前面,可以有多句,没有顺序
import java.util.Scanner;
import java.util.*;
//放在下面会报错:Syntax error on token "package", import expected
//package com.zlqedu.pkg;
public class PkgDetail {
public static void main(String[] args) {
//使用scanner方法,使控制台输入
Scanner myscanner = new Scanner(System.in);
}
}
建议:当我们在使用包时,如果我们需要用到其导入的类时,需要哪个就导入哪一个,尽可能的不要将所有的都导入。
例如:我们需要用scanner
//建议使用这个形式
import java.util.Scanner;
//这个形式没有错,但是不建议使用
import java.util.*;
访问修饰符
访问修饰符的种类
Java提供了四种访问控制修饰符号,控制方法和属性(成员变量)的访问权限(范围)。
1.公开级别:public——对外公开的
2.受保护级别:protected——对子类和同一个包中的类公开
3.默认级别:没有修饰符号——对同一个包的类公开
4.私有级别:private——只对类本身可以访问,不对外公开
四种访问修饰符的访问范围
级别 | 访问修饰符 | 同类 | 同包 | 子类 | 不同包 |
公有 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | × |
默认 | 没有修饰符 | √ | √ | × | × |
私有 | private | √ | × | × | × |
注意事项
1.访问修饰符可以用来修饰类中的属性,成员方法以及类。
2.只有默认和public才能修饰类,并且遵循上述访问权限的特点。
3.成员方法的访问规则和属性完全一样。
例如:属性
package com.zlqedu.modifier;
public class A {
//四个属性,用四个不同的访问修饰符来修饰
public int n1 = 100;
protected int n2 = 200;
int n3 = 300;
private int n4 = 400;
public void m1() {
//该方法可以访问该四个属性
System.out.println("n1=" + n1 + "n2="+ n2 + "n3=" + n3 + "n4=" + n4);
}
package com.zlqedu.modifier;
public class B {
public void m2() {
A a = new A();
//在同一个包下可以访问public,protected和默认,不能访问private
//报错n4访问不到
//System.out.println("n1=" + a.n1 + "n2="+ a.n2 + "n3=" + a.n3 + "n4=" + a.n4);
System.out.println("n1=" + a.n1 + "n2="+ a.n2 + "n3=" + a.n3);
}
}
package com.zlqedu.pkg;
import com.zlqedu.modifier.A;
public class Test {
public static void main(String[] args) {
A a = new A();
//在不同的包下只有public可以访问其他的不能访问到
System.out.println(a.n1);
}
}
方法与属性同理。
个人笔记,如有错误,还望指正。