Java教程

Java零基础07-jdk常用类

本文主要是介绍Java零基础07-jdk常用类,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

/*
    常用类 翻API帮助文档
*/

一、String类

1.String

    - String对象 变量值 不可变

    - JDK中用双引号括起来的字符串,都直接存储在 字符串常量池 中 // 字符串常量池在堆内存中 运行时常量池在方法区
        
        // 因为字符串使用频率高,放在常量池 提高执行效率

    - String s1 = "张三"; // s1 保存的是对象的内存地址

    - 垃圾回收器不会释放常量

    - "test01".equals(test02); //这样写可以避免空指针异常 ( "test01" 是一个字符串String对象 所以也可以调用方法


2.常用构造方法 // 帮助文档
    
    - byte[] btye;
      
      String s2 = new String(byte);


3.常用方法 // 帮助文档


      // String类当中常用方法。
        //1(掌握).char charAt(int index)
        char c = "中国人".charAt(1); // "中国人"是一个字符串String对象。只要是对象就能“点.”
        System.out.println(c); // 国

        // 2(了解).int compareTo(String anotherString)
        // 字符串之间比较大小不能直接使用 > < ,需要使用compareTo方法。
        int result = "abc".compareTo("abc");
        System.out.println(result); //0(等于0) 前后一致  10 - 10 = 0

        int result2 = "abcd".compareTo("abce");
        System.out.println(result2); //-1(小于0) 前小后大 8 - 9 = -1

        int result3 = "abce".compareTo("abcd");
        System.out.println(result3); // 1(大于0) 前大后小 9 - 8 = 1

        // 拿着字符串第一个字母和后面字符串的第一个字母比较。能分胜负就不再比较了。
        System.out.println("xyz".compareTo("yxz")); // -1

        // 3(掌握).boolean contains(CharSequence s)
        // 判断前面的字符串中是否包含后面的子字符串。
        System.out.println("HelloWorld.java".contains(".java")); // true
        System.out.println("http://www.baidu.com".contains("https://")); // false

        // 4(掌握). boolean endsWith(String suffix)
        // 判断当前字符串是否以某个子字符串结尾。
        System.out.println("test.txt".endsWith(".java")); // false
        System.out.println("test.txt".endsWith(".txt")); // true
        System.out.println("fdsajklfhdkjlsahfjkdsahjklfdss".endsWith("ss")); // true

        // 5(掌握).boolean equals(Object anObject)
        // 比较两个字符串必须使用equals方法,不能使用“==”
        // equals方法有没有调用compareTo方法? 老版本可以看一下。JDK13中并没有调用compareTo()方法。
        // equals只能看出相等不相等。
        // compareTo方法可以看出是否相等,并且同时还可以看出谁大谁小。
        System.out.println("abc".equals("abc")); // true

        // 6(掌握).boolean equalsIgnoreCase(String anotherString)
        // 判断两个字符串是否相等,并且同时忽略大小写。
        System.out.println("ABc".equalsIgnoreCase("abC")); // true

        // 7(掌握).byte[] getBytes()
        // 将字符串对象转换成字节数组
        byte[] bytes = "abcdef".getBytes();
        for(int i = 0; i < bytes.length; i++){
            System.out.println(bytes[i]);
        }

        // 8(掌握).int indexOf(String str)
        // 判断某个子字符串在当前字符串中第一次出现处的索引(下标)。
        System.out.println("oraclejavac++.netc#phppythonjavaoraclec++".indexOf("java")); // 6

        // 9(掌握).boolean isEmpty()
        // 判断某个字符串是否为“空字符串”。底层源代码调用的应该是字符串的length()方法。
        //String s = "";
        String s = "a";
        System.out.println(s.isEmpty());

        // 10(掌握). int length()
        // 面试题:判断数组长度和判断字符串长度不一样
        // 判断数组长度是length属性,判断字符串长度是length()方法。
        System.out.println("abc".length()); // 3

        System.out.println("".length()); // 0

        // 11(掌握).int lastIndexOf(String str)
        // 判断某个子字符串在当前字符串中最后一次出现的索引(下标)
        System.out.println("oraclejavac++javac#phpjavapython".lastIndexOf("java")); //22

        // 12(掌握). String replace(CharSequence target, CharSequence replacement)
        // 替换。
        // String的父接口就是:CharSequence
        String newString = "http://www.baidu.com".replace("http://", "https://");
        System.out.println(newString); //https://www.baidu.com
        // 把以下字符串中的“=”替换成“:”
        String newString2 = "name=zhangsan&password=123&age=20".replace("=", ":");
        System.out.println(newString2); //name:zhangsan&password:123&age:20

        // 13(掌握).String[] split(String regex)
        // 拆分字符串
        String[] ymd = "1980-10-11".split("-"); //"1980-10-11"以"-"分隔符进行拆分。
        for(int i = 0; i < ymd.length; i++){
            System.out.println(ymd[i]);
        }
        String param = "name=zhangsan&password=123&age=20";
        String[] params = param.split("&");
        for(int i = 0; i <params.length; i++){
            System.out.println(params[i]);
            // 可以继续向下拆分,可以通过“=”拆分。
        }

        // 14(掌握)、boolean startsWith(String prefix)
        // 判断某个字符串是否以某个子字符串开始。
        System.out.println("http://www.baidu.com".startsWith("http")); // true
        System.out.println("http://www.baidu.com".startsWith("https")); // false

        // 15(掌握)、 String substring(int beginIndex) 参数是起始下标。
        // 截取字符串
        System.out.println("http://www.baidu.com".substring(7)); //www.baidu.com

        // 16(掌握)、String substring(int beginIndex, int endIndex)
        // beginIndex起始位置(包括)
        // endIndex结束位置(不包括)
        System.out.println("http://www.baidu.com".substring(7, 10)); //www

        // 17(掌握)、char[] toCharArray()
        // 将字符串转换成char数组
        char[] chars = "我是中国人".toCharArray();
        for(int i = 0; i < chars.length; i++){
            System.out.println(chars[i]);
        }

        // 18(掌握)、String toLowerCase()
        // 转换为小写。
        System.out.println("ABCDefKXyz".toLowerCase());

        // 19(掌握)、String toUpperCase();
        System.out.println("ABCDefKXyz".toUpperCase());

        // 20(掌握). String trim();
        // 去除字符串前后空白
        System.out.println("           hello      world             ".trim());

        // 21(掌握). String中只有一个方法是静态的,不需要new对象
        // 这个方法叫做valueOf
        // 作用:将“非字符串”转换成“字符串”
        //String s1 = String.valueOf(true);
        //String s1 = String.valueOf(100);
        //String s1 = String.valueOf(3.14);

        // 这个静态的valueOf()方法,参数是一个对象的时候,会自动调用该对象的toString()方法吗?
        String s1 = String.valueOf(new Customer());
        //System.out.println(s1); // 没有重写toString()方法之前是对象内存地址 com.bjpowernode.javase.string.Customer@10f87f48
        System.out.println(s1); //我是一个VIP客户!!!!

        // 我们是不是可以研究一下println()方法的源代码了?
        System.out.println(100);
        System.out.println(3.14);
        System.out.println(true);

        Object obj = new Object();
        // 通过源代码可以看出:为什么输出一个引用的时候,会调用toString()方法!!!!
        // 本质上System.out.println()这个方法在输出任何数据的时候都是先转换成字符串,再输出。
        System.out.println(obj);

        System.out.println(new Customer());
    }
}

