###1
//: Main.java
/**
* String初始化
*/
class Test {
String s;
}
class Main {
public static void main(String[] args) {
Test t = new Test();
System.out.println("s = " + t.s);
}
}
/**
* Output:
s = null
*///:~
###2
初始化效果相同, 成员变量定义初始化定义时确定, 构造初始化构造时确定.
//: Main.java
/**
* 初始化
*/
class Test {
String s1;
String s2 = "haha";
String s3;
Test () {
s3 = "hehe";
}
}
class Main {
public static void main(String[] args) {
Test t = new Test();
System.out.println("s1 = " + t.s1);
System.out.println("s2 = " + t.s2);
System.out.println("s3 = " + t.s3); }
}
/**
* Output:
s1 = null
s2 = haha
s3 = hehe
*///:~
###3
//: Main.java
/**
* 默认构造器
*/
class Test {
Test () {
System.out.println("This is Test");
}
}
class Main {
public static void main(String[] args) {
Test t = new Test();
}
}
/**
* Output:
This is Test
*///:~
###4
//: Main.java
/**
* 默认构造器
*/
class Test {
Test () {
System.out.println("This is Test");
}
Test (String s) {
System.out.println("Test : " + s);
}
}
class Main {
public static void main(String[] args) {
Test t = new Test("Hello");
}
}
/**
* Output:
Test : Hello
*///:~
###5
//: Main.java
/**
* 构造器重载
*/
class Dog {
Dog() {
System.out.println("Wang! Wang! Wang!");
}
Dog(String s) {
System.out.println("Barking!");
}
Dog(int i) {
System.out.println("Howling!");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
Dog d2 = new Dog("Hello");
Dog d3 = new Dog(1);
}
}
/**
* Output:
Wang! Wang! Wang!
Barking!
Howling!
*///:~
###6
//: Main.java
/**
* 构造器重载-参数顺序不同
*/
class Dog {
Dog() {
System.out.println("Wang! Wang! Wang!");
}
Dog(String s, int i) {
System.out.println("Barking!");
}
Dog(int i, String s) {
System.out.println("Howling!");
}
}
class Main {
public static void main(String[] args) {
Dog d1 = new Dog();
Dog d2 = new Dog("Hello", 1);
Dog d3 = new Dog(1, "Hello");
}
}
/**
* Output:
Wang! Wang! Wang!
Barking!
Howling!
*///:~
###7
//: Main.java
/**
* 默认构造器
*/
class Test {
String s = "Hello World";
}
class Main {
public static void main(String[] args) {
Test t = new Test();
System.out.println(t.s);
}
}
/**
* Output:
Hello World
*///:~
###8
//: Main.java
/**
* 默认构造器
*/
class Test {
private void method1() {
System.out.println("This is method 1.");
}
public void method2() {
method1();
this.method1();
}
}
class Main {
public static void main(String[] args) {
Test t = new Test();
t.method2();
}
}
/**
* Output:
This is method 1.
This is method 1.
*///:~
###9
//: Main.java
/**
* 默认构造器
*/
class Test {
Test (int t) {
System.out.println("This is " + t);
}
Test (String s, int t) {
this(t);
System.out.println("This is " + s);
}
}
class Main {
public static void main(String[] args) {
Test t = new Test("Hello", 42);
}
}
/**
* Output:
This is 42
This is Hello
*///:~
###10&11
finalize()被调用的条件, (1)类未被调用(置null), (2)调用System.gc().
注意: Java1.6以下可以, 1.8不可以.
//: Main.java
/**
* 垃圾回收
* 注意: Java环境1.6可以, 1.8不可以, 垃圾回收机制改变.
*/
class Test {
@Override
protected void finalize(){
System.out.println("finalize");
// super.finalize();
}
}
class Main {
public static void main(String[] args) {
Test t = new Test();
t = null; // 确保finalize()会被调用
System.gc();
}
}
/**
* Output:
finalize
*///:~
###12
清理对象时, 会调用finalize()函数, 并且会保留存储数据, 如T2;
在清理对象时, 会入栈出栈, 先入后清理, 后入先清理.
//: Main.java
/**
* 垃圾回收
* 注意: Java环境1.6可以, 1.8不可以, 垃圾回收机制改变.
*/
class Tank {
boolean isFull = false;
String name;
Tank(String name) {
this.name = name;
}
void setEmpty() {
isFull = false;
}
void setFull() {
isFull = true;
}
@Override
protected void finalize(){
if (!isFull) {
System.out.println(name + ": 清理");
}
// super.finalize();
}
}
class Main {
public static void main(String[] args) {
Tank t1 = new Tank("T1");
Tank t2 = new Tank("T2");
Tank t3 = new Tank("T3");
t1.setFull();
t2.setEmpty();
t1 = null;
t2 = null;
t3 = null;
System.gc();
}
}
/**
* Output:
T3: 清理
T2: 清理
*///:~
###13
//: ExplicitStatic.java
/**
* 显示静态初始化
* 静态初始化在首次调用类时执行
*
* Created by C.L.Wang on 15/7/27.
*/
class Cup {
Cup(int marker) {
System.out.println("Cup(" + marker + ")");
}
void f(int marker) {
System.out.print("f(" + marker + ")");
}
}
class Cups {
static Cup cup1;
static Cup cup2;
static {
cup1 = new Cup(1);
cup2 = new Cup(2);
}
Cups() {
System.out.println("Cups()");
}
}
public class ExplicitStatic {
public static void main(String[] args) {
System.out.println("Inside main()");
Cups.cup1.f(99);
}
}
/**
* Output:
Inside main()
Cup(1)
Cup(2)
f(99)
*
*///:~
###14
//: StaticInitialization.java
/**
* 定义初始化和静态块初始化
*
* Created by C.L.Wang on 15/7/27.
*/
class Something {
String str;
Something(String str) {
this.str = str;
System.out.println("Something is " + str);
}
@Override
public String toString() {
return str;
}
}
class Girl {
static Something name = new Something("Caroline");
static Something favor;
static {
favor = new Something("Dolls");
}
@Override
public String toString() {
return name + " loves " + favor + ".";
}
}
public class StaticInitialization {
public static void main(String[] args) {
Girl girl = new Girl();
System.out.println(girl);
}
}
###15
//: StaticInitialization.java
/**
* 非静态示例初始化, 为了支持匿名内部类.
*
* Created by C.L.Wang on 15/7/27.
*/
class Something {
String str;
Something(String str) {
this.str = str;
System.out.println("Something is " + str);
}
@Override
public String toString() {
return str;
}
}
class Girl {
Something name;
Something favor;
{
name = new Something("Caroline");
favor = new Something("Dolls");
}
@Override
public String toString() {
return name + " loves " + favor + ".";
}
}
public class StaticInitialization {
public static void main(String[] args) {
Girl girl = new Girl();
System.out.println(girl);
}
}
/**
* Output:
Something is Caroline
Something is Dolls
Caroline loves Dolls.
*///:~
###16
//: StringArray.java
import java.util.Arrays;
/**
* String 数组
*
* Created by C.L.Wang on 15/7/27.
*/
public class StringArray {
public static void main(String[] args) {
int num = 5;
String[] sa = new String[num];
for (int i=0; i<num; ++i) {
sa[i] = "Girl[" + i + "]";
}
System.out.println(Arrays.toString(sa));
}
}
/**
* Output:
[Girl[0], Girl[1], Girl[2], Girl[3], Girl[4]]
*/
###17&18
//: StringArray.java
import java.util.Arrays;
/**
* String类型数组初始化
*
* Created by C.L.Wang on 15/7/27.
*/
class StringExample {
String str;
StringExample(String str) {
this.str = str;
System.out.println("para = " + str);
}
@Override
public String toString() {
return str;
}
}
public class StringArray {
public static void main(String[] args) {
int num = 5;
StringExample[] sea = new StringExample[5];
System.out.println(Arrays.toString(sea));
for (int i=0; i<num; ++i) {
sea[i] = new StringExample("Girl[" + i + "]");
}
System.out.println(Arrays.toString(sea));
}
}
/**
* Output:
[null, null, null, null, null]
para = Girl[0]
para = Girl[1]
para = Girl[2]
para = Girl[3]
para = Girl[4]
[Girl[0], Girl[1], Girl[2], Girl[3], Girl[4]]
*/
###19
//: VariableArguments.java
/**
* 可变参数
* <p/>
* Created by Wang on 15/7/30.
*/
public class VariableArguments {
public VariableArguments(String... strs) {
for (String s : strs) {
System.out.print(s + " ");
}
System.out.println();
}
public static void main(String[] args) {
new VariableArguments("Hello", "World", "Kitty");
new VariableArguments(new String[]{"Haha", "Hehe", "Heihei"});
}
}
/**
* Output:
Hello World Kitty
Haha Hehe Heihei
*/
###20
//: OtherMain.java
/**
* 测试main的可变参数形式
* Created by wang on 15/7/30.
*/
public class OtherMain {
public static void main(String... args) {
for (String s : args) {
System.out.print(s + " ");
}
System.out.println();
}
}
/**
* Output:
* haha ahah haah ahha
*///:~
###21&22
//: TestEnum.java
/**
* 练习使用Enum, values(), ordinal(), switch
* Created by wang on 15/7/30.
*/
public class TestEnum {
private enum Money {
HUNDRED, FIFTY, TWENTY, TEN, FIVE, TWO, ONE
}
public static void main(String[] args) {
for (Money m : Money.values()) {
System.out.print(m + ":" + m.ordinal() + " ");
switch (m) {
case HUNDRED:
System.out.println("$" + 100);
break;
case FIFTY:
System.out.println("$" + 50);
break;
case TWENTY:
System.out.println("$" + 20);
break;
case TEN:
System.out.println("$" + 10);
break;
case FIVE:
System.out.println("$" + 5);
break;
case TWO:
System.out.println("$" + 2);
break;
case ONE:
System.out.println("$" + 1);
break;
default:
break;
}
}
System.out.println();
}
}
/**
* Output:
HUNDRED:0 $100
FIFTY:1 $50
TWENTY:2 $20
TEN:3 $10
FIVE:4 $5
TWO:5 $2
ONE:6 $1
*///:~