JavaSE笔记12

本文详细讲解了API的概念,Object类的特性,特别是其toString和equals方法,以及String类的创建、比较、操作和正则表达式应用。重点介绍了字符串的实现原理、构造方法及常用方法,适合Java开发者深入理解基础概念。
摘要由CSDN通过智能技术生成

API的概念

应用程序编程接口 : 每一个技术,官方都会定义出许多的功能,开发人员可以直接拿来使用(拿来主义). API可以理解为Sun公司已经开发好的类和方法. API文档就是我们开发的帮手

Object类

Object类 : 所有类的父类,一切类都直接或者是间接继承Object. Object类中的所有功能,子类都可以使用.福利 :

 class XX {} //自己的构造方法,继承下来11个方法

Object类定义在了java.lang包, lang包是核心包,此包中的任何类,在使用的时候不需要import 导入

Object类的本地方法

本地方法 : 方法的定义上使用关键字,是修饰符 native ,这个方法就是本地方法.

本地方法的特点 :

  • 方法没有方法体

  • 方法是C++语言编写的,Sun公司不开源

  • 方法运行的时候,是一个独立的内存 (本地方法栈)

  • 作用 : 凡是遇到本地方法,方法的作用是和本机的操作系统交互的

 

Object类的方法toString()

自己定义类Person类,默认的继承Object,Object类定义定义了方法 :

public String toString(); //结果是字符串,就是对象内地地址

输出语句中System.out.println(对象) 调用对象的toString()

System.out.println(对象) == System.out.println(对象.toString())

toString方法的结果,和开发没有任何的关系. 我们需要的是重写父类的方法toStirng(),建立我们对象自己的字符串表现形式

Object类的方法equals()

Java技术认为任何对象都具备比较性,Object类定义了方法equals(),作用就是用来比较对象的.方法结果是boolean值,对象相等就是true

Object类的方法源码equals

public boolean equals(Object obj){
    return this == obj ;
}
  • 引用数据类型 == 就是比较对象的地址是不是相同的

  • Object类的方法 equals默认比较对象的内存地址

String字符串类

 

字符串对象,程序中定义""都是字符串对象,这个对象的使用频率最高.

字符串类 java.lang.String类,继承Object类,实现了三个接口.

程序中只要你写 "里面任意" 都是String类的对象.

字符串对象是常量,一旦创建不能修改.

字符串对象创建

 

public static void main(String[] args) {
    //字符串创建,2个方式
    //直接=创建
    String s = "abc";
    //使用构造方法创建
    String str = new String("aa");
}
  • 直接 = 创建方式,代码少,书写简单,推荐使用

  • new String() 使用了构造方法的创建形式,代码大,不推荐使用

字符串的实现原理

字符串这个数据类,在Java中是不存在的,字符串的实现原理是用char[]数组表示.

"abc",使用数组char[] ch = {'a','b','c'} ;来表示.

JDK9版本之后,节约内存,char数组改变为了byte数组

JDK8版本以前都是char数组

private final char value[]; //JDK中String类的源码

 数组的前面的修饰符final, 最终的数组,数组一旦建立,数组的地址就被锁死(常量)使用常量的原因,为了线程安全

 

字符串创建对象的区别

直接等号赋值如果内存中已经有这个常量,则同样赋值这块内存的地址,new String()会重新开辟内存。

public class StringTest {
    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = new String("abc");
        System.out.println(s1 == s2); //false

        System.out.println("==========");
        /**
         *  s3 = hello 内存中出现String对象,里面是char数组
         *  s3保存的是String对象
         *
         *  s4 = "hello" 和s3中的字符串在内存中的数组表现是一样的
         *  共用
         *  s3的内存地址,赋值给s4
         */
        String s3 = "hello";
        String s4 = "hello";
        System.out.println(s3 == s4); //true

        System.out.println("========");

        String s5 = "how";
        String s6 = "you";

        String s7 = "howyou";
        /**
         *   s7 == (s5+s6)   s5和s6是变量
         *   变量在编译的时候,javac不确定变量的计算结果是什么
         *   运行的时候,JVM会为 s5+s6的结果,新开内存空间
         */
        System.out.println(s7 == (s5+s6)); //false

        System.out.println("============");

        /**
         *  "how"+"you" 是常量,值在编译期间就已经确定
         *  运行,不会建立新的内存空间
         */
        System.out.println(s7 == ("how"+"you"));// true

        String s8 = "a"+"b"+"c";

    }

    
}

String类的构造方法

  • String(byte[] b) 字节数组转成字符串,使用平台的默认字符集

  • String(byte[] b,int off,int len) 字节数组转成字符串,使用平台的默认字符集,参数off数组的开始索引,len要转的个数

  • String(byte[] b,int off,int len,String,charsetName) 字节数组转成字符串,使用平台的默认字符集,参数off数组的开始索引,len要转的个数,charsetName参数是你自己可以指定编码表

