《java解惑》笔记六

第二十一题:我的类是什么?

public static void main(String[] args) {
        System.out.println(Me.class.getName().replaceAll("\\.", File.separator)+"class");
    }

这个程序在我的机子上报错,提示非法参数异常: character to be escaped is missing(要转义的字符丢失),原因是因为我的OS是Windows,在Windows上File.separator会转为反斜杠\,是转义字符的开始,后面缺失字符,报错。在java中 String str = “\”;是不能通过编译的。解决方法可以使用replace方法,它的两个参数是字符序列CharSequence,查看源码可以看到已经使用了Matcher.quoteReplacement()处理过了第二个参数,与书上第一个解决方法一致。

public String replace(CharSequence target, CharSequence replacement) {
        return Pattern.compile(target.toString(), Pattern.LITERAL).matcher(
                this).replaceAll(Matcher.quoteReplacement(replacement.toString()));
    }

第二十二题:URL的愚弄

public static void main(String[] args) {
        System.out.println("iexplore");
        http://www.geogle.com
        System.out.println(":maximize");        
    }

上面的代码是可以运行的,http:是一个标号,常用在双重循环中,用于break或continue跳转。//代表行注释。
标号可以出现在任何语句前面,但如上面代码所示,没什么用处。所以得到的经验教训是:令人误解的注释和无关代码会引起混乱,要仔细写注释,不要写令人误解的代码。

第二十三题:不劳而获

public static void main(String[] args) {
        StringBuffer word = null;
        switch (rnd.nextInt(2)) {
            case 1: word = new StringBuffer('P');
            case 2: word = new StringBuffer('G');
            default: word = new StringBuffer('M');
        }
        word.append('a');
        word.append('i');
        word.append('n');
        System.out.println(word);
    }

上面的代码始终输出ain,代码有3个bug。
1.首先是使用nextInt(n)会产生0到n-1之间的随机整数,所以case:2这条语句不会直接跳到这执行;
2.第二个是没有break,这是学习switch初学者经常犯得错误,没有break,程序会从跳转的那个case一直往下执行;
3.第三个,也是最重要的那个,StringBuffer没有StringBuffer(char ch)这个构造函数,上面的代码只是调用了StringBuffer(int capacity)这个构造函数,将char解析为int为StringBuffer的容量,实际内容为空,最后添加a,i,n三个字符,也只会输出这三个字符。

第二十四题:尽情享受每一个字节

public static void main(String[] args) {
        for(byte b = Byte.MIN_VALUE; b < Byte.MAX_VALUE ; b++) {
            if(b == 0x90)
                System.out.println("Joy!");
        }
    }

byte为8字节,是有符号的,从-128到127.0x90是16进制的int数字,转为10进制是144,不在byte的范围,当byte与int比较时,会将byte提升到int,会用符号位填充,但是提升后也只是整型的-128到127,然后比较,所以最后没有任何结果输出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aabond

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值