面向对象-----------包
概述
- 对类文件进行分类管理
- 给类提供多层命名空间
- 写在程序文件的第一行
- 类名的全称是 包名.类名
- 包也是一种封装形式
class DemoA
{
public void show()
{
System.out.println("demoa show run");
}
}
package mypack;
class PackageDemo
{
public static void main(String[] args)
{
packa.DemoA d=new packa.DemoA();
d.show();
System.out.println("hellow package");
}
}
包与包之间的访问
public | portected | default | private | |
同一类中 | ok | ok | ok | ok |
同一包中 | ok | ok | ok | |
子类中 | ok | ok | ||
不同包中 | ok |
导入import
import packa.DemoAA; 导入了packa包中的DemoA类
import packa.DemoA;
import packa.*;//导入了packa包中所有的类
import packa.abc.*;导入了packa\abc包中所有的类
导包原则:用到哪个类就导入哪个类
Jar包
java的压缩包
多线程
概述
进程:正在进行中的程序
线程:就是进程中一个负责程序执行的控制单元(执行路径)
一个进程中可以多执行路径,称之为多线程
一个进程中至少要有一个线程
扫描二维码关注公众号,回复:
4665267 查看本文章
开启多个线程是为了同时运行多部分代码
每一个线程都有自己运行的内容,这个内容可以称之为线程要执行的任务
//多线程
class Demo extends Object
{
public void finalize()
{
System.out.println("demo ok");
}
}
class ThreadDemo
{
public static void main(String[] args)
{
new Demo();
new Demo();
new Demo();
System.gc();
System.out.println("Hello World!");
}
}
好处与弊端
好处:解决了多部分同时运行的问题
弊端:线程太多会导致效率的降低
JVM的多线程解析
其实程序的执行都是CPU在做着快速的切换完成的,这个切换是随机的
JVM启动时就启动了多个线程,至少有两个线程可以分析出来
1,执行main函数的线程
该线程的任务代码都定义在main函数中
2,负责垃圾回收的线程
主线程运行示例
class Demo
{
private String name;
Demo(String name)
{
this.name=name;
}
public void show()
{
for(int x=0;x<10;x++)
{
System.out.println(name+"......x="+x);
}
}
}
class ThreadDemo2
{
public static void main(String[] args)
{
Demo d1=new Demo("旺财");
Demo d2=new Demo("xiaoqiang");
d1.show();
d2.show();
}
}
Thread类中的方法&线程名称
如何创建一个线程?
创建线程方式一:继承Thread类
步骤:
- 定义一个类继承Thread类
- 覆盖Thread类中的run方法
- 直接创建Thread的子类对象创建线程
- 调用start方法开启线程并调用线程的任务run方法执行
可以通过Thread的getName获取线程名称 Thread-编号(从零开始)
主线程的名字就是main
class Demo extends Thread
{
private String name;
Demo(String name)
{
super(name);
//this.name=name;
}
public void run()
{
for(int x=0;x<10;x++)
{
System.out.println(name+"......x="+x+".....name"+Thread.currentThread().getName());
}
}
}
class ThreadDemo2
{
public static void main(String[] args)
{
Demo d1=new Demo("旺财");
Demo d2=new Demo("xiaoqiang");
d1.start();
d2.start();
System.out.println("over....."+Thread.currentThread().getName());
}
}