首页 > 编程语言 >Java实用类介绍

Java实用类介绍

时间:2024-09-03 17:24:36浏览次数:5  
标签:Java String Color System 介绍 实用 字符串 println out

实用类介绍(一)

为什么需要枚举?

Java 枚举(enum)

Java 枚举是一个特殊的类,一般表示一组常量,比如一年的 4 个季节,一年的 12 个月份,一个星期的 7 天,方向有东南西北等。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。

例如定义一个颜色的枚举类。

enum Color 
{ 
    RED, GREEN, BLUE; 
} 

以上枚举类 Color 颜色常量有 RED, GREEN, BLUE,分别表示红色,绿色,蓝色。

使用实例:

实例

enum Color 
{ 
    RED, GREEN, BLUE; 
} 
  
public class Test 
{ 
    // 执行输出结果
    public static void main(String[] args) 
    { 
        Color c1 = Color.RED; 
        System.out.println(c1); 
    } 
}

执行以上代码输出结果为:

RED

内部类中使用枚举

枚举类也可以声明在内部类中:

实例

public class Test 
{ 
    enum Color 
    { 
        RED, GREEN, BLUE; 
    } 
  
    // 执行输出结果
    public static void main(String[] args) 
    { 
        Color c1 = Color.RED; 
        System.out.println(c1); 
    } 
}

执行以上代码输出结果为:

RED

每个枚举都是通过 Class 在内部实现的,且所有的枚举值都是 public static final 的。

以上的枚举类 Color 转化在内部类实现:

class Color
{
     public static final Color RED = new Color();
     public static final Color BLUE = new Color();
     public static final Color GREEN = new Color();
}

迭代枚举元素

可以使用 for 语句来迭代枚举元素:

实例

enum Color 
{ 
    RED, GREEN, BLUE; 
} 
public class MyClass { 
  public static void main(String[] args) { 
    for (Color myVar : Color.values()) {
      System.out.println(myVar);
    }
  } 
}

执行以上代码输出结果为:

RED
GREEN
BLUE

在 switch 中使用枚举类

枚举类常应用于 switch 语句中:

实例

enum Color 
{ 
    RED, GREEN, BLUE; 
} 
public class MyClass {
  public static void main(String[] args) {
    Color myVar = Color.BLUE;

    switch(myVar) {
      case RED:
        System.out.println("红色");
        break;
      case GREEN:
         System.out.println("绿色");
        break;
      case BLUE:
        System.out.println("蓝色");
        break;
    }
  }
}

执行以上代码输出结果为:

蓝色

values(), ordinal() 和 valueOf() 方法

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。

values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:

  • values() 返回枚举类中所有的值。
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
  • valueOf()方法返回指定字符串值的枚举常量。

实例

enum Color 
{ 
    RED, GREEN, BLUE; 
} 
  
public class Test 
{ 
    public static void main(String[] args) 
    { 
        // 调用 values() 
        Color[] arr = Color.values(); 
  
        // 迭代枚举
        for (Color col : arr) 
        { 
            // 查看索引
            System.out.println(col + " at index " + col.ordinal()); 
        } 
  
        // 使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException 
        System.out.println(Color.valueOf("RED")); 
        // System.out.println(Color.valueOf("WHITE")); 
    } 
}

执行以上代码输出结果为:

RED at index 0
GREEN at index 1
BLUE at index 2
RED

枚举类成员

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。

枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。

实例

enum Color 
{ 
    RED, GREEN, BLUE; 
  
    // 构造函数
    private Color() 
    { 
        System.out.println("Constructor called for : " + this.toString()); 
    } 
  
    public void colorInfo() 
    { 
        System.out.println("Universal Color"); 
    } 
} 
  
public class Test 
{     
    // 输出
    public static void main(String[] args) 
    { 
        Color c1 = Color.RED; 
        System.out.println(c1); 
        c1.colorInfo(); 
    } 
}

执行以上代码输出结果为:

Constructor called for : RED
Constructor called for : GREEN
Constructor called for : BLUE
RED
Universal Color

Java API

常用Java APIjava.langEnum、包装类、Math、String、StringBuffer、System… …

