java 私塾第六、七章笔记整理

luodis 发布于 2011/01/24 10:07
阅读 107
收藏 1

java 私塾第六、七章笔记整理
 
第六章 常见类的使用
 
一. Object类

    equals方法:[color=red]]object类的equals方法作用同 = = 相同,比的是地址。
    equals只能比较引用变量,= =还可以比较基本数据类型。[/color]

        public boolean equals(Object obj) {
            return (this == obj);
        }

    特例:当equals方法进行比较时,对类File,String,Date及包装类来说,是比较类型及内容,而不考虑引用的是否是同一实例。

    Integer 类中重写的equals方法:
        public boolean equals(Object obj) {
             if (obj instanceof Integer) {
                return value == ((Integer)obj).intValue();
             }
             return false;
        }

    [color=red]先比较是否是同一数据类型,再比较值是否相等。[/color]

    hashcode方法
        (1) 同一程序执行期间,对同一个对象调用hashcode,必须返回相同的整数结果。
        (2) 如果两个对象被equals方法视为相等,那么对这两个对象调用hashcode方法必须获得相同的整数结果。
        (3) 如果两个对象被equals方法视为不相等,那么对这两个对象调用hashcode方法不必产生不同的整数结果。
    [color=red]如果两个对象相同,那么他们的hashcode值一定要相同;如果两个对象的hashcode相同,他们并不一定相同。[/color]

    toString方法:
        public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
 
    object类中实现的toString方法是返回当前对象的类型和内存地址信息,其他一些子类(如String, Date)中进行了重写,也可根据需要在用户自定义类型中重写toString()方法。

    除了显示的调用toString(0方法外,进行String与其他数据类型连接操作时,会自动调用toString()方法
        (1) 引用类型数据直接调用其toString()方法转换为String类型。
        (2) 基本数据类型先转换为对应的包装类型,再调用该包装类型toString()方法转换为String类型。
        System.out.println()方法输出引用类型数据时,也先调用了该对象的toString()方法,然后再将返回的字符串输出。
 
二.String 类
    String color = “blue”;
    只有一个对象存放在栈内存里。
    String color = new Stirng(“blue”);
    两个对象一个在栈内存一个在堆内存。
 
    String 的常用方法
        Length()
            返回String的长度,按照char返回长度。
            与数组不同,String是length()方法,数组是length属性。
        charAt(int index)
            获得字符串指定位置的字符。
        getByte()
            将String编码为byte序列,并将结果存储到一个新的byte数组中。
        getChars(int srcBegin, int srcEnd,char [] dst, int dstBegin)
            拷贝字符串的部分字符序列到指定的字符数组的指定位置。
    对于字符串中的汉字,是按照char来计算的,一个中文汉字占两个字节,用字节数减去char的length()的长度,即为汉字数。
 
[code]
public class TestString{
    public static void main(String [] args){
        String str="我们abc";
        char [] a= new char [5];
        System.out.println(str.length());
        System.out.println(str.charAt(2));
        System.out.println("汉字个数:" + (str.getBytes().length-str.length()));
        str.getChars(0,4,a,1);
        for(int i: a)
        System.out.println((char)i);
    }
}[/code]

        输出结果:
        5
        a
        汉字个数:2

        我
        们
        a
        b

    字符串比较
    方法 compareTo(String s)
    比较两个字符的大小,返回0表示相等。返回大于0的数表示前边的字符串大于后面的字符串,返回小于0的表示后边的字符串大于前边的,区分大小写。

[code]public class TestString{
    public static void main(String [] args){
        System.out.println("abc".compareTo("ABc"));
    }
}[/code]
    输出结果:
    32

    方法 compareToIgnoreCase(String s)
        忽略大小写比较两个字符串的大小。
    查找字符串中的字符或子串
    方法indexOf()
        返回第一次找到时的下标,如果没找到则返回-1。
    方法lastIndexOf(int ch, int fromIndex)
        从指定位置往回查找,返回找到的最大的字符下标的位置。若未找到,返回-1。
    方法startWith(String prefix)
        测试此字符串是否以指定的前缀开始
    方法startsWith(String prefix, int toffset)
        测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
    方法endsWith(String suffix)
        测试此字符串是否以指定的后缀结束。

    从当前字符串中抽取子字符串
    方法subString(int beginIndex)
        返回新的字符串:当前字符串的子串。该子串从指定位置开始,并一直到当前字符串结束为止。
    方法subString(int beginIndex, int endIndex)
        返回新的字符串:当前字符串的字串
        该字串从指定位置开始,到指定位置结束。
 
    字符串拼接
    方法 concat(String s)
        拼接两个字符串返回一个新字符串。源字符串不会被修改。
 
    类String的成员方法valueOf
        将参数的值转换为字符串
        public static String valueOf(Object obj) {
            return (obj == null) ? "null" : obj.toString();
        }

    字符串分解
    方法 split(String regex)根据正则表达式的匹配拆分此字符串,得到拆分好的字符串数组。
    方法replace(char1,char2)
    方法toUpperCase
    方法trim()
    方法toString()
    方法toCharArray()
[code]
public class TestString{
    public static void main(String [] args){
        String str = "abcdefabc";
        String s2 = "ABC";
        int a = 100;
        String s3 = "这里,是java,私塾";
        String [] s4= s3.split(",");
        String s5 = "   abcdefabc   ";
        System.out.println(str.indexOf("def"));
        System.out.println(str.lastIndexOf("abc",8));
        System.out.println(str.startsWith("a"));
        System.out.println(str.startsWith("a",6));
        System.out.println(str.substring(3,6));
        System.out.println(str.concat(s2));
        System.out.println(String.valueOf(a));
        System.out.println(String.valueOf(a));
        for(int i=0; i<s4.length; i++)
        System.out.println(s4[i]);
        System.out.println(str.replace('a','o'));
        System.out.println(str.toUpperCase());
        System.out.println(s5.trim());
        System.out.println(str.toCharArray());
    }
}[/code]
    输出结果:
    3
    6
    true
    true
    def
    abcdefabcABC
    100
    这里
    是java
    私塾
    obcdefobc
    ABCDEFABC
    abcdefabc
    abcdefabc
 
三.正则表达式
正则表达式是用于进行文本匹配的工具,也是一个匹配的表达式。
 
四.StringBuffer类和StringBuilder类
    [color=red]类String---字符串对象一旦创建,其内容不能再被修改
    类StringBuffer---内容可以被修改;[/color]
        除了字符的长度外还有容量的概念;初始容量为16字符。
        通过动态改变容量的大小,加速字符管理。
 
    方法 length()
        返回 StringBuffer 的长度
    方法 capacity()
        返回StringBuffer 的容量
    方法setLength(int newLength)
        增加或减小 StringBuffer 的长度
    方法 charAt(int index)
        返回StringBuffer 对象中指定位置的字符
    方法setCharAt(int index, char ch)
        设置 StringBuffer 对象中指定位置的字符
    方法 getChars(int srcBegin, int srcEnd,
        Char[] dst, int dstBegin)
        将StringBuffer 对象中指定的字符子序列,拷贝到指定的字符数组(dst)
    方法 reverse()
        将StringBuffer 对象中的字符序列按逆序方式排列,可用作字符串倒序
    方法append(…)
        允许数值类型的值添加到StringBuffer对象中
    方法insert()
        允许将各种数据插到StringBuffer 对象的指定位置
    方法 delete(int start, int end) 和 deleteCharAt(int index)
        允许删除StringBuffer 对象中的指定字符
[code]
public class TestString{
    public static void main(String [] args){
        StringBuffer sb = new StringBuffer("abcdefg");
        char [] a = new char[10];
        System.out.println(sb.length());
        System.out.println(sb.capacity());
        sb.setLength(10);
        System.out.println(sb.length());
        sb.setCharAt(1,'A');
        System.out.println(sb);
        sb.getChars(0,5,a,0);
        for(int i=0; i<a.length; i++)
        System.out.println(a[i]);
        System.out.println(sb.reverse());
        System.out.println(sb.append("aaaa"));
        System.out.println(sb.delete(0,3));
    }
}[/code]
        输出结果:
        7
        23
        10
        aAcdefg
        a
        A
        c
        d
        e
 
 
 
           gfedcAa
           gfedcAaaaaa
        gfedcAaaaaa
 
五.Math类(final类,不可继承)
    1:常数
       PI :double,圆周率
       E :double,自然对数
    2:截取(注意方法的返回类型)
       double ceil(double d)
           返回不小于d 的最小整数
       double floor(double d)
           返回不大于d 的最大整数
       int round(float f)
           返回四舍五入后的整数
       long round(double d)
           返回四舍五入后的整数
    3:变换(int long float各种类型相似)
       double abs(double d)
           返回绝对值
       double min(double d1, double d2)
           返回两个值中较小的值
       double max(double d1, double d2)
           返回两个值中较大的值
    4:对数
       double log(double d)
           自然对数
       double exp(double d)
           E 的指数
    5:其它
       double sqrt(double d)
           返回平方根
       double random()
           返回随机数
 
六.如何给Java代码设置系统属性?如何在程序中使用它们
    设置:Java有一个类properties描述了名字和值之间的映射;
    使用例子:System.getProperties();
          System.setProperties();
 
七.简述properties文件的结构和基本用法
    结构:(设置在一个扩展名为properties的文件,内容为key,value的映射)
      key=value
    用法:
        System.getProperties 方法返回系统的Properties 对象。
        System.getProperty(String propertyName)方法返回对应名字属性的值。
        System.getProperty(String name, String value)重载方法当没有name指定的属性 时,返回value 指定的缺省值。
 
 
第七章 抽象类和接口
 
一. 抽象类
    用abstract修饰的类就是抽象类
    抽象类不能直接使用,必须用子类去实现抽象类,然后使用其子类的实例。
    在下列情况下,一个类成为抽象类
        (1) 当一个类的一个或多个方法是抽象方法时
        (2) 当类是一个抽象类的子类,并且不能为任何抽象方法提供任何实现细节或方法主体时
        (3) 当一个类实现一个接口,并且不能为任何抽象方法提供实现细节或方法主体时
    [color=red]“抽象类一定包含抽象方法”是错误的。当时反过来说“包含抽象方法的类一定是抽象类”就是正确的了。[/color]
 
二.接口
    接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
     接口也可以继承,子接口可以继承父接口中的常量和抽象方法。
     接口特性:
        (1) 接口中声明的属性默认为,也只能是 public static final的,所以在常量声明时可以省略这些修饰符。
        (2) 接口中只能定义抽象方法,这些方法默认为,也只能是public abstract的,所以在声明这些方法时也可以省略这些修饰符。
        (3) 和继承父类相似,java类可以实现接口。
 
    接口的作用:
        (1) 声明方法,期望一个或更多的类来实现该方法。
        (2) 揭示一个对象的编程接口,而不揭示类的实际程序体。
        (3) 捕获无关类之间的相似性,而不强迫类关系。
        (4) 可以作为参数传到其他对象上调用的方法中。
 
三.多重接口
    一个类只可以继承一个父类,但可以实现多个接口,而不需要在继承树中同属一个族。一个类实现多个接口就被称为多重接口。
 
四.接口基本思想
    封装,隔离
    接口及相关机制的最基本作用在于:通过接口可以实现不相关类的相同行为,而不需考 虑这些类之间的层次关系。
    根据接口可以了解对象的交互界面,而不需了解对象所属的类。
    面向对象程序设计讲究“提高内聚,降低耦合”。
 
五.接口作为类型使用
    接口的使用:
    ClassA  a = new ClassA();  正确
    InterfaceA  a = new InterfaceA(); 错误
    InterfaceA  a = new ImplementsA(); 正确
    后边就可以使用a.method()来调用接口的方法了。
 
有需要的可以到java 私塾官网下载完整笔记:www.javass.cn/javapeixunzlxz/zlxz.html

加载中
返回顶部
顶部