Head First Java 十大遗珠之憾

十大遗珠之憾

10 位操作

  • byte有8位,short有16位,int有32位

  • 按位非运算符:~
    0变1,1变0
    int x = 10;//位组合00001010
    x = ~x;//位组合11110101

  • 按位与运算符:&
    两个位都为1,结果才为1
    int x = 10;//位组合00001010
    int y = 6;//位组合00000110
    int a = x & y;//位组合00000010

  • 按位或运算符:|
    两个位都为0,结果才为0
    int x = 10;//位组合00001010
    int y = 6;//位组合00000110
    int a = x | y;//位组合00001110

  • 按位异或运算符:^
    两个位相同为0,不相同为1
    int x = 10;//位组合00001010
    int y = 6;//位组合00000110
    int a = x ^ y;//位组合00001100

  • 负数的二进制:
    负数的二进制位组合等于正数的二进制位组合非运算后加1
    int x = 11;//位组合00001011
    int y = -11;//位组合11110101

  • 左移运算符:
    各二进位全部左移若干位,高位丢弃,低位补0,正负号可能改变
    int x = -11;//位组合11110101
    int y = x << 2;//位组合11010100

  • 算术右移运算符:
    各二进位全部右移若干位,对无符号数,高位补0,有符号数补符号位,正负号不变
    int x = -11;//位组合11110101
    int y = x >> 2;//位组合11111101

  • 逻辑右移运算符(无符号右移运算符):
    各二进位全部右移若干位,对无符号数,高位补0,有符号数,高位也补0
    int x = -11;//位组合11110101
    int y = x >>> 2;//位组合00111101

9 不变性

  • String和包装类有具有不变性,对象创建后就无法改变该对象的值

8 断言

  • 断言用来帮助你在开发过程中除错,使用方式和println()差不多
    assert (height > 0);
    // if true, program continues normally
    // if false, throw an AssertionError
    也可以利用断言加上一点信息:
    assert (height > 0) : “height = “ + height + “ weight = “ + weight;
    带有断言的编译(没有什么不一样):
    javac TestDriveGame.java
    带有断言的执行:
    java -ea TestDriveGame

7 块区域

  • 局部变量的生命周期范围只限于声明它的方法还呆在栈上的期间内,但有一种变量比局部变量生命周期更短,那就是在块区域{}内的块变量,例如for,while,if里的变量,使用块变量比使用局部变量更方便除错,且扩充性更好

6 链接的调用

StringBuffer sb = new StringBuffer(“spring”);
sb = sb.delete(3,6).insert(2,”umme”).deleteCharAt(1);
System.out.println(“sb = “ + sb);
// result is sb = summer
等同于:
sb = sb.delete(3,6);
sb = sb.insert(2,”umme”);
sb = sb.deleteCharAt(1);

5 Anonymous和Static Nested Classes

  • 嵌套类(nested classes)和内部类(inner classes)的区别:任何一个被定义在另一个类范围内的类都称为嵌套类,不管它是匿名、静态、正常或其他类型。但非静态的嵌套类我们一般称之为内部类。所以基本上所有内部类都是嵌套类,但不是所有嵌套类都是内部类

  • 静态嵌套类
    静态嵌套很像一般非嵌套,他们没有与外层对象产生任何特殊关联。但因为还被认为是外层的一个成员,所以能够存取任何外层的私用成员,当然只限于是静态的,这是因为静态没有实例

public class FooOuter {
    static class BarInner {
        void sayIt() {
            System.out.println(“method of a static inner class”);
        }
    }
}

class Test {
    public static void main(String[] args) {
        FooOuter.BarInner foo = new FooOuter.BarInner();
        foo.sayIt();
    }
}
  • 匿名内部类
import java.awt.event.*;
import javax.swing.*;
public class TestAnon {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        JButton button = new JButton(“click”);
        frame.getContentPane().add(button);
        // button.addActionListener(quitListener);
        //此处的ActionListener其实是一个接口,而我们不能创建接口的实例!但这种情况的语法就是这样
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent ev) {
                System.exit(0);
            }
        }) 
    }
}