java.util

java.io

java.sql

Java 包装类(Wrapper)

在本教程中,我们将借助示例学习Java 包装类(Wrapper)。

Java中的包装类用于将原始类型(int,char,float等)转换为相应的对象。

8个基本类型中的每一个都有对应的包装器类。

原始类型包装类
byteByte
booleanBoolean
charCharacter
doubleDouble
floatFloat
intInteger
longLong
shortShort

将基本类型转换为包装对象

我们还可以使用valueOf()方法将原始类型转换为相应的对象。

示例1:包装对象的原始类型

示例

class Main {
  public static void main(String[] args) {

    //创建原始类型
    int a = 5;
    double b = 5.65;

    //转换为包装对象
    Integer aObj = Integer.valueOf(a);
    Double bObj = Double.valueOf(b);

    if(aObj instanceof Integer) {
      System.out.println("创建一个Integer对象。");
    }

    if(bObj instanceof Double) {
      System.out.println("创建一个Double对象。");
    }
  }
}

输出结果

创建一个Integer对象。
创建一个Double对象。

在上面的示例中,我们使用了valueOf()将原始类型转换为对象的方法。

在这里,我们使用instanceof运算符来检查生成的对象是否属于Integer或Double类型。

但是,Java编译器可以直接将原始类型转换为相应的对象。例如,

int a = 5;
//转换为对象
Integer aObj = a;

double b = 5.6;
//转换为对象
Double bObj = b;

此过程称为自动装箱。要了解更多信息,请访问Java自动装箱和拆箱

注意:我们还可以使用包装类(Wrapper)构造函数将原始类型转换为包装对象。但是在Java 9之后,不再使用构造函数

注意事项

Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false

当Number包装类构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常

image-20240901161123991 image-20240901161200771
除了 Character 类之外,在 Java 中,其他基本数据类型的包装类可以接受一个字符串作为参数来构造它们的实例。这种构造方法通常被称为该包装类的静态 valueOf(String) 方法。

下面是一些示例:

Integer 类:
	Integer num = Integer.valueOf("123"); // 通过字符串构造 Integer 类的实例
Double 类:
	Double dbl = Double.valueOf("3.14"); // 通过字符串构造 Double 类的实例
Boolean 类:
	Boolean bool = Boolean.valueOf("true"); // 通过字符串构造 Boolean 类的实例
Float 类:
	Float flt = Float.valueOf("3.0"); // 通过字符串构造 Float 类的实例
Long 类:
	Long lng = Long.valueOf("1000"); // 通过字符串构造 Long 类的实例
通过使用这些包装类的 valueOf(String) 方法,你可以将字符串转换为对应的包装类实例,方便地进行数据类型转换和处理。

包装对象成原始类型

要将对象转换为原始类型,我们可以使用每个包装类中对应的值方法(intValue()、doubleValue()等)。

示例2:将包装对象转换为原始类型

示例

Integer integerId=new Integer(25);
int intId=integerId.intValue();

class Main {
  public static void main(String[] args) {

    //创建包装类的对象
    Integer aObj = Integer.valueOf(23);
    Double bObj = Double.valueOf(5.55);

    //转换为原始类型
    int a = aObj.intValue();
    double b = bObj.doubleValue();

    System.out.println("a的值: " + a);
    System.out.println("b的值: " + b);
  }
}

输出结果

a的值: 23
b的值: 5.55

在上面的示例中,我们使用了intValue() 和 doubleValue()方法将Integerand和Double对象转换为相应的原始基本类型。

但是,Java编译器可以自动将对象转换为相应的原始类型。例如,

Integer aObj = Integer.valueOf(2);
//转换为int类型
int a = aObj;

Double bObj = Double.valueOf(5.55);
//转换为double类型
double b = bObj;

此过程称为拆箱。要了解更多信息,请访问Java自动装箱和拆箱