class Customer {
    // 重写toString()方法

    @Override
    public String toString() {
        return "我是一个VIP客户!!!!";
    }
}


4.StringBuffer  //字符串拼接

    - 底层是一个byte数组

    - StringBuffer stringBuffer = new StringBuffer(100);  //长度100的btye数组
      stringBuffer.append   //append追加 (底层是数组扩容 arrayCopy

    - String 底层的byte数组被 final修饰 所以不可变
      而 StringBuffer的 btye数组可变 所以可以追加

    - 在创建StringBuffer的时候尽可能给定一个初始化容量 减少底层扩容次数


  StringBuilder
    
    - StringBuffer 方法中 有synchronized关键字修饰,表示多线程情况下运行安全

      StringBuilder 中无  表示多线程情况下运行不安全


5.基本数据类型对应的包装类

    - 属于 引用数据类型 父类时Object

    - 调用doSome(Object obj)方法时候  方便传参

    - 八种基本数据类型包装类

    btye            java.lang.Btye(父类Number)
    short            java.lang.Short(父类Number)
    int            java.lang.Integer(父类Number)
    long            java.lang.Long(父类Number)
    float            java.lang.Float(父类Number)
    double            java.lang.Double(父类Number)
    boolean            java.lang.Boolean(父类Object)
    char            java.lang.character(父类Object)

    - 装箱 拆箱
    
    //基本数据类型 ---> 引用数据类型   (装箱
    Integer i = new Integer(123);    //jdk9之后该构造方法过时 

    //引用数据类型 ---> 基本数据类型  (拆箱
    float f = i.floatValue(); // Number抽象类里的拆箱方法

    - Integer(int)
      Integer(String)

    - 通过访问包装类常量获取最大 最小值

    Integer.MAX_VALUE 
    Integer.MIN_VALUE

    - 自动装箱 自动拆箱  //方便编程
 
    //自动装箱    int类型自动转换成Integer
    Integer x = 100;    // 等于 Integer x = new Integer(100)
    
    //自动拆箱
    int y = x;


