第二十二天 常用类

一.StringBuffer类(调用里面的构造方法)

    StringBuffer:线程安全的类,支持可变字符序列!
 * 线程-->依赖于进程,线程执行的最小单元!  (这周多线程讲)
 * 线程安全----->意味着 "同步"---->执行效率低
 *举例: 银行类的网站/医院平台
 * 线程不安全----> "不同步"---->执行效率高
构造方法:
 *      public StringBuffer()  --->空参构造,初始容量16个字符
 *      public StringBuffer(int capacity)--->指定容量大小的字符串缓冲区(很少用)
 *      public StringBuffer(String str)--->将指定的字符串内容构造到字符串缓冲区中,容量=当前str的长度+16
 *
 *     int length()获取字符串缓冲区长度
 *     int capacity()  :获取容量大小

StringBuffer的追加和插入
*       public StringBuffer append(任意Java类型):将指定的类型追加字符串缓冲区的序列中,返回自己本身
 *       public StringBuffer insert(int index,String str/可以任意Java类型) 在指定位置处插入指定的数据,返回字符串缓冲区本身
 
 
 * StringBuffer的获取功能
 *          public char charAt(int index):获取字符串缓冲区中指定位置的字符,返回指定的字符
 * StringBuffer的删除
 *          StringBuffer delete(int start, int end)  :删除从指定位置开始到指定位置结束(end-1)的字符,返回字符串缓冲区本身
 *          StringBuffer deleteCharAt(int index):删除指定位置处的字符,返回值字符串缓冲区本身
 *StringBuffer的替换功能:
 *          public StringBuffer replace(int start,int end,String str)
 *                      将字符串缓冲区中的从指定位置开始到指定位置结束(end-1)的字符序列使用指定的字符串进行替换*/

代码测试
class Test1 {
    public static void main(String[] args) {
        System.out.println("------------------创建一个字符缓冲区------------------");
        StringBuffer s = new StringBuffer();
        System.out.println(s);
        System.out.println("------------------StringBuffer append(任意Java类型数据)添加指定类型字符串到缓冲区序列中,返回自己本身------------------");
        s.append("helloworld").append(12).append('男').append(new Object());
        System.out.println(s);
        System.out.println("--------------char charAt(int index)获取指定位置字符---------------");
        char ch = s.charAt(3);
        System.out.println( s.charAt(3));
        System.out.println("--------------StringBuffer delete(int start,int end)删除从开始到结束的指定位置的字符()左闭右开--------------");
        StringBuffer sb=s.delete(2,5);
        System.out.println(sb);
        System.out.println("--------------StringBuffer delete charAt(int index)删除指定位置字符,返回字符串缓冲区本身--------------");
        StringBuffer sb1=s.deleteCharAt(4);
        System.out.println(sb1);
        System.out.println("---StringBuffer replace(int start,int end,String str)将字符串缓冲区中的从指定位置开始到指定位置结束(end-1)的字符序列使用指定的字符串进行替换----------------");
        StringBuffer sb2=s.replace(2,7,"我爱高圆圆");
        System.out.println(sb2);
    }

String和StringBuffer/StringBuilder的区别?
 *      String:是一个常量,一旦被赋值,其值不能被更改 ,不可变的字符序列!
 *           作为形式参数,形式参数的改变不影响实际参数(和基本类型作为形式参数传递的效果一致 ,特殊的引用类型)
 *      StringBuffer:支持可变的字符串序列,线程安全的类--->同步的--->执行效率低
 *                   StringBuffer的大部分功能--->synchronzied:同步锁(悲观锁)(多线程去讲)
 *           作为形式参数,形式参数的改变直接影响实际参数
 *      StringBuilder:和StringBuffer具备相互兼容的API,线程不安全的类---不同步的---->执行效率高
 *              单线程程序(只考虑效率)中,使用StringBuilder去替代StringBuffer
 *              多线程环境下(要考虑安全),使用StringBuffer

        在实际开发中,牵扯很多类型之间的相互转换
        将A类型-->B类型,因为想去使用B类型的功能
        但是又可能将B类型--->A类型,最终需求的结果是A类型
 *
 *  String---->StringBuffer
 *  StringBuffer---->String

class Test1 {
    public static void main(String[] args) {
        //String------>StringBuffer
        //方式1
        String s = "helloworld";
StringBuffer s1=new StringBuffer(s);
System.out.println(s1);
//方式2 创建StringBuffer的空参构造结合append
        StringBuffer s2=new StringBuffer();
        System.out.println(s2.append(s));
        System.out.println("-------------------------");
//StringBuffer------->String
        //方式1
        StringBuffer sb=new StringBuffer("HELLOWORLD");
        String s3=sb.toString();
        System.out.println(s3);
        System.out.println("--------------------");
        //方式2  String的有参构造方法
        String s4=new String (sb);
        System.out.println(sb);
    }
}

 * 看程序,写结果
    字符串常量相加:先拼接,然后看常量池中有没字符串内容,有就返回地址
    字符串变量相加:先开空间
    s3 == (s1+s2) ----> 通过反编译工具查看将s1和s2通过字符串缓冲区StringBuilder添加,最终toString()

public class StringTest {
    public static void main(String[] args) {
        String s1  = "hello" ;
        String s2 =  "world" ;
        String s3 = "helloworld" ;  //s3指向常量池里面的"helloworld"
        System.out.println(s3 == (s1+s2));  // 认为 true
        System.out.println(s3.equals(s1+s2));
        System.out.println(s3==("hello"+"world")) ;
        System.out.println(s3.equals("hello"+"world"));
    }
}

结果:false    true   true   true 

二.Integer类