包装类的优点

  • 在Java中,有时我们可能需要使用对象而不是原始数据类型。例如,在使用集合时。

    // 错误
    ArrayList<int> list = new ArrayList<>();
    
    //正常运行
    ArrayList<Integer> list = new ArrayList<>();
    

    在这种情况下,包装器类可以帮助我们将原始数据类型用作对象。

  • 我们可以将空值存储在包装对象中。例如,

    //将生成一个错误
    int a = null;
    
    // 正常运行
    Integer a = null;
    

注意:基本类型比相应的对象更有效。因此,当需要效率时,总是建议使用原始类型。

包装类的常用方法toString()

toString():以字符串形式返回包装对象表示的基本类型数据(基本类型->字符串)
String sex=Character.toString('男');
String id=Integer.toString(25);
String sex='男'+"";
String id=25+"";

包装类的常用方法parseXXX()

parseXXX():把字符串转换为相应的基本数据类型数据(Character除外)(字符串->基本类型)
int num=Integer.parseInt("36");
boolean bool=Boolean.parseBoolean("false");
public static  type parseType(String type)

包装类的常用方法valueOf()

所有包装类都有如下方法(基本类型->包装类)
    public static Type valueOf(type value)
如: Integer intValue = Integer.valueOf(21);

除Character类外,其他包装类都有如下方法(字符串->包装类)
     public static Type valueOf(String s)
如: Integer intValue = Integer.valueOf("21");


装箱和拆箱

Java自动装箱-包装器对象的原始类型

自动装箱中,Java编译器会自动将原始类型转换为其相应的包装器类对象。例如,

int a = 56;
// 自动装箱
Integer aObj = a;

使用Java集合时,自动装箱具有很大的优势。

示例1:Java自动装箱

示例

import java.util.ArrayList;

class Main {
   public static void main(String[] args) {

      ArrayList<Integer> list = new ArrayList<>();

      //自动装箱
      list.add(5);
      list.add(6);

      System.out.println("ArrayList: " + list);
   }
}

输出结果

ArrayList: [5, 6]

在上面的示例中,我们创建了一个Integer类型的数组列表。因此,数组列表只能包含Integer类型的对象。

注意这一行,

list.add(5);

在这里,我们传递原始类型值。但是,由于自动装箱,原始值会自动转换为Integer对象并存储在数组列表中。

Java拆箱-包装器对象为原始类型

image-20240901162619941

拆箱中,Java编译器会自动将包装器类对象转换为其相应的原始类型。例如,

// 自动装箱
Integer aObj = 56;

// 拆箱
int a = aObj;

自动****装箱一样,拆箱也可以与Java集合一起使用。

示例2:Java拆箱

示例

import java.util.ArrayList;

class Main {
   public static void main(String[] args) {

      ArrayList<Integer> list = new ArrayList<>();

      //自动装箱
      list.add(5);
      list.add(6);

      System.out.println("ArrayList: " + list);

      // 拆箱
      int a = list.get(0);
      System.out.println("Value at index 0: " + a);
   }
}

输出结果

ArrayList: [5, 6]
Value at index 0: 5

在上面的示例中,请注意以下行:

int a = list.get(0);

这里,get()方法返回索引0处的对象。但是,由于拆箱,对象被自动转换为原始类型int并分配给变量a。

Math类

Java 的 Math 包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。

Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用。

public class Test {  
    public static void main (String []args)  
    {  
        System.out.println("90 度的正弦值:" + Math.sin(Math.PI/2));  
        System.out.println("0度的余弦值:" + Math.cos(0));  
        System.out.println("60度的正切值:" + Math.tan(Math.PI/3));  
        System.out.println("1的反正切值: " + Math.atan(1));  
        System.out.println("π/2的角度值:" + Math.toDegrees(Math.PI/2));  
        System.out.println(Math.PI);  
    }  
}

以上实例编译运行结果如下:

90 度的正弦值:1.0
0度的余弦值:1.0
60度的正切值:1.7320508075688767
1的反正切值: 0.7853981633974483
π/2的角度值:90.0
3.141592653589793

实用类介绍(二)

Random类

java.util.Random类

Random rand=new Random(); //创建一个Random对象
for(int i=0;i<20;i++){//随机生成20个随机整数,并显示
         int num=rand.nextInt(10);//返回下一个伪随机数,整型的   	System.out.println("第"+(i+1)+"个随机数是:"+num);
} 

