对类文件进行分类管理
给类提供多层命名(名称)空间
写在程序文件的第一行
类名的全称为 包名.类名
包也是一种封装形式
package mypack;
class Person extends Object
{
private int age;
Person(int age)
{
this.age = age;
}
}
class Demo
{}
class InnerClassDemo2
{
public static void main(String[] args)
{
Person p1 = new Person(20);
}
}
在cmd中,指定生成类文件的位置:javac -d . PackageDemo.java。结果是生成一个文件mypack,文件里面有各种的class文件。然后运行是:java mypack.InnerClassDemo2
理解:package mypack;的作用就是将编译后的生成的文件放到有个文件包里。
在生成的文件包里面再建立子文件的子文件再放生成的文件也可以。
不同包中类与类之间的访问。
(1)、将两个java文件编译到不用的目录下
两个程序:
package packa;
class DemoA
{
void show()
{
System.out.println("show run");
}
}
package mypack;
class PackDemo
{
public static void main(String[] args)
{
DemoA d = new DemoA();
d.show();
System.out.println("Hello");
}
}
执行后错误提示1:
错误原因:类名写错。因为DemoA类已经有包的所属,所以必须要明确其包名。记住:DemoA这个名称是错误的,正确名称是包名.类名,应为packa.DemoA
第二个错误:
错误原因:原因是在当前目录下找不到packa(当前目录是javaxuexi),因为packa存放在其他目录下,应该配置一个classpath。
E:\javaxuexi>set classpath=E:\javaxuexi\my(packa包所在的目录)
第三个错误:
DemoA的权限问题,在加了包以后,没加public的类多相当于封装在包里。所以需要在DemoA类定义前加public。
第四个错误:
show权限是默认的,默认的并不是公共的,所有要调用这个方法要加public。
package packa;
public class DemoA
{
public void show()
{
System.out.println("show run");
}
}
E:\javaxuexi>javac -d E:\javaxuexi\my DemoA.java
E:\javaxuexi>javac -d E:\javaxuexi\my PackDemo.java
E:\javaxuexi>java mypack.PackDemo
show run
Hello
最后的显示。
总结:包与包之间的类进行访问,被访问的包中的类必须是public的,被访问的包中的类的方法也必须是public的。
不同包是可以继承的。
三段代码:
package mypack;
class PackDemo
{
public static void main(String[] args)
{
packa.DemoA d = new packa.DemoA();
d.show();
//packb.DemoB b = new packb.DemoB();
//d.method(); 产生错误:PackDemo.java:9: 错误: method()可以在DemoB中访问protectedd.method();
System.out.println("Hello");
}
}
package packb;
public class DemoB
{
protected void method()
{
System.out.println("DemoB method!");
}
}
package packa;
public class DemoA extends packb.DemoB
{
public void show()
{
method();
System.out.println("show run");
}
}
注意:
1、在不同包的类要用包名.类名的方法调用。
2、protected权限的方法,其子类可以调用,但是其(父类)不能够使用。专门为子类提供
四种权限
public | protected | default(默认) | private | |
---|---|---|---|---|
同一类中 | ok | ok | ok | ok |
同一个包中 | ok | ok | ok | |
子类中 | ok | ok | ||
不同包中 | ok |
包导入import
导入后就可以正常写这个包中类的类名了。
import packa.DemoA;//导入了packa包中的DemoA类。
//import packa.*;//使用通配符,导入packa包中所有的类。
//import packa.abd.*;//导入pack.abd目录下的所有类。
导包原则:用到那个类,就导入那个类。
Jar:java 的压缩包
进程
正在进行中的程序。(直译)
在内存中开辟的一个存储空间。
线程
进程中的一个负责程序执行的一个控制单元,也叫执行路径。
一个进程中可以有多个执行路径,成为多线程。
一个进程中至少要有一个线程。
开启多个线程是为了同时运行多部分代码。
每一个线程都有自己的运行内容,这个内容可以称为线程要执行的任务。
多线程的好处和弊端
好处:解决了多部分同时运行的问题。
弊端:线程太多回到效率的降低。
其实应用程序的执行都是CPU在做着快速的切换完成的,这个切换是随机的。
JVM启动时就启动了多个线程,至少有两个线程可以分析出来。
1、执行main函数的线程,该线程的任务代码都定义在main函数中。
2、负责垃圾回收的线程。
垃圾回收器:gc()
多线程的创建方式:继承Thread类