文章目录
1.枚举
枚举指由一组固定的常量组成的类型
枚举优点:
1.枚举可以使代码易于维护,保证类型安全。
2.枚举易于输入,使用枚举赋值,只需要输入枚举名,然后输入点操作符就能将所有的值显示出来。
3.枚举使代码更清晰,允许使用描述性的名称表示数据,使用时直观方便。
2.包装类
包装类基本概念:
Java语言是面向对象的,但是Java中的基本数据类型却不是面向对象的,这在实际开发中存在很多的不便。为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类,称为包装类。
每个基本类型在java.lang包中都有一个相应的包装类。
包装类有何作用:
1.提供了一系列实用的属性和方法,方便对象的操作。
2.集合不允许存放基本数据类型数据,存放数字时,要用包装类型。
1.包装类的构造方法
所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例。
包装类的构造方法有两种形式:
方式1:public Type(type value)基本数据类型
Type表示包装类,参数type为基本数据类型。
例如:Integer i=new Integer(520);
方式2:public Type(String value)引用数据类型
除Character类外其他包装类可将一个字符串作为参数构造它们的实例 Type表示包装类,参数type为基本数据类型。
例如:Integer i=new Integer(“520”);
1.Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false。
2.当包装类构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译通过,运行时NumberFormatException异常。
2.包装类的常用方法
1.所有包装类都有如下方法:
public static Type valueOf(type value)
例如:Integer i=Integer.valueOf(520);
2.除Character类外,其他包装类都有如下方法:
public static Type valueOf(String value)
例如:Integer i=Integer.valueOf(“520”);
3.XXXValue()方法:包装类转换成基本类型:
例如:Integer num=new Integer(20);
int age=num.intValue()
4.所有包装类都有如下方法(Character类除外):
public static 基本数据类型 parseXXX(String value)
byte b=Byte.parseByte(“125”);
short s=Short.parseShort(“3256”);
int num=Integer.parseInt(“36”);
long l=Long.parseLong(“123456789”);
float f=Float.parseFloat(“3.14”);
final double PI=Double.parseDouble(“3.14159”);
boolean bool=Boolean.parseBoolean(“false”);
parseXXX()方法的作用:把字符串转换为相应的基本数据类型数据。
5.toString()方法:以字符串形式返回包装对象表示的基本类型数据:
byte bt=12;
String b=Byte.toString(bt);
short sh=25;
String s=Short.toString(sh);
String num=Integer.toString(520);
String l=Long.toString(123456789l);
String f=Float.toString(3.14f);
String PI=Double.toString(3.1415926d);
String bool=Boolean.toString(false);
3.拆箱和装箱
Java 5.0版本以后,程序员不需要编码实现基本数据类型和包装类之间的转换,编译器会自动完成。
装箱:基本类型转换为包装类的对象
拆箱:包装类对象转换为基本类型
例如: Integer intObj=5; //装箱
int intValue=intObj; //拆箱
4.包装类特点
1.所有包装类都是final类型,不能创建它们的子类。
2.Java 5.0版本以后,程序员不需要编码实现基本数据类型和包装类之间的转换,编译器会自动完成。
3.JDK1.5后,允许基本数据类型和包装类型进行混合数学运算。
3.包装类并不是用来取代基本数据类型的
4.在基本数据类型需要用对象表示时使用
3.Math类
4.Random类
5.String类(重要)
1.字符串链接
两种方法:
使用 + 运算符
int score=80;
String info=“成绩”+score;
使用String类的concat()方法
String s = new String(“你好,”);
String name = new String(“张三!”);
String sentence = s.concat(name);
System.out.println(sentence);
2.字符串的搜索和提取方法
3.StringBuffer类
StringBuffer类:
StringBuffer类位于java.util包中,是String类的增强类。
对字符串频繁修改时,使用StringBuffer类可以大大提高程序执行效率。
StringBuffer类的常用构造方法:
StringBuffer strb = new StringBuffer();
StringBuffer strb = new StringBuffer(“abc”);
StringBuffer类的常用方法:
strb.toString(); //将StringBuffer类型的字符串转化为String类型的对象返回
strb.append(Object obj); //将参数连接到字符串后并返回 strb.insert (int offset,
Object obj); //将参数插入到字符串指定位置后并返回
6.面试题(Stringbuffer和StringBuider和String类的区别)
1:String是不可变对象,在每次对String类型进行改变时其实都等同于生成了一个新的String对象,然后再指向新的String对象。
2:经常改变内容的字符串最好不要使用String,因为每次生成对象都会对系统性能产生影响。
1:StringBuffer是可变的字符串,在每次对StringBuffer对象进行改变时,会对StringBuffer对象本身进行操作,而不是生成新的对象。
2:字符串经常改变的情况可使用StringBuffer,执行效率要比String类高。
1:JDK5.0后提供了StringBuilder,等价StringBuffer 。 2:区别:StringBuffer类是线程安全的,
2:StringBuilder类是单线程,不提供同步,理论上效率更高。
7.Calendar类
Calendar类是抽象类:用于设置和获取日期/时间数据的特定部分。
Calendar类提供一些方法和静态字段来操作日历。
(练习1)邮箱注册验证
模拟实现邮箱会员注册,要求:
邮箱地址(6~18个字符,可使用字母、数字、下划线,需以字母开头)
密码(长度为6-16个字符,可使用字母、数字)
两次输入密码,必须相同
验证码(系统随机产生4位数字验证码)
验证都通过,提示注册成功
验证不通过,将所有的提示信息统一显示
代码如下:
package com.bdqn.day04;
import sun.security.util.Password;
import java.util.*;
import java.util.regex.Pattern;
/**
* @author Xunan
* @version 1.0.0
* @authorDesc 诸神在上,佑我程序,玄功护体,BUG皆去!
* @date 2022-08-09 17:22:58
* @description
*/
public class VipLoginTest {
public static void main(String[] args) {
System.out.println("********************网易邮箱注册*******************");
Scanner input = new Scanner(System.in);
System.out.println("请输入邮箱地址:");
String emails = input.nextLine();
String str1 = ("^(\\w+([-.][A-Za-z0-9]+)*){3,18}@\\w+([-.][A-Za-z0-9]+)*\\.\\w+([-.][A-Za-z0-9]+)*$");
System.out.println("请输入密码:");
String pass = input.next();
System.out.println("第一次输入密码为:" + pass);
if (pass != null && !"".equals(pass) && (pass.length() > 6 || pass.length() < 16)) {
System.out.println("请再次输入密码,并和第一次一样:");
pass = input.next();
}
String remember = num(6);
System.out.println("生成验证码" + remember);
System.out.println("请输入验证码:");
String sckey = input.next();
if (remember.equalsIgnoreCase(sckey)) {
System.out.println("没毛病");
} else {
System.out.println("有毛病");
}
if (pass.equals(pass)) {
System.out.println("密码一致正确");
} else {
System.out.println("两次密码不一致");
}
if (emails.matches(str1)) {
System.out.println("正确");
} else {
System.out.println("错误");
}
}
//生成随机数
public static String num(int line) {
//记录
String remember = "";
Random random = new Random();
for (int i = 0; i < line; i++) {
int type = random.nextInt(3);
switch (type) {
case 0:
char c = (char) (random.nextInt(26) + 65);
remember += c;
break;
case 1:
char c1 = (char) (random.nextInt(26) + 97);
remember += c1;
break;
case 2:
remember += random.nextInt(10);
break;
}
}
return remember;
}
}