注意

用同一个种子值来初始化两个Random 对象,然后用每个对象调用相同的方法,得到的随机数也是相同的

import java.util.Random;

public class Main {
    public static void main(String[] args) {
        long seed = 123; // 定义相同的种子值

        Random random1 = new Random(seed);
        Random random2 = new Random(seed);

        // 使用两个 Random 对象生成随机数
        int randomNumber1 = random1.nextInt(100);
        int randomNumber2 = random2.nextInt(100);

        System.out.println("Random number from random1: " + randomNumber1);
        System.out.println("Random number from random2: " + randomNumber2);
    }
}
在Java中,java.util.Random 类用于生成伪随机数。如果使用相同的种子值(seed)来初始化两个 Random 对象,然后通过这两个对象调用相同的方法,那么生成的随机数序列也将是相同的。

这意味着,如果你在两个 Random 对象上使用相同的种子值,并且以相同的方式调用生成随机数的方法(例如 nextInt()),则两个对象产生的随机数序列将是一样的。这是因为随机数生成器的种子确定了随机数序列的起始点。

String类

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

String类位于java.lang包中,具有丰富的方法计算字符串的长度、比较字符串、连接字符串、提取字符串

		计算字符串的长度
String str = "Hello, World!";
int length = str.length();
System.out.println("String length: " + length); // Output: 13

		比较字符串
String str1 = "apple";
String str2 = "banana";
int result = str1.compareTo(str2);
if (result < 0) {
    System.out.println("str1 is less than str2");
} else if (result > 0) {
    System.out.println("str1 is greater than str2");
} else {
    System.out.println("str1 is equal to str2");
}

		连接字符串
String str1 = "Hello";
String str2 = "World";
String newStr = str1 + " " + str2;
System.out.println("Concatenated string: " + newStr); // Output: Hello World

		提取字符串
String str = "Quick brown fox";
String subStr = str.substring(6, 11); // Extracting "brown"
System.out.println("Subtring: " + subStr);

		比较两个字符串是否相等
String 类提供了 equals() 方法用于比较两个字符串是否相等。这个方法是用来比较字符串对象的内容是否相同,而不是比较引用是否相等。
示例代码如下:
String str1 = "hello";
String str2 = "Hello";
if (str1.equals(str2)) {
    System.out.println("The strings are equal.");
} else {
    System.out.println("The strings are not equal.");
}

equals()方法比较原理

image-20240901164436637

字符串比较的其他方法

*使用equalsIgnoreCase()忽略大小写*

使用toLowerCase()小写

使用toUpperCase()大写

字符串连接

		方法1:使用“+” 运算符连接字符串
String str1 = "Hello";
String str2 = "World";
String result = str1 + " " + str2;
System.out.println("Concatenated string using '+': " + result); // Output: Hello World
		方法2:使用 String 类的 concat() 方法连接字符串
String str1 = "Hello";
String str2 = "World";
String result = str1.concat(" ").concat(str2);
System.out.println("Concatenated string using 'concat()': " + result); // Output: Hello World

这两种方法都可以用来连接两个字符串。第一种方法使用了加号运算符(+),而第二种方法使用了 String 类的 concat() 方法。这两种方法的效果是一样的,都会将两个字符串连接起来形成一个新的字符串。

字符串常用提取方法

方法名说明
public int indexOf(int ch)搜索第一个出现的字符ch(或字符串value),如果没有找到,返回-1
public int indexOf(String value)搜索第一个出现的字符串value,如果没有找到,返回-1
public int lastIndexOf(int ch)搜索最后一个出现的字符ch(或字符串value),如果没有找到,返回-1
public int lastIndexOf(String value)搜索最后一个出现的字符串value,如果没有找到,返回-1
public String substring(int index)提取从位置索引index开始的字符串部分
public String substring(int beginindex, int endindex)提取beginindexendindex之间的字符串部分
public String trim()返回一个前后不含任何空格的调用字符串的副本