 *              int--->Integer--->静态的常量
 *                              public static final int MAX_VALUE
 *                              public static final int MIN_VALUE
 *     求出100的二进制/八进制/十六进制(使用程序)
 *                              public static String toBinaryString(int i):将十进制--转换二进制的字符串形式
 *                              public static String toHexString(int i)将十进制--转换十六进制的字符串形式
 *                              public static String toOctalString(int i)将十进制--转换八进制的字符串形式

*Integer类:包装的int类型的值
 * 四类八种基本类型---------->包装类类型(引用类型)  :jdk5以后的自动拆装箱
 *      byte                Byte
 *      short               Short
 *      int                 Integer
 *      long                Long
 *      float               Float
 *      double              Double
 *      char                Character
 *      boolean             Boolean
 *
 *      基本类型         引用类型       String
 *
 *      String         Integer          int

 * Integer的构造方法:
 * public Integer(int value) :将int类型数据包装为Integer类型
 * public Integer(String s)throws NumberFormatException :将字符串类型包装Integer类型,如果字符串非数字字符串,
 * 就会出现NumberFormatExceptio数字格式化异常
 *
 * jdk5以后的新特性:自动拆装箱      /静态导入(导入到方法的级别,前提方法必须为静态)/增强for循环/可变参数...
 *      基本类型会自动装箱为 引用类型:    int-->Integer
 *      引用类型会拆箱为 基本类型  :     Integer-->int

        //创建一个Integer类对象
        //public Integer(int value) :将int类型数据包装为Integer类型
        Integer i = new Integer(100) ;  //将int----Integer类型
        i += 200 ;                            //将Integer--->int--->在和200相加---->int--->Integer
        System.out.println(i) ;

//public Integer(String s)throws NumberFormatException :
        //String s = "hello" ; //字符串必须为数字字符串

 String s = "10" ;
        Integer ii = new Integer(s) ;

//Integer----->String

s += ii;
        System.out.println(ii);

 * 类型转换
 *
 *      int---->String 静态方法public static String toString(int i)
 *      String--->int  (使用居多)  public static int parseInt(String s)
 *                  前后端交互:前端提交的数据几乎String类型

  //int--->String
        int i = 100 ;
        String result = "" ;
        //方式1:字符串拼接符号+
        result += i;
        System.out.println(result) ;
        System.out.println("---------------------------------");
        //方式2:int--->Integer---->String
        //Integer(int i) ---->publict String toString()
        Integer ig = new Integer(i) ;//int类型转Integer
        String result2 = ig.toString();//String 类的无参构造
        System.out.println(result2); //"100"
        System.out.println("---------------------------------");
        //方式3:Integer的静态方法public static String toString(int i)
        String result3 = Integer.toString(i);
        System.out.println(result3);

String转int

  // String---->int
        String s = "20" ; //数字字符串
       //方式1:String--->Integer --->public int intValue()
        Integer ig2 = new Integer(s) ;
        int value = ig2.intValue();
        System.out.println(value); //20
        System.out.println("-----------------------------------------") ;
        //方式2:直接转换public static int parseInt(String s) throws NumberFormatException
        int value2 = Integer.parseInt(s);
        System.out.println(value2); //20

String---->int适用的场景

表单提交数据时

三.character

 * 构造方法
 *  Character(char value):包装一个char字符类型  char---->Character
 * 成员方法
 *      public static boolean isDigit(char ch):判断是否为数字字符
 *      public static boolean isUpperCase(char ch):判断是否为大写字母字符
 *      public static boolean isLowerCase(char ch):判断是否为小写字母字符

public class CharacterDemo {
    public static void main(String[] args) {
        //创建一个Character对象
        Character character = new Character((char) 97) ;
        System.out.println(character);
        Character character2 = new Character('a') ;
        System.out.println(character2);
     /*   public static boolean isDigit(char ch):判断是否为数字字符
        public static boolean isUpperCase(char ch):判断是否为大写字母字符
         public static boolean isLowerCase(char ch):判断是否为小写字母字符*/
        System.out.println(Character.isDigit('0'));
        System.out.println(Character.isDigit('A'));
        System.out.println(Character.isDigit('a'));
        System.out.println(Character.isUpperCase('0'));
        System.out.println(Character.isUpperCase('A'));
        System.out.println(Character.isUpperCase('a'));

    }
}

四.Date

 java.util.Date:特定的日期
       构造方法:
               public Date():系统时间的日期格式
       成员方法:
               public long getTime():获取指定Date对象的系统时间毫秒值

Date日期格式      ----->String日期文本             --->格式化操作
 *
 *     String日期文本
 *           2022/11/15  2022年11月15日 ----------->Date (重点 )       ---->解析
 *      应用场景:用户注册 填写 出生日期  "1995-05-27"   String---->数据库Date格式
 *
 *  格式化或者解析:使用DateFormat类,它是一个抽象类,不能实例化,用的抽象类的子类SimpleDateFormat
 *
 *  Date日期个--->String格式化
 *      public final String format(Date date)
 *  构造方法
 *  SimpleDateFormat(String pattern)        pattern模式  :  y:代表年              yyyy 代表整个年份 :2022
 *                                                         M:代表月份                MM       11  07  06
 *                                                         d:月份中的日               dd      03 11 01
 *                                                         H:0-23(一天的小数数)       HH
 *                                                         m:小时的分钟数             mm
 *
 *
 * String日期文本---->Date 解析
 * public Date parse(String source)  throws ParseException :
 *      如果String日期文本 和转换器SimpleDateFormat(String pattern) 里面的模式不匹配就会造成解析异常!
 *          String s = "2008-5-12"
 *        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ") ;//解析出问题了!
 *

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值