修饰符 | 说明 |
---|---|
private
|
私有的,在同一类内可见。
|
默认没写 | 在同一包(包括子类和非子类)内可见。默认不使用任何修饰符。 |
protected | 受保护的,对同一包内的类和所有子类可见。 |
public | 共有的,对所有类可见。 |
byte
[] src,dst;
A、dst=String.fromBytes(src,"GBK").getBytes("UTF-8")
B、dst=new String(src,"GBK").getBytes("UTF-8")
C、dst=new String("GBK",src).getBytes()
D、dst=String.encode(String.decode(src,"GBK")),"UTF-8" )
1
2
3
4
5
6
7
8
9
|
public
static
int
func (){
try
{
return
1;
}
catch
(Exception e){
return
2;
}finally{
return
3;
}
}
|
1
2
3
4
5
6
7
8
|
public
class
TestClass {
private
static
void
testMethod(){
System.out.println(
"testMethod"
);
}
public
static
void
main(String[] args) {
((TestClass)
null
).testMethod();
}
}
|
((TestClass)
null
).testMethod();
也可以写成TestClass t = null; t.testMethod();同样可以正确输出。null可以被强制转换成任意类型对象,虽然这个时候t被赋为了空,但这个“空对象”也是属于TestClass的,那么这个“空对象”也就可以去堆上的静态方法区调用testMethod()方法了。
1
2
3
4
|
public class OuterClass{
private float f=1.0f;
//插入代码到这里
}
|
A、class InnerClass{ public static float func(){return f;} }
B、abstract class InnerClass{ public abstract float func(){} }
C、static class InnerClass{ protected static float func(){return f;} }
D、public class InnerClass{ static float func(){return f;} }
Final修饰的方法可以被子类继承,但是不能被子类修改(重写)。
声明final方法的主要目的是防止该方法的内容被修改。
volatile修饰符,Volatile修饰的成员变量在每次被线程访问时,都强迫从共享内存中重读该成员变量的值。而且,当成员变量发生变化时,强迫线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。一个volatile对象引用可能是null。
StringBuilder类和StringBuffer之间的最大不同在于StringBuilder的方法不是线程安全的(不能同步访问)。
由于StringBuilder相较于StringBuffer有速度优势,所以多数情况下建议使用StringBuilder类。然而在应用程序要求线程安全的情况下,则必须使用StringBuffer类。
所有的异常类是从java.lang.Exception类继承的子类。
Exception类是Throwable类的子类。除了Exception类外,Throwable还有一个子类Error 。Error用来指示运行时环境发生的错误。层次关系如图:
检查性异常: 不处理编译不能通过
非检查性异常:不处理编译可以通过,如果有抛出直接抛到控制台。
运行时异常(RuntimeException): 继承自RuntimeException类的就是非检查性异常
非运行时异常: 就是检查性异常
下面的表中列出了Java的非检查性异常(RuntimeException)。
异常 | 描述 |
---|---|
ArithmeticException | 当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。 |
ArrayIndexOutOfBoundsException | 用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。 |
ArrayStoreException | 试图将错误类型的对象存储到一个对象数组时抛出的异常。 |
ClassCastException | 当试图将对象强制转换为不是实例的子类时,抛出该异常。 |
IllegalArgumentException | 抛出的异常表明向方法传递了一个不合法或不正确的参数。 |
IllegalMonitorStateException | 抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。 |
IllegalStateException | 在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。 |
IllegalThreadStateException | 线程没有处于请求操作所要求的适当状态时抛出的异常。 |
IndexOutOfBoundsException | 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。 |
NegativeArraySizeException | 如果应用程序试图创建大小为负的数组,则抛出该异常。 |
NullPointerException | 当应用程序试图在需要对象的地方使用 null 时,抛出该异常 |
NumberFormatException | 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。 |
SecurityException | 由安全管理器抛出的异常,指示存在安全侵犯。 |
StringIndexOutOfBoundsException | 此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。 |
UnsupportedOperationException | 当不支持请求的操作时,抛出该异常。 |
下面的表中列出了Java定义在java.lang包中的检查性异常类。
异常 | 描述 |
---|---|
ClassNotFoundException | 应用程序试图加载类时,找不到相应的类,抛出该异常。 |
CloneNotSupportedException | 当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。 |
IllegalAccessException | 拒绝访问一个类的时候,抛出该异常。 |
InstantiationException | 当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。 |
InterruptedException | 一个线程被另一个线程中断,抛出该异常。 |
NoSuchFieldException | 请求的变量不存在 |
NoSuchMethodException | 请求的方法不存在 |
A、通过 ClassLoader 寻找和装载 class 文件
B、解释字节码成为指令并执行,提供 class 文件的运行环境
C、进行运行期间垃圾回收
D、提供与硬件交互的平台
在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的。在jdk1.2之后,就出现许许多多非线程安全的类。 下面是这些线程安全的同步的类:
vector:比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
statck:堆栈类,继承了Vector
hashtable:比hashmap多了个线程安全
enumeration:枚举,相当于迭代器
除了这些之外,其他的都是非线程安全的类和接口。比如常用的ArrayList、HashMap都是线程不安全的。