面向对象(包-包之间访问-protected)
PackageDemo.java:8: 找不到符号
符号: 类 DemoA
位置: 类 mypack.PackageDemo
DemoA d = new DemoA();
^
PackageDemo.java:8: 找不到符号
符号: 类 DemoA
位置: 类 mypack.PackageDemo
DemoA d = new DemoA();
^
2 错误
原因:类名写错。
因为DemoA类已经有包的所属,所以必须要明确其报名。
记住:DemoA这个名词错的。 正确名称是报名.类名 packa.DemoA
--------------------------------------
PackageDemo.java:8: 软件包 packa 不存在
packa.DemoA d = newpacka.DemoA();
^
PackageDemo.java:8: 软件包 packa 不存在
packa.DemoA d = newpacka.DemoA();
^
2 错误
原因是在当前目录下没找到,因为packa存放在其他目录下,
应该配置一个classpath。
-------------------------------------
PackageDemo.java:8: packa.DemoA在 packa 中不是公共的;无法从外部软件包中对其进
行访问
packa.DemoA d = newpacka.DemoA();
^
PackageDemo.java:8:packa.DemoA 在 packa 中不是公共的;无法从外部软件包中对其进
行访问
packa.DemoA d = newpacka.DemoA();
^
2 错误
--------------------------------------
PackageDemo.java:9:show() 在 packa.DemoA 中不是公共的;无法从外部软件包中对其进
行访问
d.show();
^
1 错误
总结:
包与包之间的类进行访问,被访问的包中的类必须是public的,被访问的包中的类的方法也必须是public的。
面向对象(包-导入import)
面向对象(Jar包)
c:创建压缩文档。
f:制定存档名称。
v:显示详细信息。
m:加入自定义清单信息。
通常应用与Java制作的图形界面程序。在清单文件中其中定一个Main-Class:空格 带有主函数的类名回车
在设置一下jar文件的打开方式通过javaw –jar就可以双击执行了
练习四解析_1
如果出现了多态调用的情况,对于调用非静态的方法,编译看左边,运行看右边吧
13:做错了:使用了trycatch过后问题解决了后面还会继续执行的,如果没有使用trycatch,如果是抛出异常,那程序就会终止
.
21
这就是异常的好处,我在里面抛不用在函数里面声明了,因为我声明是没有必须的,我声明了你不是要处理吗,你处理完了那起不是还要继续往下运行,没有意义吗,这就是runtime的好处
简单点理解:
进程:正在进行中的程序(直译),进程是不直接执行的,它只是在分配该应用程序的内存空间
线程:负责进程中内容执行一个控制单元,也称之为执行路径
线程:就是进程中一个负责程序执行的控制单元(执行路径)
一个进程中可以多执行路径,称之为多线程。
一个进程中至少要有一个线程。
开启多个线程是为了同时运行多部分代码。
每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。
多线程(好处与弊端)
多线程好处:解决了多部分同时运行的问题。
多线程的弊端:线程太多回到效率的降低。
其实应用程序的执行都是cpu在做着快速的切换完成的。这个切换是随机的。
多线程(JVM中的多线程解析)
其实应用程序的执行都是cpu在做着快速的切换完成的。这个切换是随机的。
JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。
1,执行main函数的线程,
该线程的任务代码都定义在main函数中。
2,负责垃圾回收的线程
系统垃圾回收的的方法:Object类中的finalize()
当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。子类重写 finalize 方法,以配置系统资源或执行其他清除
系统中启动垃圾回收的方法是System.gc();
多线程(多线程创建的方式一-继承Thread类)
多线程(Thread类中的方法&线程名称)
/*
如何创建一个线程呢?
创建线程方式一:继承Thread类。
步骤:
1,定义一个类继承Thread类。
2,覆盖Thread类中的run方法。
3,直接创建Thread的子类对象创建线程。
4,调用start方法开启线程并调用线程的任务run方法执行。
可以通过Thread的getName获取线程的名称 Thread-编号(从0开始)
主线程的名字就是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++)
{
//for(int y=-9999999; y<999999999; y++){}
System.out.println(name+"....x="+x+".....name="+Thread.currentThread().getName());
}
}
}
class ThreadDemo2
{
public static void main(String[] args)
{
/*
创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行。
而运行的指定代码就是这个执行路径的任务。
jvm创建的主线程的任务都定义在了主函数中。
而自定义的线程它的任务在哪儿呢?
Thread类用于描述线程,线程是需要任务的。所以Thread类也对任务的描述。
这个任务就通过Thread类中的run方法来体现。也就是说,run方法就是封装自定义线程运行任务的函数。
run方法中定义就是线程要运行的任务代码。
开启线程是为了运行指定代码,所以只有继承Thread类,并复写run方法。
将运行的代码定义在run方法中即可。
*/
//
// Thread t1 = new Thread();
Demo d1 = new Demo("旺财");
Demo d2 = new Demo("xiaoqiang");
d1.start();//开启线程,调用run方法。
d2.start();
System.out.println("over...."+Thread.currentThread().getName());
}
}
//调用run和调用start有什么区别?
上面这个程序的结果是:一会输出旺财.....0,一会输出xiaoqiang...0因为我们启动了两个线程(实际上是三个),这两个线程是都是由cpu在切换执行,所以也才会出现这种情况
多线程运行图
他们三个线程互不影响,各自有各自的所属,如果其中一个出现了异常,那么并不会影响其他两个异常,其他两个还会照样执行