练习2:创建一个类,它包含一个在定义时就被初始化了的String域,以及另一个通过构造器初始化的String域。这两种方式有何差异?
s1初始化了1次。s2初始化了2次。
this关键字
this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。如果在方法内部调用同一个类的另一个方法,就不必用this。
Eg:书上的例子
class Person{
public void eat(Apple apple){
Apple peeled = apple.getPeeled();
System.out.println("yummy");
}
}
class Peeler{
static Apple peel(Apple apple){
return apple;
}
}
class Apple{
Apple getPeeled(){
return Peeler.peel(this);}
}
public class PassingThis{
public static void main(String[] args){
new Person().eat(new Apple());
}
}
最开始浪费了许多的时间也没看懂它的意思,现在应该可以了~
首先3个类,Person,Peeler,Apple。人要吃苹果,所以在Person中加入eat(),当然吃的苹果是要削过的,所以传入形参apple,这个apple要做处理需要Apple中的getPeeled(),而这个函数调用了Peeler类中的peel(),而peel()的形参恰好是apple,所以直接用this代替(this是调用了getPeeled()的apple对象的引用)
PS:其实原来削苹果不需要再另写一个类Peeler,直接在getPeeled()方法中进行操作,return this;即可。但是可能因为该外部方法要应用于许多不同的类,而不想重复代码,所以单独写了一个Peeler类。
import java.util.*;//主要了解一下随机数的产生
public class ArrayNew{
public static void main(String args[]){
int[] a;
Random rand = new Random();
a = new int[rand.nextInt(20)];
for(int i=0;i<a.length;i++)
a[i]=rand.nextInt(500);
System.out.println("length of a = "+a.length);
System.out.println(Arrays.toString(a));
}
}//Random(int seed);不是很懂,再找点资料查一下。
可变参数列表:
Eg:(书上)
public class NewVarArgs{
static void printArray(Object... args){
for(Object obj:args)
System.out.print(obj+" ");
System.out.println();
}
public static void main(String[] args){
printArray("one","two","three","four");
}
}
enum:
PS:主要知道两个方法,ordinal(), values()