java易错_Java 编程基础之易错题2

字符串的步可变性

String str = new String(“abc”),“abc”在内存中是怎么分配的? abc 在堆中 引用str在字符串常量池中

什么是字符串常量池? JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,这段内存被成为字符串常量池或者字符串字面量池

工作原理 当代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查,如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,然后将这个引用放入字符串常量池,并返回该引用。

Arrays.asList()

Arrays.asList(),其将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的内部类:

finally之坑

public static int func (){

try{

return 1;

}catch (Exception e){

return 2;

}finally{

return 3;

}

}

结果: 3 解释:

finally一定会执行的,有两种情况: 1.finally中有return语句,当try执行到return时会执行finally中的代码,其中有return 就直接返回了,如题,返回值为3. 2.finally中不含return语句,那么当执行到return时,它会被保存等待finally执行完毕后返回,这个时候无论finally内部如何改变这个值,都不会影响返回结果!如:

int i = 0 ;

int test(){

try {

return i;

} catch (Exception e) {

return -1;

}finally{

i++;

}

}

//output: 0

守护线程

将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自动结束。

swing 顶层容器

顶层容器包含JApplet、JDialog、JFrame和JWindow及其子类。

java.util.ArrayList里面的坑

List NumberList = new ArrayList();

NumberList.add(2);

NumberList.add(4);

NumberList.add(1);

NumberList.add(3);

NumberList.add(5);

for(int i =0;i

int v = NumberList.get(i);

if(v%2==0){

NumberList.remove(v);

}

}

System.out.println(NumberList);

结果: 会出现越界情况 解释: 这题主要考察两点: 1.ArrayList删除元素后,剩余元素会依次向前移动,因此下标一直在变,size()也会减小; 2.remove()方法调用的是remove(int index),而不是remove(Object o),因此删除的是index索引处的元素; 该题具体流程:1.i=0,v=2,remove(2)删除掉了元素1,因此NumberList剩余元素为【2,4,3,5】; 2.i=1,v=4,remove(4),此时线性表中只有四个元素,不可能删除索引为4的元素,因此会报数组下标越界异常。

Servlet中request域对象

request.getAttribute()方法返回request范围内存在的对象 request.getParameter()方法是获取http提交过来的数据。 getAttribute是返回对象,getParameter返回字符串。

Java强制类型转换

boolean类型不能和任何类型进行转换,会报出类型异常错误。

构造函数的修饰符

构造方法不能被子类继承,所以用final修饰没有意义。构造方法用于创建一个新的对象,不能作为类的静态方法,所以用static修饰没有意义。此外,Java语言不支持native或synchronized的构造方法。

逻辑或的短路逻辑

int i=0;

int j=0;

if((++i>0)||(++j>0))

{

//打印出i和j的值。

}

结果

i=1;j=0

解析: 考察的是短路逻辑的用法,即:当第一个逻辑表达式可以确定结果时,将不再进行剩余表达式的运算。

Java之枚举

enum AccountType

{

SAVING, FIXED, CURRENT;

private AccountType()

{

System.out.println(“It is a account type”);

}

}

class EnumOne

{

public static void main(String[]args)

{

System.out.println(AccountType.FIXED);

}

}

结果描述:

Compiles fine and output is prints”It is a account type”thrice followed by”FIXED”

解释: 枚举类有三个实例,故调用三次构造方法,打印三次It is a account type

replaceAll()之坑

public static void main (String[] args) {

String classFile = "com.jd.". replaceAll(".", "/") + "MyClass.class";

System.out.println(classFile);

}

结果

///MyClass.class

解释: 由于replaceAll方法的第一个参数是一个正则表达式,而"."在正则表达式中表示任何字符,所以会把前面字符串的所有字符都替换成"/"。如果想替换的只是".",那么久要写成"\.".

Statement接口及其子接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值