java基础学习——(12)包、多线程、练习题

包(package)

对类文件进行分类管理
给类提供多层命名(名称)空间
写在程序文件的第一行
类名的全称为 包名.类名
包也是一种封装形式

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
java基础学习——(12)包、多线程、练习题_第1张图片
理解: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:
java基础学习——(12)包、多线程、练习题_第2张图片
错误原因:类名写错。因为DemoA类已经有包的所属,所以必须要明确其包名。记住:DemoA这个名称是错误的,正确名称是包名.类名,应为packa.DemoA

第二个错误:
java基础学习——(12)包、多线程、练习题_第3张图片
错误原因:原因是在当前目录下找不到packa(当前目录是javaxuexi),因为packa存放在其他目录下,应该配置一个classpath。
E:\javaxuexi>set classpath=E:\javaxuexi\my(packa包所在的目录)

第三个错误:
java基础学习——(12)包、多线程、练习题_第4张图片
DemoA的权限问题,在加了包以后,没加public的类多相当于封装在包里。所以需要在DemoA类定义前加public。
java基础学习——(12)包、多线程、练习题_第5张图片
第四个错误:
java基础学习——(12)包、多线程、练习题_第6张图片
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 的压缩包

练习题
java基础学习——(12)包、多线程、练习题_第7张图片
java基础学习——(12)包、多线程、练习题_第8张图片
java基础学习——(12)包、多线程、练习题_第9张图片
覆盖失败,编译失败,调用的不确定性
java基础学习——(12)包、多线程、练习题_第10张图片
java基础学习——(12)包、多线程、练习题_第11张图片
编译失败
java基础学习——(12)包、多线程、练习题_第12张图片

多线程

进程

正在进行中的程序。(直译)
在内存中开辟的一个存储空间。

线程

进程中的一个负责程序执行的一个控制单元,也叫执行路径。
一个进程中可以有多个执行路径,成为多线程。
一个进程中至少要有一个线程。
开启多个线程是为了同时运行多部分代码。
每一个线程都有自己的运行内容,这个内容可以称为线程要执行的任务。

多线程的好处和弊端

好处:解决了多部分同时运行的问题。
弊端:线程太多回到效率的降低。

其实应用程序的执行都是CPU在做着快速的切换完成的,这个切换是随机的。

JVM启动时就启动了多个线程,至少有两个线程可以分析出来。
1、执行main函数的线程,该线程的任务代码都定义在main函数中。
2、负责垃圾回收的线程。
垃圾回收器:gc()

多线程的创建方式:继承Thread类

你可能感兴趣的:(java基础学习)