public class StringTest {
    public static void main(String[] args) throws UnsupportedEncodingException {
        stringConsChar();
    }
    //String类的构造方法,new String(char[])
    public static void stringConsChar(){
        char[] ch = {'a','b','c','d','e'};
        //构造方法,数组转成字符串
        String s = new String(ch);
        System.out.println(s);

        //构造方法,数组转成字符串,转一部分
        String s1 = new String(ch,1,3);//从1索引开始,转3个
        System.out.println(s1);
    }

    //String类构造方法相关,和字节,汉字相关
    public static void stringConsByte3() throws UnsupportedEncodingException {
        // String(byte[] bytes)通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
        //平台是操作系统, 默认字符集是GBK
        //强制指定为GBK编码
        byte[] bytes ={-28, -67, -96, -27};
        String str = new String(bytes,"gbk");
        System.out.println(str);
    }

    //String类构造方法相关,和字节,汉字相关
    public static void stringConsByte2(){
        // String(byte[] bytes)通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
        //平台是操作系统, 默认字符集是GBK
        //IDEA 启动的时候,为JVM添加启动参数,默认字符集改成UTF-8

        byte[] bytes ={-28, -67, -96, -27, -91, -67}; // 6字节的数组,转为字符串后是2个汉字
        String str = new String(bytes);
        System.out.println(str);
    }

    //String类构造方法相关,和字节
    public static void stringConsByte(){
       // String(byte[] bytes)通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。
        //平台是操作系统, 默认字符集是GBK
        byte[] bytes = {97,98,99,100};
        String str = new String(bytes);
        System.out.println(str);

        //数组的一部分转成字符串
        String str1 = new String(bytes,1,2);//从1索引开始,要2个
        System.out.println(str1);
    }
}

A~Z的ASCII码65~90,a~z的ASCII码97~122

  • String(char[] b) 字节数组转成字符串

  • String(char[] b,int off,int,len) 字节数组转成字符串,参数off数组的开始索引,len要转的个数

String类的常用方法

 String类的判断类型的方法, 返回都是布尔类型

  • boolean equals(Object obj) 字符串之间的比较,两个字符串相同,返回true

  • boolean equalsIgnoreCase(String str ) 字符串之间的比较,两个字符串相同,返回true,忽略大小写

  • boolean startWith(String str)判断字符串是否以另一个字符串开头,是开头就返回true

  • boolean endsWith(String str)判断字符串是否以另一个字符串结尾,是结尾就返回true

  • boolean contains(String str) 判断字符串中是否包含另一个字符串,完全包含返回true

  • boolean isEmpty()判断字符串的长度是不是0,如果是0返回true

String类的获取方法,返回值不一定

  • int length() 返回字符串长度,字符串中字符的个数

  • char charAt(int index) 返回指定索引上的单个字符

  • int indexOf(String str) 返回指定的字符串,在当前字符串中第一次出现的索引

  • int lastIndexOf(String str) 返回指定的字符串,在当前字符串中最后一次出现的索引

  • String substring(int start,int end)截取字符串,参数表示开始索引和结束索引,包含开头索引,不包含结束索引

 String类的转换方法

  • String toLowerCase() 字符串中的所有内容转成小写

  • String toUpperCase() 字符串中的所有内容转成大写

  • char[] toCharArray() 字符串转成字符数组

  • byte[] getBytes() 字符串转成字节数组 (查询编码表),平台默认字符集

  • byte[] getBytes(String charsetName) 字符串转成字节数组 (查询编码表),指定编码表

  • static String valueOf(任意类型参数) 参数转成字符串对象

 String类的比较方法

  • int compareTo(String str) 字符串之间的比较,谁大谁小,按照字典顺序(自然顺序)

String类的方法 去空格,替换,切割

  • String trim() 去掉字符串两边空格,中间空格不去掉

  • String replace(String oldString,String newString)替换字符串

  • String[] split("规则字符串") 对字符串进行切割

String类正则表达式相关的功能  

正则表达式 : 专门用于处理字符串的技术 (正则大神)

  • 字符类 :

    • [abc] 字符串的这个位置只能是abc

    • [^abc] 字符串的这个位置不能是abc

    • [a-zA-Z] 字符串的这个位置必须是字母,52个

    • [^a-zA-Z] 字符串的这个位置必须不能是字母,52个

  • 数字类:

    • [0-9] 字符串的这个位置只能是数字

    • [^0-9] 字符串的这个位置不能是数字

    • [\d] 等同于 [0-9]

    • [\D] 等同于 [^0-9]

  • 预定义字符 :

    • . 匹配所有的字符

    • [\d] 等同于 [0-9]

    • [\D] 等同于 [^0-9]

    • [\w] 文字字符,包含数字,字母,下划线 [a-zA-Z0-9_]

    • [\W] 文字字符,不能包含数字,字母,下划线 [^a-zA-Z0-9_]

  • 数量词 :

    • X{m} X这个字符只能出现m次 a{3}

    • X{m,} X这个字符至少出现m次

    • X{m,n} X这个字符至少出现m次,不超过n次

    • X? X这个字符出现一次,或者一次也没有

    • X* X这个字符出现零次或者多次

    • X+ X这个字符出现至少一次

正则表达式的匹配功能,String类的方法matches()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值