Java学习笔记四

接受过去、珍惜当下、展望未来。

今天整理记录的内容:
1.异常
2.包
3.java中四种权限
4.打包jar包和解压jar包命令
5.多线程中join(long mills)
6.多线程死锁问题
7.线程间通信
8.线程安全
9.volatile关键字

一、异常
1.异常处理方式:try{}catch{}、throws。
2.finally不被执行:在执行finally代码块前调用 system.exit(0)。此时finally代码块不被执行。
解释:
如果某段代码有发生异常的可能,就要在此处加上try{}catch(Exception e){},用于捕捉异常并处理异常;还可以在方法上通过throws声明该异常.
我们可能认为在finally块中的代码肯定执行或者遇到return就不会执行,其实不然,要想finally块中的代码不被执行,只有在执行finally块代码前加上System.exit(0);

    private static void testException() throws FileNotFoundException{//可以在方法上声明该异常

        /*也可以用try{}catch(){}来捕捉异常*/
        try {
            FileInputStream fis = new FileInputStream("test.txt");//因为这里要访问文件,那就存在潜在问题,要访问的文件到底存在不存在呢?
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }

        以上两种方式二选一。
    private static void testException(int number) {
        try {
            int x = 10 / number;//这里会发生潜在异常,除以0.我们在这里采用捕捉的方式处理。
            return;//一些人会认为在这里返回,我们看输出结果
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            System.out.println("执行finally");
        }   
    }
输出结果:
执行finally

证明return不会阻碍finally块的执行。

二,包
规定:某类在指定包中中,则计算机中必须有该包级目录。例如com.hbbfxy.test test 类在com.hbbfy包中,所以计算机中必须有com/hbbfxy 这个目录且test.class必须放到这个目录下。当我们利用命令行运行test.class时,要在com这个目录的父目录下运行test.class(这时必须是完整类名)
解释:
例如我们有一个指定包(com.hbbfxy)的test类在E:\Java\OneJava\src\com\hbbfxy下,我们用命令行编译test.java得到test.class,当我们运行test.class时要做到如下所示
这里写图片描述
这里写图片描述
//不然会出现如下错误提示
这里写图片描述

三、java中四种权限:
1、private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类(内部)、属性以及方法只能在自己的类中使用。
2、default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,允许在同一个包中进行访问。
3、3、protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类(内部)、属性和方法能在同一包中或不同包中的子类(注意这里说的不是子类对象)访问。
4、public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
注意:
顶层类只能被default、public权限修饰符修饰;在Java中默认修饰符四default。

四、打包jar包和解压jar包命令
1.jar -cf 打成的jar包名称.jar 待打成Jar包的文件夹名称1 待打成Jar包的文件夹名称2……… (不查看打包过程)
2.jar -cvf 打成的jar包名称.jar 待打成Jar包的文件夹1 待打成Jar包的文件夹名称2……… (查看打包过程)
3.解压Jar包命令:jar -xvf jar包名称
解释:
这里所说的打成Jar包是把class文件所在的目录打成Jar包供其它项目使用。
例如我有一个项目OneJava,编译后得到的.class文件在E:\Java\OneJava\bin\com\hbbfxy 从目录结构来看,我的项目包名是com.hbbfxy 所以我要打Jar包的话 命令行中输入的命令是
这里写图片描述
由上图我们可以看到,我们要将com这个文件夹打包成名字为MyJar的Jar包;在打包的过程中会将.class文件压缩,使整个文件所用的内存变小,这也是为什么将.class文件打成Jar包供其他项目使用的原因。

五、多线程中join(long mills):
有a和b两个线程,如果在a线程中调用b.join(1000),那么a线程就会给b线程1秒的时间去执行自己的任务,此时a线程处于挂起状态,如果在1秒内没有执行完任务或在1秒内完成任务,则a线程由挂起状态转为争夺状态。 如果调用的是b.join(),则a线程一直等到b线程完成任务才开始转为争夺状态。

六、多线程死锁问题
所谓多线程死锁问题我的理解是:互相持有对方要使用的锁对象
解释:

线程一:
synchronized(锁一){
......
 线程一运行到这里:线程一持有线程二将要用的 锁一
synchronized(锁二){
        ......
      }
 }

线程二:
synchronized(锁二){
 ......
线程二运行到这里:线程二持有线程一将要用的 锁二
synchronized(锁一){
        ......
    `
      }
 }

线程一和线程二互相持有对方将要使用到的锁对象。

七、线程间通信
线程间通信:wait()、notify()、notifyAll() 要与监视器 synchronized共同使用。因为线程间通信是指在相同的监视器(持有的锁是完全一样的)的情况下进行通信。调用wait()方法会释放锁并放弃执行权,执行notify()后并不会马上将锁给wait(),而是等notify()所在synchronized中的代码执行完并释放锁后才将锁给wait(),并且执行notify()后是唤醒多个wait()中任意一个。

八、线程安全
线程安全性包括两个方面,①可见性。②原子性。 (关于可见性和原子性的讲解查看下方volatile关键字的学习链接。)

九、volatile关键字
对于volatile关键字的讲解本人看的JAVA多线程之volatile 与 synchronized 的比较

学习心得:欲速则不达!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值