包:

1、相当于文件夹,用于给文件进行分类管理。

2、给类提供多层命名空间。s文件夹下的文件1,还是r文件夹下的文件1。

3、package 包名(所有字母小写),语句放在代码第一行。注意:有了包之后类名就变成了包名.类名,而不是原来的类名了。

java包名上有红色感叹号 java包名报错_包名

这个错误是因为类名前忘记加了包名。 

java包名上有红色感叹号 java包名报错_报错_02

这个错是因为文件夹下没有这个包,应该把这个类文件放在名为pack的文件夹下。

 

java包名上有红色感叹号 java包名报错_类名_03

如何自动生成包文件夹呢?

java包名上有红色感叹号 java包名报错_包_04

-d  指定包所存在的位置(目录),  .  代表当前目录,就不必再抄一遍了。

java包名上有红色感叹号 java包名报错_包名_05

正常开发时必须写 类的全名称,先写包再写类。 【包名.类名】    因为你写项目的时候必须要写名是哪组中的类

当然,不指定当前目录也行,

java包名上有红色感叹号 java包名报错_java包名上有红色感叹号_06

包的出现可以让类文件(运行文件)和原文件相分离。所以,今后再写文件时把class文件和原文件分开存放,利于整理。

但是运行的时候要转到那个目录下,目录写到包的父文件即可。

java包名上有红色感叹号 java包名报错_包名_07

java包名上有红色感叹号 java包名报错_java包名上有红色感叹号_08

不同包中的类如何相互访问呢?先来看两篇代码。

代码1:

package first;  //包名必须都是小写

class CrossT
{
    public static void main(String[] args)
    {
        second.DemoT d = new second.DemoT();  //类名必须是带着包名的全名。 
        d.show();
    }
}

代码2: 

package second;

public class DemoT  //这里必须是public 才能被其它类调用,有public还要保证文件名与类名一致
{
    public void show()  //这里必须是public 
    {
        System.out.println(" I believe you,my lover "+(char)1);
    }
}

 这里代码1和代码2都在一个文件夹下,它们运行后的class文件也都在另一个文件夹下,代码1调用代码2.

如果建立对象时没有写全类名会报这样的错:

java包名上有红色感叹号 java包名报错_包_09

由于分开存放了class文件与原文件,测试运行时需要先设置一下环境变量,如果忘记设环境变量了,会报下面的错:

java包名上有红色感叹号 java包名报错_报错_10

再假如你忘了在被调用的类前边加public 会报下面的错:

java包名上有红色感叹号 java包名报错_包名_11

除了被调用 的类前要加public ,被访问的成员也必须公有才可以被访问,否则报这样错:

java包名上有红色感叹号 java包名报错_包名_12

 

另外,加了public后的类名和原文件名必须保持一致,否则会报这个错:

java包名上有红色感叹号 java包名报错_类名_13

这里我文件名是【测试配合.java】而类的名字是【DemoT】所以它让声明DemoT.java

同时,这也决定了一个文件中只能有一个公有类或者接口,不然类名和谁一致??如果真想在一个包里有两个公有类,在包里再建一个文件即可。

如果以上问题都解决了,就可以运行啦,但是,运行时如果没有写全包名,还会有最后一个错等着你:

java包名上有红色感叹号 java包名报错_报错_14

改正为【包名.类名】即可。效果如下:

java包名上有红色感叹号 java包名报错_java包名上有红色感叹号_15

另外,跨包之间也可以继承。比如下面这段代码 就可以和以上两篇代码相结合:

package third;

public class DemoT2
{
    public void put()
    {
        System.out.println("you are handsome man,my attractive boy~~"+(char)2);

    }
}

代码2改成:

package second;

public class DemoT extends third.DemoT2
{
    public void show()
    {
        System.out.println(" I believe you,my lover "+(char)1);
        put();
    }
}

运行结果是:

java包名上有红色感叹号 java包名报错_类名_16

 跨包间继承多时,涉及到protected  修饰符的问题,被它修饰的方法,除非是这个方法所在类的子类可以调用,其它不可以。

总结:

1、包与包之间进行访问,被访问包中 的类及成员,需要public 修饰。

2、不同包中的子类可以直接访问父类中被protected权限修饰的成员。

3、包与包之间可使用的权限只有两种:public和protected 

4、权限范围:

java包名上有红色感叹号 java包名报错_报错_17

注意:默认权限的方法子类继承完是不能用的。

5、包里还可以有包,和文件夹一个道理。下面这样是允许的。

java包名上有红色感叹号 java包名报错_类名_18

为了简化类名的书写,使用Import关键字导入包中的类。

java包名上有红色感叹号 java包名报错_类名_19

这里注意是导入 【包中的类】而不是文件夹,上图中haha就是个文件夹,不会被导入。

这里不建议用通配符,开发时用哪个导哪个。

定义包名不要重复,可以用url定义,保证包的唯一性, 

重点来了, 敲黑板!

Jar包

java包名上有红色感叹号 java包名报错_报错_20

java包名上有红色感叹号 java包名报错_包_21

java包名上有红色感叹号 java包名报错_报错_22

 

另有dos操作也可以实现把一堆东西放到一个文件夹中方便查阅,即【数据重定向】,把数据在另一个地方展示。

java包名上有红色感叹号 java包名报错_报错_23

java包名上有红色感叹号 java包名报错_类名_24

java包名上有红色感叹号 java包名报错_类名_25

只要把jar包放在classpath下就可以使用写好的封装工具。