学习笔记——01

最近在学Java基础,遇到一些知识点,以前不知道的,做个笔记。温故知新。

1、Java是解释运行吗?
我们常说,Java是解释型语音,那么,说它是解释运行,对不对?其实不对。
(1)Java源代码经过Javac编译成 .class文件
(2).class文件经过JVM解释或编译运行
解释:.class文件经过JVM内嵌的解释器解析执行
编译:存在JIT编译器,会把经常运行的代码作为“热点代码”编译与本地平台相关的机器码,并进行各种层次的优化

2、解释执行和编译执行有何区别——类比一下,一个是同声传译,一个是放录音

3、Error:总是不可控制的(unchecked);经常用来用于表示系统错误或低层资源的错误

4、Exception:分为可检查异常和不检查异常
可检查异常:在源代码里必须显示的进行捕获处理,这是编译期检查的一部分
最常见的就是File和Json解析的时候,如果不进行对应的 try…catch处理,代码就会直接报错。
不检查异常:就是所谓的运行时异常,我们写了代码,就算有错,代码也不会检查,只有真正的运行起来,用到了,才会出现。如:NullPointerException、IndexOutOfBoundsException
示例代码:

ArrayList<String> arrayList = new ArrayList<>();

arrayList.add("111");
arrayList.add("222");
arrayList.add("333");

Log.e("demo", arrayList.get(8));

写这段代码,有明显错误,但是代码上没有任何提示,只有真的运行起来,才会报异常:

java.lang.IndexOutOfBoundsException: Invalid index 8, size is 3

5、有了异常,肯定就需要try…catch了。这里着重说一下finally。
在我们的认知中,有2个“常识”:1、遇到return,后面的代码不会执行;2、try…catch中的finally,是一定会走到的。那么,这2个情况在一起,会怎么样?

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.e("getReturnCode", getReturnCode());

    }

    private String getReturnCode() {

        try {

            return "100";

        } catch (Exception e) {

            return "200";

        } finally {
            return "300";
        }

    }

日志打印了:

07-23 11:08:35.678 21337-21337/com.chen.demo E/getReturnCode: 300

很明显,就算try中return了,finally,依旧会走到。不会存在“停止”

那么,是不是意味着:不管try中做什么,finally,一定会执行?

不对。一定的情况下,finally也不会走到。finally再厉害,也得在线程中执行,如果,我们可以在try中就关闭线程呢?
如下:

扫描二维码关注公众号,回复: 2525171 查看本文章
try {
    /**
    * 0:正常退出,程序正常执行结束退出
    * 1:是非正常退出,就是说无论程序正在执行与否,都退出
    */
    Log.e("demo", "try==01");
    System.exit(0);
    Log.e("demo", "try==02");
    } finally {
        Log.e("demo", "finally");
    }

运行后,日志是:

07-23 11:14:17.810 22495-22495/com.chen.demo E/demo: try==01

这样,finally就不会走到了。

不管上面代码中的System.exit中传0还是1,结果都一样。

猜你喜欢

转载自blog.csdn.net/u014620028/article/details/81164616
今日推荐