4 存取权限和存取修饰符(谁可以看到什么)

  • public 代表任何代码都可以存取。一般用来修饰类、常量(static final variables)、对外方法(getter,setter)、大部分构造函数
  • private 代表只有同一类中的代码才能存取,它是对类而不是对对象设限。一般用来修饰大部分实例变量,以及不想被外部调用的方法
  • default 只有同一包中的默认事物才能存取。如果被default修饰(就是不修饰)就代表只有同一个包内的代码才能存取被修饰的事物,不能存取意味着你连用都不能用到相关的代码。如果一个类被default修饰,那么类中的方法即使是被public修饰,它也不能被包外的代码使用
  • protected 基本等同于default,只有一个地方不一样,被default修饰的事物允许包外的子类通过继承来获得它的功能。例如包外有一个子类有对父类的引用,父类里面有一个被protected修饰的方法,那子类是不能直接用父类的引用调用这个方法的,唯一的方法就是继承父类从而得到方法

3 String和StringBuilder的方法

  • 常用的类是String和StringBuilder(因为String有不变性,使用StringBuilder操作String会更有效率,更省空间)

  • String和StringBuilder都有的方法:
    char charAt(int index);//获取指定位置的字符
    int length();
    String substring(int start,int end);//取出指定片段的字符串
    String toString();

  • 连接字符串方法:
    String concat(String str);//String的方法
    String append(String str);//Stringbuilder的方法

  • String的方法:
    String replace(char old,char new);//替换所有old字符为new字符
    char[] toCharArray();
    String toLowerCase();//全部小写
    String toUpperCase();
    String trim();//去除首尾空格
    static String valueOf(char[] data);//转化为字符串
    static String valueOf(int i);

  • StringBuilder的方法:
    StringBuilder delete(int start,int end);
    StringBuilder insert(int offset,String str);
    StringBuilder replace(int start, int end, String str);
    StringBuilder reverse();
    void setCharAt (int index,char ch);

2 多维数组

  • 在Java中如果你创建了一个4*2的数组,这个数组实际上由5个数组组成,例如
    int[][] a =new int[][]{{1,2},{3,4},{5,6},{7,8}};

  • 操作多维数组
    存取第三个数组的第二个元素:int x = a[2][1];
    对某个子数组创建引用:int[] copy = a[1];
    初始化2*3数组:int[][] x = {{2,3,4},{5,6,7}};
    创建非常规数组:int[][]y = new int[2][];
    y[0] = new int[3];
    y[1] = new int[5];

1 枚举(又称为枚举类型或Enum)

  • 枚举是一种特殊的类,Enum的构造函数会对每个被声明的Enum值执行一次,每个Enum都有内置的values()方法,通常会用在for循环里
public class HfjEnum {
    enum Names {
        JERRY(“lead guitar”) {
            public String sings() {
                return“plaintively”;
            }
        },
        BOBBY(“rhythm guitar”) {
            public String sings() {
                return“hoarsely”;
            }
        },
        PHIL(“bass”);

        private String instrument;

        Names(String instrument) {
            this.instrument = instrument;
        }

        public String getInstrument() {
            return this.instrument;
        }

        public String sings() {
            return“occasionally”;
        }
    }

    public static void main(String[] args) {
        for (Names n : Names.values()) {
            System.out.print(n);
            System.out.print(“, instrument:“+n.getInstrument());
            System.out.println(“, sings:“+n.sings());
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,567评论 18 399
  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 1,342评论 0 10
  • 集合框架: 1)特点:存储对象;长度可变;存储对象的类型可不同2)Collection(1)List:有序的;元素...
    Demo_Yang阅读 1,248评论 0 4
  • 转自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帅199207阅读 8,498评论 3 93
  • 身心的累 精神的累,比起肉体的,物质上的,更加折磨人。 我不知道对于一段感情,两个人在一起,到底是什么,究竟是怎样...
    0fda63c551f9阅读 275评论 0 0