[Java] try catch finally,try里有return,finally还执行么?.md
Condition 1: 如果try中没有异常且try中有return (执行顺序)
try ---- finally --- return
Condition 2: 如果try中有异常并且try中有return
try----catch---finally--- return
总之 finally 永远执行!
Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个return
try----catch---finally
try中有异常以后,根据java的异常机制先执行catch后执行finally,此时错误异常已经抛出,程序因异常而终止,所以你的return是不会执行的
Condition 4: 当 try和finally中都有return时,finally中的return会覆盖掉其它位置的return(多个return会报unreachable code,编译不会通过)。
Condition 5: 当finally中不存在return,而catch中存在return,但finally中要修改catch中return 的变量值时
int ret = 0;
try{
throw new Exception();
}
catch(Exception e)
{
ret = 1; return ret;
}
finally{
ret = 2;
}
最后返回值是1,因为return的值在执行finally之前已经确定下来了
#面向对象的六大原则
- 单一职责原则
所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。通俗的说,即一个类只负责一项职责,将一组相关性很高的函数、数据封装到一个类中。
- 开闭原则
对于扩展是开放的,这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。 对于修改是关闭的,对模块行为进行扩展时,不必改动模块的源代码。
通俗的说,尽量通过扩展的方式实现系统的升级维护和新功能添加,而不是通过修改已有的源代码。
- 里氏替换原则
使用“抽象(Abstraction)”和“多态(Polymorphism)”将设计中的静态结构改为动态结构,维持设计的封闭性。任何基类可以出现的地方,子类一定可以出现。
在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立。在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。
- 依赖倒置原则
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。 程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合(各个模块之间相互传递的参数声明为抽象类型,而不是声明为具体的实现类)。
- 接口隔离原则
一个类对另一个类的依赖应该建立在最小的接口上。其原则是将非常庞大的、臃肿的接口拆分成更小的更具体的接口。
- 迪米特原则
又叫作最少知识原则,就是说一个对象应当对其他对象有尽可能少的了解。 通俗地讲,一个类应该对自己需要耦合或调用的类知道得最少,不关心被耦合或调用的类的内部实现,只负责调用你提供的方法。
下面开始设计模式学习... #1. Singleton(单例模式)
作用:
保证在Java应用程序中,一个类Class只有一个实例存在。
好处:
由于单例模式在内存中只有一个实例,减少了内存开销。
单例模式可以避免对资源的多重占用,例如一个写文件时,由于只有一个实例存在内存中,避免对同一个资源文件的同时写操作。
单例模式可以再系统设置全局的访问点,优化和共享资源访问。
使用情况:
建立目录 数据库连接的单线程操作
某个需要被频繁访问的实例对象
##1.1 使用方法
第一种形式:
public class Singleton {
/* 持有私有静态实例,防止被引用,此处赋值为null,目的是实现延迟加载 */
private static Singleton instance = null;
/* 私有构造方法,防止被实例化 */
private Singleton() {
}
/* 懒汉式:第一次调用时初始Singleton,以后就不用再生成了
静态方法,创建实例 */
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
但是这有一个问题,不同步啊!在对据库对象进行的频繁读写操作时,不同步问题就大了。
第二种形式:
既然不同步那就给getInstance方法加个锁呗!我们知道使用synchronized关键字可以同步方法和同步代码块,所以:
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
或是
public static Singleton getInstance() {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
return instance;
}
获取Singleton实例:
Singleton.getInstance().方法()
##1.2android中的Singleton
软键盘管理的 InputMethodManager
源码(以下的源码都是5.1的):
205 public final class InputMethodManager {
//.........
211 static InputMethodManager sInstance;
//.........
619 public static InputMethodManager getInstance() {
620 synchronized (InputMethodManager.class) {
621 if (sInstance == null) {
622 IBinder b = ServiceManager.getService(Context.INPUT_METHOD_SERVICE);
623 IInputMethodManager service = IInputMethodManager.Stub.asInterface(b);
624 sInstance = new InputMethodManager(service, Looper.getMainLooper());
625 }
626 return sInstance;
627 }
628 }
使用的是第二种同步代码块的单例模式(可能涉及到多线程),类似的还有 AccessibilityManager(View获得点击、焦点、文字改变等事件的分发管理,对整个系统的调试、问题定位等) BluetoothOppManager等。
1、 告诉我关于你自己。
真正的问题:你以为你是谁?你到底为什离开了你以前的工作?
这个问题是个开放性问题,并没有明显的答案。回答这个问题完全取决于你自己,千万不要说的太过简单,也不要说的太啰嗦。
2、你为什么要申请这个职位?
真正的问题:你能做什么,我们需要你做什么? 你知道我们需要你做什么吗?
招聘经理其实真正想听到的是“我申请这个职位是因为我的技能、经验和动机是最适合这份工作的。”真正思考每一行的工作规范,总结出你的答案。在谈论他们的需求之前,先提到自己的能力。
3、你最大的优点是什么?
真正的问题:你真的了解自己?你知道我们的问题是什么呢?
尽量用简单的形容词来夸奖自己,最好有拿得出手的数据。
4、你最大的弱点是什么?
真正的问题:我是不是在考虑你?你会和别人一样遇见困难就逃跑么?
无论怎么说,千万不要给一个老套的答案。如果你被邀请参加面试,面试官可能在没有新的信息之前寻找你的弱点。
5、你能把什么样的技能和理念带到这家公司?
真正的问题:我们会从你这里得到什么?
不要太担心你应聘的公司会偷走你的想法。当然,这也是有可能发生的。没有一个人会喜欢一个守财奴,把自己的想法尽量的说出来。
6、你首选的管理风格是什么?
真正的问题:你愿意和我相处么?
老板其实想看到的是,你不仅能靠自己的力量,同时也能认识到工作场所的层次划分。
7、你从什么方面看出来你能在这里长时间的工作下去?
真正的问题:你在这是临时找一份工作还是希望长久的做下去? 多久你会需要一个新的挑战?
如果你真的不知道怎么回答,你可以试着说“你希望利用这个机会,在几年时间里在这个公司获得什么样的成功。”
8、你知道如何处理这个工作吗?
真正的问题:你喜欢的工作风格是什么?你需要我们承担什么?
记住,谈论观点之前先谈论你的计划。这个问题可能会给你一个机会来谈论你应聘这个职位所拥有的经验和技能,你实际上无法知道你一个还没有去的公司到底是如何运作的,所以不要乱了方寸侃侃而谈。
9、你在其他方面获得了什么样的成就?
真正的问题:你还有什么其他方面的成就? 这是我们需要的吗?
好消息!你刚刚获得暂时性吹嘘自己的小号,建议你对你的工作成果做一些总结。
10、你喜欢什么,你为什么不喜欢上一份工作?
真正的问题:你想要我们做什么?我们可以给你吗?
不要太愤怒的抨击一下你的前雇主,借机谈谈你真正不喜欢的几件事。只要你确保你的答案可以展示出你的勇气和强烈的职业道德,这是一个能够帮助你渡过难关的力量。
11、告诉我你在一个团队中的工作经历。
真正的问题:没有任何人能自己一个人完成所有的事情,对吧?
除非你想做隐士,或者看守灯塔,否则你可以把你与他人的合作能力进行评估。
12、你的同事怎么评价你呢?
真正的问题:你声音平静还是担心这个问题? 你是个自知之明的人吗?
没有人喜欢当讲述自己的缺点和个性的真相时心理不稳定的人。
13、你如何处理压力和失败?
真正的问题:当压力增加时,或者面对失败时,你会变成一个怪物吗?最好举一个好的例子?
每一项工作多少都是有点紧张的,所以不要假装自己生活在一个无忧无虑的世界里。最好给出你处理压力的步骤的具体例子。
14、你想要多少钱?
真正的问题:我们负担得起你吗? 你是物有所值吗?
这个问题永远是个最艰难的问题。在面试过程中应该你尽量的把这个问题拖到最后回答,谨慎行事。
15、让我看看你的创造力。
真正的问题:没有隐藏的议程——你的创意吗?
虽然你对这个问题会有能多话说,但是你可以选择一个最底层的表现自己创造力的方法。