码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java-------实现类(进阶)


     

     

     目录

    1 枚举概述

    2. 包装类

    2.1、 包装类概述

    2.2 包装类和基本数据类型的转换

    包装类把基本类型数据转换为对象

    每个基本类型在java.lang包中都有一个相应的包装类

    包装类的作用 提供了一系列实用的方法

    集合不允许存放基本数据类型数据,存放数字时,要用包装类型

    3.1 Math类

    (1)java.lang.Math类提供了一些基本数学运算和几何运算的方法。

    (2)此类中的所有方法都是静态的。这个类是final类,因此没有子类。

    (3)Math类常见方法如下:

    -->static double abs(double a):返回double值的绝对值。例如,Math.abs(-3.5)返回3.5。

    -->static double max(double a,double b):返回两个double值中较大的一个。例如,Math.max(2.5,90.5);返回90.5。

    -->static double random():返回一个随机的double值,该值大于等于0.0且小于1.0。

     用法代码;

    (4)随机获取一个[num1,num2)之间的整数(num2>num1)公式:        int num = (int)(Math.random()*(num2-num1)+num1);

    4、 String类概述

    (1)在Java中,字符串被作为String类型的对象来处理。

    (2)String类位于java.lang包中,默认情况下,该包被自动导入所有的程序。

    (3)创建String对象的方法如下代码所示

    String s = "Hello World";

    String s = new String("Hello World");

    (4)String类提供了许多有用的方法来操作字符串,比如获取字符串长度、对两个字符串进行比较、连接两个字符串以及提取一个字符串中的某一部分。

    (5)字符串是一个字符序列,每一个字符都有自己的位置,字符串事实上也是一个字符数组,因此它的索引位置从0开始到(字符串长度-1)结束。

    4、1  String类常用方法

    (1)求字符串长度:length()

    (2)字符串比较:equals(字符串2)

    (3)忽略带小写的字符串比较:equalsIgnoreCase(字符串2)

    (4)转换字符串中的英文字符为小写:toLowerCase()

    (5)转换字符串中的英文字符为大写:toUpperCase()

    (6)字符串的连接:concat(字符串2)

    (7)字符串提取和查询

    (8)字符串拆分:split(separator,limit)

    -->separator是可选项,表示根据匹配指定的正则表达式来拆分此字符串。如果匹配不上,则结果数组只有一个元素,即此字符串。

    -->limit可选项,该值用来限制返回数组中的元素个数。

    4、2使用StringBuffer类处理字符串

    (1)StringBuffer类也是Java提供的用于处理字符串的一个类,而且它是比String类更高效的存储字符串的一种引用数据类型。

    (2)StringBuffer类对字符串进行连接操作时,使用StringBuffer类可以大大提高程序的执行效率。

    (3)如何使用StringBuffer类

    StringBuffer类位于java.util包中,是String类的增强类。StringBuffer类提供了很多方法可供使用。

    StringBuffer 对象名 = new StringBuffer("字符串内容");

    (4)常用的StringBuffer类方法

    1)toString()方法:将StringBuffer类型的字符串转换为String类型的对象。

    2)append(参数)方法:将参数连接到字符串后,可以将任何类型的值追加到字符串后。

    3)insert(位置,参数)方法:将参数插入到字符串指定位置后并返回。参数值可以是包括String的任何类型。

    4、3使用StringBuilder类处理字符串

    (1)java.lang.StringBuilder是JDK 5.0版本新增的类,它是一个可变的字符序列。

    (2)此类提供一个与StringBuffer类兼容的API,被设计用作StringBuffer类的一个简易替换,在大多数实现中,它比StringBuffer执行要快。

    (3)使用StringBuilder类处理字符串的方法与StringBuffer类基本一样。

    4、4 String类、StringBuffer类及StringBuilder类对比

    String、StringBuffer、StringBuilder这3个类在处理字符串时有各自的特点和实用场合,具体如下:

    (1)String:字符串常量

    String是不可变的对象,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,然后指向新的String对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响。

    (2)StringBuffer:字符串变量

    StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以,在字符串对象经常改变的情况下,推荐使用StringBuffer类。

    (3)StringBuilder:字符串变量

    JDK 5.0版本以后提供了StringBuilder类,它和StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder类是单线程的,不提供同步,理论上效率更高。


    1、 枚举概述

    (1)从Java SE 5.0开始,Java程序设计语言引入了一种新的类型——枚举(Enum)。

    (2)枚举是指由一组固定的常量组成的类型。使用关键字enum定义。

    (3)定义枚举语法格式如下:

    [Modifer] enum enumName{

    enumContantName[,enumContantName2...[;]]

    //[field,method]

    }

    -->Modifer是访问修饰符,如public等。

    -->enum是关键字。

    -->enumContantName[,enumContantName2...[;]]表示枚举常量列表,枚举常量之间以逗号隔开。

    -->//[field,method]表示其他的成员,包括构造方法,置于枚举常量的后面。

    -->在枚举中,如果除了定义枚举常量,还定义了其他成员,则枚举常量列表必须以分号(;)结尾。

    (4)枚举其实就是一种类型,是java.lang.Enum类的子类,继承了Enum类的许多有用的方法。

    2. 包装类

    2.1、 包装类概述

    (1)Java语言是面向对象的,但是Java中的基本数据类型却不是面向对象的,这在实际开发中存在很多的不便。为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类,称为包装类。

    (2)包装类均为java.lang包中,包装类和基本数据类型的对应关系如下表所示。

     

    (3)包装类的用途主要有两个:

            -->包装类作为和基本数据类型对应的类存在,方便对象的操作。

    -->包装类包含每种基本数据类型的相关属性,如最大值、最小值等,以及相关的操作方法。

     

    2.2 包装类和基本数据类型的转换

    (1)基本数据类型转换为包装类

    在Java中,基于基本数据类型数据创建包装类对象通常可以采用如下两种方式。

    1)使用包装类的构造方法

    -->public Type(type value)。

    -->public Type(String value)。

    其中,Type表示包装类,参数type为基本数据类型。

    1. /* 所有包装类都可将与之对应的基本数据类型作为参数
    2. ,来构造它们的实例*/
    3. byte num1 = 10;
    4. Byte byte1 = new Byte(num1);//------------------->首字母大写
    5. System.out.println(byte1);
    6. short num2 = 100;
    7. Short short1 = new Short(num2);
    8. int num3 = 200;
    9. Integer int1 = new Integer(num3);
    10. long num4=300;
    11. Long Long=new Long(num4);
    12. double num5=12.4;
    13. Double double1=new Double(num5);
    14. char num6 = '我';
    15. Character cha=new Character(num6);
    16. Integer int2=new Integer("123");
    17. System.out.println(int2);
    18. Short short2 =new Short("122");
    19. System.out.println(short2);
    20. Byte byte2 = new Byte("11");
    21. System.out.println(byte2);
    22. Long long2 = new Long("456");
    23. System.out.println(long2);

    不能使用第二种构造方法创建Character类的包装类对象,只能是Character charValue = new Character('x')这种形式。

    2)使用包装类的valueOf()方法

    a)包装类中一般包含静态的重载的valueOf()方法,它可以接收基本数据类型数据和字符串作为参数并返回包装类的对象。

    b)以Integer包装类为例,valueOf()方法的定义如下表所示

     c)Character类的valueOf()方法只有一个版本的定义,即valueOf(char c),它返回一个表示指定char值的Character对象。

    (2)包装类转换成基本数据类型

    包装类转换成基本数据类型通常采用如下的方法:public type typeValue();

    其中,type指的是基本数据类型,如byteValue()、charValue()等,相应的返回值为byte、char。

    1. // 包装类常用方法
    2. //XXXValue():包装类转换成基本类型
    3. Integer int1=new Integer("100");
    4. System.out.println(int1);
    5. System.out.println("***********");
    6. int num1=int1.intValue();
    7. System.out.println(num1);
    8. Double double1 =new Double("10.0");
    9. double num2=double1.doubleValue();
    10. System.out.println(num2);

     

    (3)基本类型和包装类的自动转换

    1)在Java SE 5.0版本之后程序员不需要编码实现基本数据类型和包装类之间的转换,编译器会自动完成。

    Integer intObject = 5; //装箱:基本数据类型转换为包装类

    int intValue = intObject; //拆箱:包装类转换为基本数据类型

    1. package deno02;
    2. public class demo04 {
    3. public static void main(String[] args) {
    4. // 包装类和基本数据的自动转换
    5. //装箱----------基本----->包装类
    6. int num1=10; //基本
    7. Integer int1 =num1; //包装类
    8. //拆箱----------->包装类--->基本
    9. Character char1=new Character('a');
    10. char num2=char1;
    11. Integer int2= new Integer(10);
    12. int num3=10;
    13. //运算-----------》直接进行数学运算
    14. Integer int3 = new Integer(300);
    15. int num5 = 300;
    16. Integer int4 =int3+num5; //--------->类的add
    17. int sum =int3+num5; //---------->
    18. }
    19. }

    2)虽然Java平台提供了基本数据类型和包装类的自动转换功能。程序员在程序中也不能只使用对象,而抛弃了基本数据类型。

    3)包装对象只有在基本数据类型需要用对象表示时才使用,包装类并不是用来取代基本数据类型的。

     

    1. 包装类把基本类型数据转换为对象

    2. 每个基本类型在java.lang包中都有一个相应的包装类

    3. 包装类的作用 提供了一系列实用的方法

    4. 集合不允许存放基本数据类型数据,存放数字时,要用包装类型

     

    3.1 Math类

    (1)java.lang.Math类提供了一些基本数学运算和几何运算的方法。


    (2)此类中的所有方法都是静态的。这个类是final类,因此没有子类。


    (3)Math类常见方法如下:

    -->static double abs(double a):返回double值的绝对值。例如,Math.abs(-3.5)返回3.5。

     //求一个数的绝对值,正数的绝对值是它本身,负数的绝对值是其相反数
            System.out.println(Math.abs(100));
            System.out.println(Math.abs(-100));

    -->static double max(double a,double b):返回两个double值中较大的一个。例如,Math.max(2.5,90.5);返回90.5。

         //求最大值和最小值
            System.out.println(Math.max(25, 18));
            System.out.println(Math.min(99, 33));

    -->static double random():返回一个随机的double值,该值大于等于0.0且小于1.0。

     用法代码;

    1. package deno04;
    2. import java.util.Random;
    3. public class RandomDemo01 {
    4. public static void main(String[] args) {
    5. //创建Random类对象
    6. Random random = new Random();//------------导包
    7. //获取随机数
    8. // int int1=random.nextInt();
    9. // System.out.println(int1);
    10. int int2=random.nextInt(10);//-------------->int在10 以内的随机数
    11. System.out.println(int2);
    12. System.out.println("***");
    13. long long1=random.nextLong();
    14. System.out.println(long1);



    (4)随机获取一个[num1,num2)之间的整数(num2>num1)公式:
            int num = (int)(Math.random()*(num2-num1)+num1);

    1. //求随机数
    2. //Math.random():返回一个[0.0,1.0)之间的double类型数据
    3. double random1 = Math.random();
    4. System.out.println(random1);
    5. //Math.random()*10:返回一个[0.0,10.0)之间的double类型的数据
    6. double random2 = Math.random()*10;
    7. System.out.println(random2);
    8. //(int)(Math.random()*10):返回一个[0,10)之间的int类型的数据
    9. int random3 = (int)(Math.random()*10);
    10. System.out.println(random3);
    11. //(int)(Math.random()*(num2-num1)+num1):返回一个[num1,num2)(num2>num1)之间的int类型的数据
    12. //随机获取一个[63,81)之间的int类型的数据
    13. int random4 =(int)(Math.random()*(81-63)+63);
    14. System.out.println(random4);

     

    4、 String类概述

    (1)在Java中,字符串被作为String类型的对象来处理。

    (2)String类位于java.lang包中,默认情况下,该包被自动导入所有的程序。

    (3)创建String对象的方法如下代码所示

    String s = "Hello World";

    String s = new String("Hello World");

    (4)String类提供了许多有用的方法来操作字符串,比如获取字符串长度、对两个字符串进行比较、连接两个字符串以及提取一个字符串中的某一部分。

    (5)字符串是一个字符序列,每一个字符都有自己的位置,字符串事实上也是一个字符数组,因此它的索引位置从0开始到(字符串长度-1)结束。


    4、1  String类常用方法

    (1)求字符串长度:length()

    (2)字符串比较:equals(字符串2)

    (3)忽略带小写的字符串比较:equalsIgnoreCase(字符串2)

    (4)转换字符串中的英文字符为小写:toLowerCase()

    (5)转换字符串中的英文字符为大写:toUpperCase()

    (6)字符串的连接:concat(字符串2)

    (7)字符串提取和查询

    (8)字符串拆分:split(separator,limit)

    -->separator是可选项,表示根据匹配指定的正则表达式来拆分此字符串。如果匹配不上,则结果数组只有一个元素,即此字符串。

    -->limit可选项,该值用来限制返回数组中的元素个数。

    4、2使用StringBuffer类处理字符串

    (1)StringBuffer类也是Java提供的用于处理字符串的一个类,而且它是比String类更高效的存储字符串的一种引用数据类型。

    (2)StringBuffer类对字符串进行连接操作时,使用StringBuffer类可以大大提高程序的执行效率。

    (3)如何使用StringBuffer类

    StringBuffer类位于java.util包中,是String类的增强类。StringBuffer类提供了很多方法可供使用。

    StringBuffer 对象名 = new StringBuffer("字符串内容");

    (4)常用的StringBuffer类方法

    1)toString()方法:将StringBuffer类型的字符串转换为String类型的对象。

    2)append(参数)方法:将参数连接到字符串后,可以将任何类型的值追加到字符串后。

    3)insert(位置,参数)方法:将参数插入到字符串指定位置后并返回。参数值可以是包括String的任何类型。


    4、3使用StringBuilder类处理字符串

    (1)java.lang.StringBuilder是JDK 5.0版本新增的类,它是一个可变的字符序列。

    (2)此类提供一个与StringBuffer类兼容的API,被设计用作StringBuffer类的一个简易替换,在大多数实现中,它比StringBuffer执行要快。

    (3)使用StringBuilder类处理字符串的方法与StringBuffer类基本一样。


    4、4 String类、StringBuffer类及StringBuilder类对比

    String、StringBuffer、StringBuilder这3个类在处理字符串时有各自的特点和实用场合,具体如下:


    public class StringDemo01 {

        public static void main(String[] args) {
            // 创建String类对象
            String str1 = new String("qwertyuiop");
            String str2 = "QWErtyuiop";
            
            //String类中包含很多方法实现不同的功能
            //char charAt(int index) 返回指定索引处的 char 值。 
            char ch1 =str1.charAt(2);
            System.out.println("下标为2的字符:"+ch1);
            
            //int length() 返回此字符串的长度。 
            int length =str1.length();
            System.out.println("str1的长度:"+length);
            
            // boolean equals(Object anObject) 将此字符串与指定的对象比较。  String类中重写了Object类中的equals()方法,比较的是两个字符串的内容是否相同
            boolean result =str1.equals(str2);
            System.out.println("str1和str2字符串内容相同:"+result);
            // boolean equalsIgnoreCase(String anotherString) 将此 String 与另一个 String 比较,不考虑大小写 
            System.out.println("str1和str2字符串内容相同:"+str1.equalsIgnoreCase(str2));
            
            String str3 = "QWERT";
            String str4 = "asdfg";
            // String toLowerCase() 将此 String 中的所有字符都转换为小写 
            //String toUpperCase() 将此 String 中的所有字符都转换为大写。 
            String newStr3 =str3.toLowerCase();
            System.out.println(str3);
            System.out.println(newStr3);
            System.out.println(str4.toUpperCase());
            System.out.println(str4);
            

    (1)String:字符串常量

    String是不可变的对象,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,然后指向新的String对象,所以经常改变内容的字符串最好不要用String类型,因为每次生成对象都会对系统性能产生影响。

    (2)StringBuffer:字符串变量

    StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以,在字符串对象经常改变的情况下,推荐使用StringBuffer类。

    public class StringBufferDemo01 {

        public static void main(String[] args) {
        
            StringBuffer sb1 = new StringBuffer("qwertyuiop");
            
            StringBuffer sb2 = sb1.append("asdfg");
            System.out.println(sb1);
            System.out.println(sb2);
            
            StringBuffer sb3 = sb1.delete(2, 5);
            System.out.println(sb1);        //qwyuiopasdfg
            System.out.println(sb3);
            
            sb1.insert(3, "opq");
            System.out.println(sb1);//qwyopquiopasdfg
            
            sb1.reverse();
            System.out.println(sb1);
            
            /*
             * 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,
             * 但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。
             * 如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。 
             * 在 StringBuilder 上的主要操作是 append 和 insert 方法,可重载这些方法,以接受任意类型的数据。
             * 每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串生成器中。
             * append 方法始终将这些字符添加到生成器的末端;而 insert 方法则在指定的点添加字符
             */
            

    (3)StringBuilder:字符串变量

    JDK 5.0版本以后提供了StringBuilder类,它和StringBuffer类等价,区别在于StringBuffer类是线程安全的,StringBuilder类是单线程的,不提供同步,理论上效率更高。

  • 相关阅读:
    C++:string的模拟实现
    CV计算机视觉每日开源代码Paper with code速览-2023.11.6
    AUTOSAR汽车电子嵌入式编程精讲300篇-基于 FIFO 和优先级序列 CAN 总线系统(续)
    halcon 图像拼接
    selenium
    客服必看:售后话术
    python使用grpc
    数据迁移任务配置向导
    零基础自学javase黑马课程第十六天
    iOS开发之Undefined symbol:_OBJC_CLASS_$_****
  • 原文地址:https://blog.csdn.net/m0_73312013/article/details/127096082
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号