day12_面向对象的包+多线程

来源:互联网 发布:恒星寿命知乎 编辑:程序博客网 时间:2024/06/07 03:39


面向对象(包-包之间访问-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.DemoApacka 中不是公共的;无法从外部软件包中对其进

行访问

                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在切换执行,所以也才会出现这种情况

 

多线程运行图



他们三个线程互不影响,各自有各自的所属,如果其中一个出现了异常,那么并不会影响其他两个异常,其他两个还会照样执行



0 0
原创粉丝点击