zoukankan      html  css  js  c++  java
  • 八、常用类(阶段三)

    一、Object

    Object类是所有类的父类,也就是说任何一个类在定义时如果没有明确地继承一个父类,那它就是Object类的子类,也就是说以下两种类定义的最终效果是完全相同的。

    class Book{                                          
    } 
    
     class Book extends Object{
    }      

    Object类提供无参构造方法 ,之所以提供这样的无参构造,是因为在子类对象实例化时都会默认调用父类中的无参构造方法,这样在定义类时即使没有明确定义父类为Object,读者也不会感觉代码的强制性要求。

    Object类的常用方法

    方法说明
    Object clone() 创建与该对象的类相同的新对象
    boolean equals(Object) 比较两个对象是否相等。默认比较的是地址值。
    void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,对象的圾回收器调用该方法
    Class getClass() 返回一个对象运行时的实例类(.class文件)
    int hashCode() 返回该对象的散列码值
    void notify() 激活等待在该对象的监视器上的一个线程
    void notifyAll() 激活等待在该对象的监视器上的全部线程
    String toString() 返回该对象的字符串表示,默认返回运行时类名+@+对象的hashCode的16进制数
    void wait() 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待

    注意:

    • 如果两个对象的哈希码值不同,那这两个对象一定不等;
    • 如果两个对象的哈希码值相同,不能确保这两个对象一定相等。
    • 克隆对象对应的类需要实现Cloneable接口,否则会报错:java.lang.CloneNotSupportedException

    如何获取类的字节码文件对象?

    1. 类名.class 说明: JVM将使用类装载器, 将类装入内存(前提是:类还没有装入内存),不做类的初始化工作.返回Class的对象
    2. Class.forName("类名字符串") (注:类名字符串是包名+类名) 说明:装入类,并做类的静态初始化,返回Class的对象
    3. 实例对象.getClass() 说明:对类进行静态初始化、非静态初始化; 返回引用o运行时真正所指的对象(因为:子对象的引用可能会赋给父对象的引用变量中) 所属的类的Class的对象

    常覆写Object类的3个方法:toString(),equals(Object obj),hashCode()

     为什么notify(), wait()等函数定义在Object中,而不是Thread中?

    Object中的wait(), notify()等函数,和synchronized一样,会对“对象的同步锁”进行操作。

    wait()会使“当前线程”等待,因为线程进入等待状态,所以线程应该释放它锁持有的“同步锁”,否则其它线程获取不到该“同步锁”而无法运行!
    OK,线程调用wait()之后,会释放它锁持有的“同步锁”;而且,根据前面的介绍,我们知道:等待线程可以被notify()或notifyAll()唤醒。现在,请思考一个问题:notify()是依据什么唤醒等待线程的?或者说,wait()等待线程和notify()之间是通过什么关联起来的?答案是:依据“对象的同步锁”。

    负责唤醒等待线程的那个线程(我们称为“唤醒线程”),它只有在获取“该对象的同步锁”(这里的同步锁必须和等待线程的同步锁是同一个),并且调用notify()或notifyAll()方法之后,才能唤醒等待线程。虽然,等待线程被唤醒;但是,它不能立刻执行,因为唤醒线程还持有“该对象的同步锁”。必须等到唤醒线程释放了“对象的同步锁”之后,等待线程才能获取到“对象的同步锁”进而继续运行。

    总之,notify(), wait()依赖于“同步锁”,而“同步锁”是对象锁持有,并且每个对象有且仅有一个!这就是为什么notify(), wait()等函数定义在Object类,而不是Thread类中的原因。

    二、String

    表示的是字符串,字符串是常量(值定义了之后,不可修改)
    字符串可以看出是多个字符的连接
    1)构造方法
    String():创建一个空的字符串
    String(byte[] bys):通过字节数组创建字符串
    String(char[] chs):通过字符数组创建字符串
    String(byte[] bys,int offset,int length):通过字节数组一部分创建字符串
    String(char[] chs,int offset,int length):通过字符数组一部分创建字符串
    String(String original):通过字符串常量值创建字符串

    2)成员方法
    1》判断功能
    equals(Object obj):比较两个字符串是否相等
    equalsIngnoreCase(Object obj):忽略大小写比较两个字符串是否相等
    contains(String str):是否包含指定字符串
    startsWith(String str):是否以指定的字符串开头
    endWith(String str):是否以指定的字符串结尾
    isEmpty():是否为空
    matches(String regex):判断字符串是否匹配给定的正则表达式。

    2》获取功能
    length():获取长度
    charAt(int index): 获取指定索引位置处的字符
    indexOf(int ch):获取指定字符第一次出现的索引值(从0开始)
    indexOf(int ch,int fromIndex):获取从指定索引位置开始,获取指定字符第一次出现的索引值
    indexOf(String s):获取指定字符串第一次出现的索引值
    indexOf(String s,int fromIndex):获取从指定索引位置开始,获取指定字符串第一次出现的索引值
    lastIndexOf(int ch):获取指定字符最后一次出现的索引值
    substring(int start):从指定位置开始一直截取到末尾
    substring(int start,int end):截取[start,end-1]范围

    3》转换功能
    byte[] getBytes():将字符串转成字节数组
    char[] toCharArray():将字符串转成字符数组
    static valueOf(char[] chs):将char[]转成字符串
    static valueOf(int num):将int类型转成字符串
    static valueOf(Object obj):将任意类型转成字符串
    toLowerCase():转成小写
    toUpcase():转成大写
    concat(String str):字符连接

    4》其他功能
    replace(char old,char new):将old字符替换成new字符
    replace(String old,String new):将old字符串替换成new字符串
    trim():去除两边空格
    int compareTo(String s):字典比较,如果前面值小于后面值返回负数,否则返回正数,先比较第一个元素,如果相等再比较第二个元素...返回元素之间的差值;如果比较字符串有包含关系,返回的值是它们长度的差值
    int compareToIgnoreCase(String s):忽略大小写字典比较

    String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
    String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
    String[] split(String regex):  根据给定正则表达式的匹配拆分此字符串。
    String[] split(String regex, int limit): 根据匹配给定的正则表达式来拆分此字符串。

    /*
     * 字符串做连接操作
     * 如果是两个变量进行连接,先开辟空间,再连接
     * 如果是两个常量进行连接,先连接,获取连接结构值。然后在常量池里面查找有没有这个结果值,如果有,直接给地址值;没有,开辟空间
     */
     
    public class StringTest02 {
        public static void main(String[] args) {
            String s1 = "hello";
            String s2 = "world";
            String s3 = "helloworld";
            
            System.out.println(s3 == s1+s2);                  //false
            System.out.println(s3.equals(s1+s2));             //true
            
            System.out.println(s3 == "hello"+"world");        //true
            System.out.println(s3.equals("hello"+"world"));   //true
        }
    }

    编码表
    编码表:由现实世界的字符和对应的数值组成的一张表
    常见的有:
    1)ASCII码:最高为是符号为,其他是数值位
    2)ISO-8859-1:拉丁码表
    3)BG2312:中文编码表
    4)GBK:GB2312的升级版,1个汉字对应2个字节
    5)GB18030:GBK的升级版
    6)BIG-5:中文繁体编码表,俗称"大5码"
    7)Unicode:国际标注码。所有字符都有两个字节表示
        Java默认使用该编码表
    8)UTF-8:万国码,一个汉字对应3个字节
    tips:所有编码表都兼容ASCII码表

    String中与字符集相关的方法
    String(byte[] by,String charset):通过指定的字符集,将指定的字节数组转成字符串(解码)
    byte[] getBytes(String charset):通过指定的字符集,将字符串转成字节数组(编码)

    正则表达式
    负责字符串的匹配处理(一般用于校验字符串格式)
    规则
    1)字符
        x:x字符,a表a字符
        \:反斜线字符
         :换行符
         :回车符
    2)字符类
        [abc]:表示a、b、c中的一个字符
        [^abc]:表示除了a、b、c之外的任意一个字符
        [a-zA-Z]:表示a~z或A~Z中的一个字符
        [0-9]:表示数字
    3)预定义字符类
        .:表示任意字符
         .:表示'.'字符
        d:表示数字字符,[0-9]
        w:表示单词字符,[a-zA-Z_0-9]
    4)边界匹配器
        ^:表示行的开头
        $:表示行的结尾
        :表示单词的边界
    5)数量词
        ?:表示0次或者1次
        *:表示0次或者多次
        +:表示1次或者多次
        {n}:表示n次
        {n,}:表示至少n次
        {n,m}:n~m次

    三、StringBuilder类

    线程不安全的可变字符序列
    1)构造方法
        StringBuilder():以默认容量创建空的StringBuilder对象
        StringBuilder(int capacity):以指定容量创建空的StringBuilder对象
        StringBuilder(String str):以指定的字符串创建StringBuilder对象
    2)成员方法
    获取功能
    int capacity():获取容量
    int length():获取长度
    添加功能
    append(int value):追加。可以追加多种类型
    insert(int offset,String s):在指定的位置插入指定数据
    删除功能
    deleteCharAt(int index):删除指定索引处的元素
    delete(int start,int end):删除[start,start-1]范围内的元素
    替换功能
    replace(int start,int end,String s):将[start,end-1]范围内的元素替换成指定字符串
    反转功能
    reverse():元素反转
    截取功能
    String subString(int start):截取指定位置一直到末尾
    String subString(int start,int end):截取[start,end-1]范围


    String、StringBuilder和StringBuffer的区别?
    String内容不可改变
    StringBuilder和StringBuffer内容可变
    StringBuilder是线程不安全的,不同步,效率高
    StringBuffer是线程安全的,同步,效率低

    四、Scanner

    1)构造方法
          Scanner(InputStream is)
          构造一个文本扫描器,它生成的值是从指定的值输入流扫描的
          System.in 是一个标准的输入流,属于InputStream
    2)成员方法
          boolean hasNext():是否有下一个数,有true,没有false
          String next():获取下个数
          int nextInt():获取下个int数据
          String nextLine():获取一行数据

    五、Math类

    成员方法
    abs(int a):绝对值
    ceil(double d):向上取整
    floor(double d):向下取整
    max(int a,int b):最大值
    pow(double a,double b):a的b次幂
    random():随机数[0.0,1.0]
    round(float f):四舍五入
    sqrt(double d):算术平方根

    六、Random类

    1)构造方法
    Random():以当前时间毫秒值作为种子,创建Random对象
    Random(long seed):以指定种子创建Random对象
    2)成员方法
    nextInt():生成1个int类型范围的随机数
    nextInt(int n):产生1个[0,n-1]范围内的随机数

    生成0~n之间的数
    ①(int)Math.random()*(n+1)
    ②Random r  = new Random();
    r.nextInt(m)表示生成[0,m-1]之间的随机数,也就是说random.nextInt(m+1),将生成[0,m]之间的随机整数。
    r.nextInt(n+1)
    生成n~m之间的随机数
    ①n+(int)(Math.random()*(m+1-n));
    ②Random r = new Random();
    r.nextInt(m+1-n)+n;

    七、Date类

    表示特定的瞬间,精确到毫秒值
    1)构造方法
    Date():以当前时间毫秒值创建Date对象
    Date(long time):以指定的毫秒值创建Date对象
    2)成员方法
    long getTime():获取Date对象的毫秒值
    setTime(long time):设置Data对象的毫秒值

    八、DateFormat

    它是一个抽象类,用来格式化或者解析日期
    格式化:Date————》String
    解析:String————》Date

    getDateInstance(int style,Locale loc):获取日期格式器,该格式器具有给定的语言环境和给定的格式化风格
    String format(Date date):格式化
    Date parse(String time):解析

    九、SimpleDateFormat

    它是DateFormat的子类
    1)构造方法
    SimpleDateFormat():以默认模式创建对象
    SimpleDateFormat(String pattern):以指定模式创建对象

    常用模式
    yyyy:年     MM:月    dd:日
    HH:时    mm:分    ss:秒

    2)常成员方法
    String format(Date date):格式化
    Date parse(String time):解析

    十、Calendar类

    日历类,用于获取或者操作日历字段(年月日)
    该类是一个抽象类,不可以实例化
    成员方法
    static Calender getInstance():以默认时区和语言创建日历
    int get(int field):获取指定字段的日历值
    set(int field,int value):给指定的日历字段设置指定的值
    set(int year,int month,int date):设置年月日
    Date getTime():获取日历对象的日期
    setTime(Date d):设置日历对象的日期
    add(int field,int amount):对指定的日历字段添加指定的值

    十一、System类

    没有构造方法
    成员方法
    gc():运行垃圾回收处理机制(系统会在某个不确定的时间调用该方法)
    会调用finalize(),进行垃圾回收

    exit(int status):退出JVM,0表示非异常退出
    currentTimeMills():获取当前时间毫秒值
    arrayCopy(Object[] srcArr,int srcPos,Object[] desArr,int destPos,int len):数组复制

    十二、BigInteger类

    1)构造方法
    BigInteger(String s):通过字符串创建BigInteger对象
    2)成员方法
    add(BigInteger bi):+
    subtract(BigInteger bi):-
    multiply(BigInteger bi):*
    divide(BigInteger bi):/

    十三、BigDecimal类

    用于解决浮点型运算精度损失的问题
    1)构造方法
    BigDecimal(String s):通过字符创建BigDecimal对象
    2)成员方法
    add(BigDecimal bi):+
    subtract(BigDecimal bi):-
    multiply(BigDecimal bi):*
    divide(BigDecimal bi):/

  • 相关阅读:
    ABAP 程序中的类 沧海
    ABAP类的方法(转载) 沧海
    More than 100 ABAP Interview Faq's(2) 沧海
    SAP and ABAP Memory总结 沧海
    ABAP Frequently Asked Question 沧海
    ABAP System Reports(Additional functions) 沧海
    ABAP Questions Commonly Asked 1 沧海
    ABAP Tips and Tricks 沧海
    ABAP System Fields 沧海
    ABAP 面试问题及答案(一):数据库更新及更改 SAP Standard (转) 沧海
  • 原文地址:https://www.cnblogs.com/rozen-lin/p/14326186.html
Copyright © 2011-2022 走看看