1. 请问如下代码的输出结果是什么?

 public class MethodTest {public static void main(String[] args) {String str = "6";test(str);System.out.println(str);}public static void test(String str){str += "10";}
}

A. 610          B. 6          C.16          D. 10
看运行结果:

这是因为在java 方法中都是值传递,String str = 6 的str和test方法中传的参数str根本就不是一个变量,形参str是在栈上新开辟了一块空间,指向了原str所指向的堆内存地址。后续的操作与原str根本没有关系。看下面的图就明白了。

2. 请问下面的程序在运行过程中创建了几个对象

public class MethodTest {public static void main(String[] args) {String str1 = new String("abc");String str2 = new String("abc");String str3 = new String("abcd");}
}

A. 3          B. 4          C.5          D. 6
正确答案是5个。程序在执行的时候都是从等号右边开始向等号左边执行的。也就是系统先读到"abc",会创建一个字符串对象,再读到new String(),又会在栈上开辟一块空间创建一个对象。第二行,先读到"abc",此时由于第一行已经在常量池中产生了一个"abc"对象,故不再产生对象,再次new,又创建一个对象,第三行,在常量池创建“abcd”对象,再new。一共创建5个对象。
3. 请说出下列程序的执行结果

    public class MethodTest {public static void main(String[] args) {String str1 = "abc";String str2 = "ab";String str3 = "c";String str4 = str2 + str3;String str5 = str2 + str3;String str6 = new String("abc");String str7 = str2 + "C";String str8 = "ab" + "c";System.out.println(str1 == str6);System.out.println(str1 == str4); System.out.println(str4 == str5); System.out.println(str1 == str7); System.out.println(str1 == str8); }}


字符串拼接,其实是StringBuilder的append操作
最后要把StringBuilder再返回成String,返回时用StringBuilder的toString()方法,此方法返回了一个new对象
字符串拼接时,只有纯常量的"+“不会转为StringBuilder
直接在常量池内寻找是否存在已有值
否则,只要存在一个字符串变量的”+",都会转为StringBuilder调用append
4. 求以下代码的输出结果

public class MethodTest {public static void main(String[] args) {System.out.println(test());}public static int test(){int i = 0;try{i = 1;return i;}catch(Exception e){i = 2;return i;}finally{i = 3;}}
}

答案为1。异常体系中,若finally代码块中存在return语句,则try…catch语句失效。
若finally无return,try…catch有return语句,则try…catch代码块先暂存代码块中的值,然后执行finally代码块,最后返回暂存值。

5. 读程序写结果

// 假设thread1一定先启动
class Task implements Runnable{@Overridepublic void run() {if(Thread.currentThread().getName().equals("A")){testA();}else{testB();}}// synchronized作用于普通成员方法,锁的是当前对象private synchronized void testA(){System.out.println("A");//testB(); 若将这句释放掉注释,则会输出B,因为虽然A拿到了锁,调用B的仍然是线程A,B发现持有锁的线程就是他自己,自然能执行while(true){}}private synchronized void testB(){System.out.println("B");}
}
public class MethodTest{public static void main(String[] args) throws InterruptedException {Task task = new Task();Thread thread1 = new Thread(task,"A");Thread thread2 = new Thread(task,"B");thread1.start();thread2.start();}
}

输出为A。因为synchronized在修饰方法时,相当于锁的是当前对象,只有一个对象,被A拿到了,A在死循环,B就拿不到。