*分析以下代码

Integer x = 128;
Integer y = 128;
System.out.println(x == y); // false (== 不会触发 自动拆箱


//因为java中为了提高开发效率,将[-128~ 127]之间所有的包装对象提前创建好,
放到方法去的“整数型常量池中”,不需要在new了,直接取,所以内存地址一致
// cache 缓存机制 (Integer 源码
Integer a = 127;
Integer b = 127;
System.out.println(a == b); //true
    

    - Integer常用方法

    // NumberFormatException 数字格式化异常

    1. intValue()

    2. static int parseInt(String s )  // String 转换成int 
                        静态方法 传参String 返回int
    3. static Integer valueOf(String s)

    - String int Integer 互相转换的方法 *** 

6. 对日期的处理

    - 获取系统当前时间

    java.util.Date    

    SimpleDateFormat // java.text 负责日期格式化 
    

    1. Date转换成String

    Date nowtime = new Date()// new出Date对象

    SimpleDateFormat sdf = new SimpleDateFormate("yyyy-MM-dd HH:mm:ss SSS") //设置格式 只有这个格式不能更改 
                                              其余随便
    String nowTimeStr = sdf.format(nowtime)// format方法格式化 Date格式

    2. String转换成Date

    String time = "2008-08-08 08:08:08 888"
    SimpleDateFormate sdf2 = new SimpleDateFormate(yyyy-MM-dd HH:mm:ss SS)//这个格式一定得和String中相同
    Date dateTime = sdf2.parse(time)                否则有java.text.ParseException


    3. 获取自1970.1.1日到现在的总毫秒数  统计方法执行时间

    System.currentTimeMills(); //静态方法    

    4. 总结一下System方法

    System.out        //out是System的静态变量
    System.out.println()    //println 是PrintSteam类的方法
    System.gc()        //启动gc
    System.currentTimeMills()
    System.exit(0)        //推出JVM

7. 数字格式化

    DecimalFormat df = new DecimalFormate("###,###.##");

    String s = df.formate(1234.56) // 1,234.56
    
    DecimalFormat df2 = new DecimalFormate("###,###.0000"); //不够补0

    String s = df.formate(1234.56) // 1,234.5600


8. BigDecimal 大数据 精度极高 java对象 引用数据类型 // SUN提供的一个类

    - 财务中double是不够的

    java.math.BigDecimal 

    求和需要调用方法 BigDecimal类中提供


9. 随机数 Random

    Random random = new Random()

    int num1 = random.nextInt() //随机产生int取值范围内的数字

    int num2 = random.nexInt(101); // 表示随机取0~100 范围内的数字 不包括101
                    nexInt(101) 表示下一个是101 所以不包括101


*随机生成5个不同的数字,放在数组中


10. 枚举

    - 一种引用数据类型

    - 结果只有两种情况 用boolean类型
      
      结果超过两种,可以一枚一枚列出来的可以用枚举,如颜色、四季

    - enum Season{
    
        SPINRG, SUMMER, AUTUMN, WINTER
    }


    
 

这篇关于Java零基础07-jdk常用类的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!