实用类介绍(一)
为什么需要枚举?
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个基本类型中的每一个都有对应的包装器类。
原始类型 | 包装类 |
---|---|
byte | Byte |
boolean | Boolean |
char | Character |
double | Double |
float | Float |
int | Integer |
long | Long |
short | Short |
将基本类型转换为包装对象
我们还可以使用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异常
除了 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拆箱-包装器对象为原始类型
在拆箱中,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()方法比较原理
字符串比较的其他方法
*使用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) | 提取beginindex 和endindex 之间的字符串部分 |
public String trim() | 返回一个前后不含任何空格的调用字符串的副本 |
这是一个表格形式的 String
类方法说明,包括了 indexOf
、lastIndexOf
、substring
和 trim
方法。
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