Java编程思想(五)

Java编程思想(五)

初始化与清理

在构造器中调用构造器
package com.summer0705;

public class Flower{
    int petalCount = 0;
    String s = "initial value";
    Flower(int petals){
        petalCount = petals;
        System.out.println("Constructor w/ String arg only,petalCount="+petalCount);
    }
    Flower(String ss){
        System.out.println("Constructor w/ String arg only,s="+ss);
        s = ss;
    }
    Flower(String s,int petals){
        this(petals);
        this.s = s;
        System.out.println("String&int args");
    }
    Flower(){
        this("hi",47);
        System.out.println("default constructor(no args)");
    }
    void printPetalCount(){
        System.out.println("petalCount="+petalCount+"   s="+s);
    }

    public static void main(String[] args) {
        Flower x = new Flower();
        x.printPetalCount();
    }
}

Static关键字

static方法就是没有this的方法,在static方法的内部不能调用非静态方法。

Java中禁止使用全局方法,但是在类中置入static方法就可以访问其他static方法与static域


清理:终结处理和垃圾回收

在C++中,对象一定会被销毁,而Java里的对象却不一定总是被垃圾回收

  • 对象可能不被垃圾回收
  • 垃圾回收并不等于“析构”
  • 垃圾回收只与内存有关

构造器初始化顺序
class Window{
    Window(int marker){
        System.out.println("Window("+marker+")");
    }
}
class House{
    Window w1 = new Window(1);
    House(){
        System.out.println("House");
        w3 = new Window(33);
    }
    Window w2 = new Window(2);

    void f(){
        System.out.println("f()");
    }

    Window w3 = new Window(3);
}

public class OrderOfInitialization {
    public static void main(String[] args) {
        House h =new House();
        h.f();
    }
}

静态数据的初始化
class Bowl{
    Bowl(int marker){
        System.out.println("Bowl("+marker+")");
    }
    void f1(int marker){
        System.out.println("f1("+marker+")");
    }
}

class Table{
    static Bowl bowl1 = new Bowl(1);
    Table(){
        System.out.println("Table()");
        bowl2.f1(1);
    }
    void f2(int marker){
        System.out.println("f2("+marker+")");
    }
    static Bowl bowl2 = new Bowl(2);
}

class Cupboard{
    Bowl bowl3 = new Bowl(3);
    static Bowl bowl4 = new Bowl(4);
    Cupboard(){
        System.out.println("Cupboard()");
        bowl4.f1(2);
    }
    void f3(int marker){
        System.out.println("f3("+marker+")");
    }
    static Bowl bowl5 = new Bowl(5);
}

public class StaticInitalization {
    public static void main(String[] args) {
        System.out.println("Creating new Cupboard()");
        new Cupboard();
        System.out.println("Creating new Cupboard()");
        new Cupboard();
        table.f2(1);
        cupboard.f3(1);
    }
    static Table table = new Table();
    static Cupboard cupboard = new Cupboard();
}


显示的静态初始化
class Cup{
    Cup(int marker){
        System.out.println("Cup("+marker+")");
    }
    void f(int marker){
        System.out.println("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("mian");
        Cups.cup1.f(99);
    }
    static Cups cups1 = new Cups();
    static Cups cups2 = new Cups();
}


可变参数列表
class A{}
public class VarArgs {
    static void printArray(Object[] args){
        for(Object obj:args)
            System.out.println(obj+" ");
        System.out.println();
    }

    public static void main(String[] args) {
        printArray(new Object[]{
                new Integer(47),new Float(3.14),new Double(11.11)
        });
        printArray(new Object[]{"one","two","three"});
        printArray(new Object[]{new A(),new A(),new A()});
    }
}

枚举类型简介

简单实例:

enum Spiciness{
    NOT,MILD,MEDIUM,HOT,FLAMMING
}

public class SimpleEnumUse {
    public static void main(String[] args) {
        Spiciness howHot = Spiciness.MEDIUM;
        System.out.println(howHot);
    }
}

枚举类型创建时还会加入一些有用的特性。

比如toString()方法,以及ordinal()方法用于表示某个特定enum常量的声明顺序,static values()方法,用来按照enum常量声明顺序产生这些常量构成的数组。

最好理解enum的方法是将其理解为一个类

switch与enum的结合
public class Burrito {
    Spiciness degree;
    public Burrito(Spiciness degree){this.degree = degree;}
    public void describe(){
        System.out.print("This burrito is ");
        switch (degree){
            case NOT:
                System.out.println("not spicy at all");
                break;
            case MILD:
            case MEDIUM:
                System.out.println("a little hot");
                break;
            case HOT:
            case FLAMMING:
            default:
                System.out.println("maybe too hot");
        }
    }

    public static void main(String[] args) {
        Burrito plain = new Burrito(Spiciness.NOT),
                greenChile = new Burrito(Spiciness.MEDIUM),
                jalapeno = new Burrito(Spiciness.HOT);
        plain.describe();
        greenChile.describe();
        jalapeno.describe();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值