String,异常捕获,多线程中最容易出错的几道选择题相关推荐

  1. promise 中的异常捕获_promise 中的错误处理

    js 中的错误处理. 分为三块吧. 第一:普通的js中 错误处理. 第二: promise 中的错误处理 第三: async 中的错误处理 第一: 普通的js 的错误处理 说普通是因为比较简单,算一个 ...

  2. php mysql异常捕获_PHP中try{}catch{}的用法及异常处理.对数据库的事物支持

    try 只有抛出异常才能被catch捕获 public  function test1() { Db::startTrans(); // 事务 try{ // 第1条数据更新id 18 $a=Db:: ...

  3. 《SpringBoot从菜鸟到老鸟》之SpringBoot 如何配置全局的异常捕获

    SpringBoot 如何配置全局的异常捕获 SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化. 所以这篇文章来讲解SpringBoot钟自定义全局异常捕获. 主要讲 ...

  4. java报错空指针异常_springboot全局异常捕获,真香

    全局异常捕获 什么是异常?程序在启动或者运行时没有按照预期的执行,在执行途中发生某种未知的错误,导致程序非正常停止或者报错. 在我们的程序中,肯定会伴随着很多的异常,启动时:空对象.找不到数据库.用户 ...

  5. java runnable 异常_详解Java中多线程异常捕获Runnable的实现

    详解Java中多线程异常捕获Runnable的实现 1.背景: Java 多线程异常不向主线程抛,自己处理,外部捕获不了异常.所以要实现主线程对子线程异常的捕获. 2.工具: 实现Runnable接口 ...

  6. java runnable 异常_Java实现多线程异常捕获Runnable的案例

    这篇文章主要介绍了详解Java中多线程异常捕获Runnable的实现的相关资料,希望通过本文能帮助到大家,让大家理解掌握这样的知识,需要的朋友可以参考下 详解Java中多线程异常捕获Runnable的 ...

  7. 五、Java中常用的API(通过包进行分类)————异常、多线程和Lambda表达式

    之前已经介绍了java.lang包下的相关类,今天将要补充两个常用的API:java.lang.Throwable和java.lang.Thread 一.异常(java.lang.Throwable) ...

  8. 前端开发中的Error以及异常捕获

    本文首发于公众号:符合预期的CoyPan 写在前面 在前端项目中,由于JavaScript本身是一个弱类型语言,加上浏览器环境的复杂性,网络问题等等,很容易发生错误.做好网页错误监控,不断优化代码,提 ...

  9. python中异常的处理及断言,包括异常类型、异常捕获、主动跑出异常和断言

    一.异常类型介绍 什么是异常?异常即是一个事件,该事件会在程序执行过程中发生,会影响程序的正常执行,一般情况下,在python无法正常处理程序时就会发生一个异常.异常是python对象,表示一个错误. ...

最新文章

  1. swift 组件化_京东商城订单模块基于 Swift 的改造方案与实践
  2. ping 攻击 Linux,Linux 环境实现ping攻击
  3. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第一题:填算式
  4. st link v2引脚连接_ST-Link资料02_ST-Link固件介绍,及固件命名规则
  5. 土木计算机2级,请教各位,我是学土木的,考计算机二级的哪个比较好?
  6. C++智能指针中unique_ptr部分内容的讲解
  7. jQuery心得5--jQuery深入了解串讲1
  8. fastreport oracle,如何从FastReport .NET报表设计器连接到OracleDB数据库
  9. win10本机计算机策略,[本地策略组怎么打开]win10本地组策略打开方法
  10. oracle 判断是否复数,第 14 章 使用复数运算库
  11. .less为后缀的文件是什么
  12. android 带刻度的滑动条_Android自定义滑动刻度尺
  13. webstorm2020.2.3下载安装教程
  14. WEB学习路线2020完整版+附视频教程
  15. ABAP 创建及修改采购申请
  16. centos下载安装软件总结
  17. 电子价签带来的竞争优势
  18. 申请CSC公派访问学者的常见问题
  19. 胜为蓝牙适配器驱动_胜为蓝牙适配器驱动
  20. 华为OD机试真题Python实现【竖直四子棋】真题+解题思路+代码(20222023)

热门文章

  1. linux c 字节对齐申请内存与字节对齐数组声明
  2. 给请求指点迷津的准新生说两句
  3. DSOD: Learning Deeply Supervised Object Detectors from Scratch论文理解
  4. Improvements to Target-Based 3D LiDAR to Camera Calibration
  5. 截取字符串后几位 php,字符串截取的几种办法(php,js,css三种)
  6. 如何在EXCEL中的度分秒格式的经纬度转换成度格式的数据
  7. 机器学习 Logistic回归
  8. windows (win10 ) NTP服务器搭建方法/步骤
  9. 【开源】物联网智慧消防云平台系统,前后端分离,微服务框架带文档,源码分享
  10. Android人脸识别(已开源)