- 什么是可变参数?
可变参数就是一个方法的参数数量不固定的参数,例子如下
public int sum(int... numbers) {
//inside the method a variable argument is similar to an array.
//number can be treated as if it is declared as int[] numbers;
int sum = 0;
for (int number: numbers) {
sum += number;
}
return sum;
}
public static void main(String[] args) {
VariableArgumentExamples example = new VariableArgumentExamples();
//3 Arguments
System.out.println(example.sum(1, 4, 5));//10
//4 Arguments
System.out.println(example.sum(1, 4, 5, 20));//30
//0 Arguments
System.out.println(example.sum());//0
}
- 什么是断言?
断言就是使用assert方法传入一个boolean为返回值的判别式,当返回值为true时程序继续执行,否则返回false,并且抛出AssertionError异常
private int computerSimpleInterest(int principal,float interest,int years){
assert(principal>0);
return 100;
}
- 何时使用断言?
断言不应该用于验证输入数据到一个public方法或命令行参数。IllegalArgumentException会是一个更好的选择。在public方法中,只用断言来检查它们根本不应该发生的情况。 - 什么是垃圾回收机制?
垃圾回收是java自动内存管理的另一种叫法,垃圾回收的目的是为了给程序提供更多的可用堆(heap)。jvm会删除堆上面不再被使用的对象。
使用一个例子来解释垃圾回收
void method(){
Calendar calendar = new GregorianCalendar(2000,10,30);
System.out.println(calendar);
}
第二行代码在堆上面创建了一个Calendar对象,第三行代码对其进行输出,但是当整个方法执行结束之后,该Calendar对象没有再被引用,jvm会认识到这一点,会从堆中进行删除,这就是所谓的垃圾回收。
- 什么时候运行垃圾回收?
1.堆可用内存不足
2.cpu空闲
垃圾回收的做法:可以调用System.gc()方法,这是一个请求,不是一个命令。
注意:当堆空间已满,但是有没有可以回收的对象的时候,会抛出OOM(OutOfMemoryException)
对象在被垃圾回收从堆上删除之前,会运行finalize()方法。这个过程是:第一次垃圾回收发现该对象不存在引用的情况,准备对他进行回收,但是会执行该对象的finalize()方法,第二次垃圾回收机制再发现该对象不存在引用的时候才会对该对象进行真正的回收。 - 什么是静态初始化器?
下面例子中的static{}之间的代码被称为静态代码初始化器,它只有在第一次加载类时运行,只有静态变量才可以在静态初始化器中进行访问,虽然创建了三个该类的实例,但是静态初始化器只运行一次
public class InitializerExamples {
static int count;
int i;
static{
//This is a static initializers. Run only when Class is first loaded.
//Only static variables can be accessed
System.out.println("Static Initializer");
//i = 6;//COMPILER ERROR
System.out.println("Count when Static Initializer is run is " + count);
}
public static void main(String[] args) {
InitializerExamples example = new InitializerExamples();
InitializerExamples example2 = new InitializerExamples();
InitializerExamples example3 = new InitializerExamples();
}
}
上面例子输出结果是:
Static Initializer
Count when
Static
Initializer is run is
0
- 什么是实例初始化器?
{}括号里面的就是实例初始化器,每次初始化实例的时候,实例初始化器中的代码都会执行。
public class InitializerExamples {
static int count;
int i;
{
//This is an instance initializers. Run every time an object is created.
//static and instance variables can be accessed
System.out.println("Instance Initializer");
i = 6;
count = count + 1;
System.out.println("Count when Instance Initializer is run is " + count);
}
public static void main(String[] args) {
InitializerExamples example = new InitializerExamples();
InitializerExamples example1 = new InitializerExamples();
InitializerExamples example2 = new InitializerExamples();
}
}
上面例子输出为:
Instance Initializer
Count when Instance Initializer is run is 1
Instance Initializer
Count when Instance Initializer is run is 2
Instance Initializer
Count when Instance Initializer is run is 3
网友评论