常用知识点备注

1、try catch finally 用法

try {

//执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容

} catch {

//除非try里面执行代码发生了异常,否则这里的代码不会执行

} finally {

//不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally

}


finally可以没有,也可以只有一个。无论有没有发生异常,它总会在这个异常处理结构的最后运行。即使你在try块内用return返回了,在返回前,finally总是要执行,这以便让你有机会能够在异常处理最后做一些清理工作。如关闭数据库连接等等。 
注意:如果没有catch语句块,那么finally块就是必须的。

如果你不希望在这里处理异常,而当异常发生时提交到上层处理,但在这个地方无论发生异常,都要必须要执行一些操作,就可以使用try finally, 
很典型的应用就是进行数据库操作: 
用下面这个原语来说明: 
try 

    DataConnection.Open(); 
    DataCommand.ExecuteReader(); 
    ... 
    return; 

finally 

    DataConnection.Close(); 


无论是否抛出异常,也无论从什么地方return返回,finally语句块总是会执行,这样你有机会调用Close来关闭数据库连接(即使未打开或打开失败,关闭操作永远是可以执行的),以便于释放已经产生的连接,释放资源。 


顺便说明,return是可以放在try语句块中的。但不管在什么时机返回,在返回前,finally将会执行。

参考文章:https://www.cnblogs.com/aspirant/p/6789040.html?utm_source=itdadao&utm_medium=referral



2、Java中ArrayList和LinkedList区别

LinkedList简介

LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,能对它进行队列操作。
LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。

LinkedList 是非同步的。


ArrayList和LinkedList的大致区别如下:

1)、ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2)、对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3)、对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。




3、synchronized锁住的是代码还是对象

在Java中,synchronized关键字是用来控制线程同步的,就是在多线程的环境下,控制synchronized代码段不被多个线程同时执行。synchronized既可以加在一段代码上,也可以加在方法上。

关键是,不要认为给方法或者代码段加上synchronized就万事大吉。


实际上,synchronized(this)以及非static的synchronized方法(至于static synchronized方法请往下看),只能防止多个线程同时执行同一个对象的同步代码段。

回到本文的题目上:synchronized锁住的是代码还是对象。答案是:synchronized锁住的是括号里的对象,而不是代码。对于非static的synchronized方法,锁的就是对象本身也就是this。

当synchronized锁住一个对象后,别的线程如果也想拿到这个对象的锁,就必须等待这个线程执行完成释放锁,才能再次给对象加锁,这样才达到线程同步的目的。即使两个不同的代码段,都要锁同一个对象,那么这两个代码段也不能在多线程环境下同时运行。

所以我们在用synchronized关键字的时候,能缩小代码段的范围就尽量缩小,能在代码段上加同步就不要再整个方法上加同步。这叫减小锁的粒度,使代码更大程度的并发。原因是基于以上的思想,锁的代码段太长了,别的线程是不是要等很久,等的花儿都谢了。

 比较多的做法是让synchronized锁这个类对应的Class对象。

class Sync {

    public void test() {
        synchronized (Sync.class) {
            System.out.println("test开始..");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("test结束..");
        }
    }
}

class MyThread extends Thread {

    public void run() {
        Sync sync = new Sync();
        sync.test();
    }
}

public class Main {

    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            Thread thread = new MyThread();
            thread.start();
        }
    }
}

运行结果: test开始.. test结束.. test开始.. test结束.. test开始.. test结束..

上面代码用synchronized(Sync.class)实现了全局锁的效果。

static synchronized方法,static方法可以直接类名加方法名调用,方法中无法使用this,所以它锁的不是this,而是类的Class对象,所以,static synchronized方法也相当于全局锁,相当于锁住了代码段。


参考文章:https://www.cnblogs.com/QQParadise/articles/5059824.html


4、Java compareTo() 方法

compareTo() 方法用于将 Number 对象与方法的参数进行比较。可用于比较 Byte, Long, Integer等。

该方法用于两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较。

语法
public int compareTo( NumberSubClass referenceName )

参数
referenceName -- 可以是一个 Byte, Double, Integer, Float, Long 或 Short 类型的参数。
返回值
    如果指定的数与参数相等返回0。
    如果指定的数小于参数返回 -1。
    如果指定的数大于参数返回 1。


参考文章:http://www.runoob.com/java/number-compareto.html



5.Android Studio 安装 SVN客户端需要注意事项

 Android Studio 只能通过关联SVN客户端,需要特别注意的是安装SVN时必须安装command line 功能,只有安装带有 command line 功能的 SVN 客户端,AndroidStudio才能使用。安装SVN时需要用户自定义选择 command line ,默认是不会自动安装的。


参考文章:https://www.cnblogs.com/songmeng/p/4389446.html



































猜你喜欢

转载自blog.csdn.net/wt461290528/article/details/80912111
今日推荐