#线程
- sleep与 wait区别
- 线程的几种状态
- volatile与synchronized的区别
1.【使用层级】
volatile仅能使用在
变量级别;
synchronized则可以使用在变量、方法、和类级别的 2.【可见性与原子性】 volatile仅能实现变量的修改可见性,并不能保证原子性; synchronized则可以保证变量的修改可见性和原子性(因为synchronized有锁机制!) 3.【阻塞】 volatile不会造成线程的阻塞; synchronized可能会造成线程的阻塞。 (还是因为synchronized有锁机制!) 4.【优化】 volatile标记的变量不会被编译器优化; 但是volatile可以禁止重排序; synchronized标记的变量可以被编译器优化 ^^^^^^^^^^^^^^^^^^^^ ^^其他参考文章 ^^《Java多线程编程-(13)-从volatile和synchronized的底层实现原理看Java虚拟机对锁优化所做的努力》 ^^《既然synchronized是"万能"的,为什么还需要volatile呢?》 ^^Android(Java) | 如何使程序实现线程安全(拓展关键词:ThreadLocal、重排序、volatile/final)
#IO
#权限
- main 方法是 Java Application 程序执行的入口点,以下描述哪项是合法的()。
#继承、重载
- C++可以多重继承,但是Java中对于类而言,只有单继承,接口可以多继承。
- Java不能重载运算符,C++可以。
#接口与抽象类的区别
1 .【实现】 抽象类要被子类继承,接口要被类实现;
2 .【方法】 接口只能做方法声明, 声明的方法默认为公共抽象的; 抽象类中可以作方法声明, 也可以做具体的方法实现。
3 .【变量】 接口里定义的变量只能是公共的静态的不可变常量, 抽象类中的变量还可以是普通变量。 【同:两者都能有静态抽象内部类!!!】 【不过接口可以通过定义静态抽象内部类, 从而间接取用抽象类的所有特性,如实现具体的方法等; demo 如AIDL生成的接口中的 Stub类】
4 .抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高。 5 .接口是设计的结果,抽象类是重构的结果。 6 .抽象类主要用来抽象类别【抽象属性+行为】, 接口主要用来抽象功能【抽象行为】。
#题目
- 地址
A.vector是线程安全的ArrayList,在内存中占用连续的空间。 初始时有一个初始大小, 当数据条数大于这个初始大小后会重写分配一个更大的连续空间。 如果Vector定义为保存Object则可以存放任意类型, 无需事先知道!!!
B.选项说的情况就是我们自定义异常的情况, 我们可以用违例(Exception)来抛出一些并非错误的消息, 可以,并非错误的消息。 比如我自定义一个异常,若一个变量大于10就抛出一个异常, 这样就对应了B选项说的情况, 我用抛出异常说明这个变量大于10, 而不是用一个函数体(函数体内判断是否大于10,然后返回true或false)判断, 因为函数调用是入栈出栈,栈是在寄存器之下的速度最快,且占的空间少, 而自定义异常是存在堆中,肯定异常的内存开销大!
C选项是错误的,因为接口中不能声明变量,只有常量!接口中只有常量定义,没有变量声明。 接口中方法默认是abstract public, 所以在接口只写函数声明是符合语法规则。 但是变量默认是用public final static 修饰的, 意思它是静态常量,不是变量! 另外, 常量不管在接口中还是类中必须在声明时初始化。
D.子类可以访问父类受保护的成员 访问修饰符 访问范围 继承性 private 本类内部 不可继承 私有的 (default) 本类+同包 同包子类可以继承 默认的 protected 本类+同包+子类 可以继承 受保护的 public 公开 可以继承 公开的
参考
- 慕课网
- 极客时间