这是一个表格形式的 String 类方法说明,包括了 indexOflastIndexOfsubstringtrim 方法。

    String str = "  Hello, World!  ";
    String trimmedStr = str.trim();
    System.out.println("Original String: "" + str + "");
    System.out.println("Trimmed String: '" + trimmedStr + "'");
在上面的示例中,我们演示了如何使用 trim() 方法去除字符串两端的空格。原始字符串是 " Hello, World! ",使用 trim() 方法后得到的修剪后的字符串是 "Hello, World!"。

标签:Java,String,Color,System,介绍,实用,字符串,println,out
From: https://blog.csdn.net/m0_64208396/article/details/141866715

相关文章

  • Java内存泄露诊断与预防策略
    Java内存泄露诊断与预防策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java应用开发中,内存泄露是一个常见且棘手的问题。它不仅会导致应用性能下降,还可能引起应用崩溃。因此,了解如何诊断和预防内存泄露至关重要。内存泄露的定义内存泄露发生......
  • 智慧安防EasyCVR新版本(V3.6.0)播放鉴权与播放限制时长的区别介绍
    随着科技的飞速发展,视频技术已成为现代社会不可或缺的一部分,广泛应用于安防监控、娱乐传播、在线教育、电商直播等多个领域。EasyCVR视频汇聚平台作为视频技术的佼佼者,不断推陈出新,通过功能更新迭代,为用户提供更加高效、智能、稳定的视频解决方案。有用户部署EasyCVR视频汇聚平......
  • Java代码的静态分析:提高代码质量和安全性
    Java代码的静态分析:提高代码质量和安全性大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在软件开发过程中,代码质量与安全性至关重要。静态代码分析是一种在不运行代码的情况下,通过自动化工具检查代码中潜在的错误和安全漏洞的方法。Java作为一种广泛......
  • Java API设计原则:创建易于理解和使用的接口
    JavaAPI设计原则:创建易于理解和使用的接口大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java编程中,设计易于理解和使用的API是非常重要的。良好的API设计不仅能提高开发效率,还能减少错误和提高代码质量。本文将探讨一些关键的API设计原则和实践......
  • Java中的设计模式:面向对象设计的实用技巧
    Java中的设计模式:面向对象设计的实用技巧大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!设计模式是软件工程中被广泛应用的一系列最佳实践,它们可以帮助解决常见的软件设计问题。在Java中,设计模式尤其重要,因为它们提供了一套标准的方法来创建灵活且可......
  • Java基础-学习笔记16
    16线程(基础)1.相关概念进程:进程是程序的一次执行过程,或是正在运行的一个程序。是多态过程,有它自身的产生、存在和消亡的过程。(比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存看见。当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间。进程一旦中......
  • Java数据库连接池的优化与配置
    Java数据库连接池的优化与配置大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!数据库连接池是现代Java应用中不可或缺的一部分,它允许多个用户共享一个固定数量的数据库连接,显著提高了应用程序的性能和可扩展性。本文将探讨如何优化和配置Java数据库连......
  • java+springboot权限的设计(用户、角色、权限)和前端如何渲染用户所对应的权限菜单
    记得当时在学校的时候,觉得这个实现起来真的超级困难,想想就头大,毫无头绪,即便那时候去查资料看了很多大佬写的文章,看的时候感觉恍然大悟,直拍大腿,但是当我想要动手自己去做的时候,又不知道从哪开始切入,于是一直没有动手去做,直到最近在实习的时候,给了我这个任务,当我带着恐惧去自......
  • javascript变量
    定义变量var声明变量的关键字vara;vara=10;varb=20.8;varc="demo";定义时不区分数据类型,但是使用时存在类型的区分变量类型:①基本类型:(零零散散不可拆分)数字类型1010.6字符串"aa"'aaa'布尔类型真/假true/falseundefined类型即声明变量但不进行赋......
  • Java基础 韩顺平老师的 泛型 的部分笔记
    553,泛型引入packagecom.hspedu.list_;importjava.util.*;importjava.util.concurrent.CompletionService;@SuppressWarnings({"all"})publicclassMap_{publicstaticvoidmain(String[]args){//使用传统的方法来解决ArrayListarrayLis......