java笔试题错题相关知识梳理(1)

        从7月下旬开始系统性学习JavaWeb相关知识,过去了三个月,现在开始投简历了,也陆续有笔试面试的通知,是时候把相关知识梳理一遍了

1.

public static void main(String[] args) {
   int num = 2;
   switch (num) {
   case 1:
        ++num;
   case 2:
        ++num;
   case 3:
        ++num;
   default:
        ++num;
   break;
   }
   System.out.println(num);
 }
}

遇到break才退出,没有则从选中的开始顺序执行,直到选完或者遇到break

没有对的选项的时候,如果定义了default则执行default

2.当你编译和运行下面的代码时,会出现下面选项中的哪种情况?

public class Pvf{
    static boolean Paddy;
    public static void main(String args[]){
        System.out.println(Paddy);
    }
}

类中声明的变量有默认值,boolean的默认值是false

java八种数据类型及默认值:byte(0) short(0) int(0) long(0L) float(0.0f) double(0.0D) boolean(false) char(null)

3.抽象和接口

(1)抽象类中的方法是可以有方法体的。JDK1.8之后,接口中的方法也可以有方法体,用default关键字修饰方法。

了解抽象类之前,先弄清楚抽象方法:抽象方法是一种特殊的方法:它只有声明,而没有具体的实现。抽象方法必须用abstract关键字进行修饰。如果一个类含有抽象方法,则称这个类为抽象类,抽象类必须在类前用abstract关键字修饰。

抽象类定义为“包含抽象方法的类”,但是后面发现如果一个类不包含抽象方法,只是用abstract修饰的话也是抽象类。但是我感觉这就没啥意义了,可它确实是抽象类没错

包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可以拥有成员变量和普通的成员方法。

1.抽象方法必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法),缺省情况下默认为public。2.抽象类不能用来创建对象;3.如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。

(2)接口中可以含有 变量和方法。但是要注意,接口中的变量会被隐式地指定为public static final变量(并且只能是public static final变量,用private修饰会报编译错误),而方法会被隐式地指定为public abstract方法且只能是public abstract方法(用其他关键字,比如private、protected、static、 final等修饰会报编译错误),并且接口中所有的方法不能有具体的实现,也就是说,接口中的方法必须都是抽象方法。

(3)抽象和接口的区别

抽象类可以提供成员方法(非抽象方法)的实现细节,而接口中只能存在public abstract 方法;

抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;

接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法;一个类只能继承一个抽象类,而一个类却可以实现多个接口。

4.

ConcurrentHashMap 使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。

hashmap并没有实现Conllection接口

public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable

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

SimpleDateFormat是线程不安全的

5.

如下的Java程序 
public class Test { 
     public static void main(String[] args) { 
     System.out.println(args[0]); 
     } 
} 
 若采用命令行“java Test one two three”调用,则程序输出的结果为:

这里javaTest是命令,所以输出的是one

6.

在Java语言中,标识符是以字母、下划线( _ )或美元符($)开头,由字母、数字、下划线( _ )或美元符($)组成的字符串。标识符区分大小写,长度没有限制。

在Java中,我们需要标识代码的很多元素,包括类名、方法、字段、变量、包名等。我们选择的名称就称为标识符,并且遵循以下规则:

(1)标识符不能是关键字或true、false、null。

(2)标识符可以包含字母、数字0-9下划线(_)或美元符号($)。

(3)标识符的第一个字符必须是字母、下划线(_)或美元符号($)。

(4)标识符是区别大小写的,并且没有规定最大长度。


java中NULL不是关键字

7.已知x >= y and y >= z 为真,那么x > z or y = z 值为

牛客上刷到的题,但是我觉得不太严谨,牛客上的说法是:

条件可以简单分析为数学不等式  x>=y>=z,那么x>z不一定为true

当x>z为true,后面的条件忽略,结果为真;

当x==z,x>z为fslae,继续判断后一个条件

    如果z==0,则y=z为false,结果为假;

    如果z!=0,则y=z为true,结果为真;

所以,最后的结果是不确定的。

这里就将y=z中的=看作赋值,但是看作赋值的话好歹or写成||吧,而且java中的判断应该是只支持boolean吧,0为假非0为真不是C/C++里的么,但是这题好歹告诉我们,审题要细

8.

java中是存在Vector的;List虽然是接口但是也算集合类型;

9.

调用Tread的sleep()方法释放cpu但是不会释放锁,调用wait()都释放;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值