文章目录
第二章 实用类介绍
1、枚举(enum)
枚举指由一组固定的常量组成的类型
//定义一个性别枚举
public enum Genders{
Male,Female
}
//sex:枚举类型的变量
public class Student{
public Genders sex;
public static void main(String[] args) {
Student stu = new Student();
stu.sex = Genders.Male; // 将枚举类型的Male赋值给stu对象的 sex属性
System.out.println(stu.sex);
}
}
Java API
常用Java API :
java.lang
Enum、包装类、Math、String、StringBuffer、System…
java.util
java.io
java.sql
…
2、包装类
包装类把基本类型数据转换为对象
每个基本类型在java.lang包中都有一个相应的包装类
在基本数据类型需要用对象表示时使用
1.包装类的作用
- 提供了一系列实用的方法
- 集合不允许存放基本数据类型数据,存放数字时,要用包装类型
2.包装类的构造方法
- 所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例
public Type(type value):
Integer i = new Integer(1);
- 除Character类外,其他包装类可将一个字符串作为参数构造它们的实例
public Type(String value);
Integer i = new Integer("123");
注意事项:
- Boolean类构造方法参数为String类型时,若该字符串内容为true(不考虑大小写),则该Boolean对象表示true,否则表示false
- 当Number包装类构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常
3.包装类的常用方法
-
XXXValue():包装类转换成基本类型
Number:
byteValue()、intValue()、longValue()、shortValue()、doubleValue()、floatValue()、charValue()、booleanValue()
Integer integerId = new Integer(25); int intId = integerId.intValue();
Character:
Boolean
-
toString():以字符串形式返回包装对象表示的基本类型数据(基本类型->字符串)
String sex = Character.toString('男'); String id = Integer.toString(25); String sex='男'+""; String id=25+"";
-
parseXXX():把字符串转换为相应的基本数据类型数据(Character除外)(字符串->基本类型)
int num=Integer.parseInt("36"); public static type parseType(String type): boolean bool=Boolean.parseBoolean("false");
-
valueOf()
所有包装类都有如下方法(基本类型->包装类)
public static Type valueOf(type value): Integer intValue = Integer.valueOf(21);
除Character类外,其他包装类都有如下方法(字符串->包装类)
public static Type valueOf(String s): Integer intValue = Integer.valueOf("21");
3、装箱和拆箱
本质:基本类型和包装类的自动转换
装箱:基本类型转换为包装类的对象
拆箱:包装类对象转换为基本类型的值
Integer intObject = 5;
int intValue = intObject;
4、Math类
java.lang.Math类提供了常用的数学运算方法和两个静态常量E(自然对数的底数) 和PI(圆周率)
Math.abs(-3.5); //返回3.5
Math.max(2.5, 90.5);//返回90.5
//Math.random()获取0-1之间的随机数
int random = (int) (Math.random() * 10); //生成一个0-9之间的随机数
5、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 对象,然后用每个对象调用相同的方法,得到的随机数也是相同的
//20~35之间的随机数
Random random = new Random();
int i = random.nextInt((35-20)+1)+20;
System.out.println(i);
6、String类
使用String对象存储字符串:
String s = "Hello World";
String s = new String();
String s = new String("Hello World");
String类位于java.lang包中,具有丰富的方法:
计算字符串的长度、比较字符串、连接字符串、提取字符串
-
length()方法
String类提供了length()方法,确定字符串的长度
System.out.print("请输入用户名:"); String name = scanner.next(); System.out.println(name.length()); System.out.print("请输入密码:"); String pwd = scanner.next(); if(pwd.length()< 6) { System.out.println("密码长度不能小于6位!"); }
-
equals()方法
if (name.equals("TOM")&&pwd.equals("1234567")){ System.out.println("登陆成功!"); }else { System.out.println("用户名或密码不匹配,登陆失败!"); } equals():检查组成字符串内容的字符是否完全一致 ==:判断两个字符串在内存中的地址,即判断是否是同一个字符串对象
字符串比较的其他方法:
使用equalsIgnoreCase() 忽略大小写
使用toLowerCase()小写
使用toUpperCase()大写
-
字符串连接
//使用“+” String name1 = "张"; String name2 = "三"; String name = name1+name2; System.out.println(name); //使用String类的concat()方法 String name3 = name1.concat(name2); System.out.println(name3);
-
字符串常用提取方法
方法名 说明 public int indexOf(int ch) 搜索第一个出现的字符ch(或字符串value),如果没有找到,返回-1 public int indexOf(String value) 搜索第一个出现的字符ch(或字符串value),如果没有找到,返回-1 public int lastIndexOf(int ch) 搜索最后一个出现的字符ch(或字符串value),如果没有找到,返回-1 public int lastIndexOf(String value) 搜索最后一个出现的字符ch(或字符串value),如果没有找到,返回-1 public String substring(int index) 提取从位置索引开始的字符串部分 public String substring(int beginindex, int endindex) 提取beginindex和endindex之间的字符串部分 public String trim() 返回一个前后不含任何空格的调用字符串的副本 //字符串常用提取方法 String con = " abcdefgabsd "; System.out.println("****indexOf(int ch)******"); //字符串 int index = con.indexOf("cde"); System.out.println(index); //字符 index = con.indexOf('s'); System.out.println(index); System.out.println("****lastIndexOf(int ch)******"); //字符 index = con.lastIndexOf('b'); System.out.println(index); //字符串 index = con.lastIndexOf("ab"); System.out.println(index); System.out.println("****substring(int index)******"); String str = con.substring(7); System.out.println(str); System.out.println("****substring(int beginindex, int endindex)左闭右开******"); str = con.substring(4,9); System.out.println(str); System.out.println("****trim()******"); str = con.trim(); System.out.println(str);
运行结果:
String con = " abcdefgabsd "; ****indexOf(int ch)****** 3 10 ****lastIndexOf(int ch)****** 9 8 ****substring(int index)****** gabsd ****substring(int beginindex, int endindex)左闭右开****** defga ****trim()****** abcdefgabsd
-
字符串拆分
String words = "长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山 "; //定义接收数组 String[] printWord ; System.out.println("***原歌词格式***\n" + words); System.out.println("***拆分后歌词格式***"); //按照空格进行拆分 printWord = words.split(" "); for (int i = 0; i < printWord.length; i++) { System.out.println(printWord[i]);//打印输出 }
运行结果:
***原歌词格式*** 长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山 ***拆分后歌词格式*** 长亭外 古道边 芳草碧连天 晚风扶 柳笛声残 夕阳山外山
-
查找特定字符出现的次数
//方法一:使用indexOf和subString方法,循环判断并截取 int count = 0; while(str.indexOf(ch)>=0) { str=str.substring(str.indexOf(ch)+ch.length()); count++; } System.out.println("指定字符串在原字符串中出现:"+count+"次"); //方法二:使用replace方法将字符串替换为空,然后求长度 int counts = (str.length()-str.replace(ch, "").length())/ch.length(); System.out.println("\""+str+"\""+"中包含"+counts+"个"+"\""+ch+"\"");
-
字符串的替换
//replace(字符串,字符串) String str = "1我爱中国!"; str = str.replace("中国","学习"); System.out.println(str); //replaceAll(正则表达式,字符串) str = str.replaceAll("\\d","\\$"); System.out.println(str);
-
判断字符串是否以指定字符串结尾
String txt = "1.txt"; boolean bool = txt.endsWith("txt"); System.out.println(bool);
7、StringBuffer类
对字符串频繁修改(如字符串连接)时,使用StringBuffer类可以大大提高程序执行效率
-
StringBuffer声明
StringBuffer strb = new StringBuffer(); StringBuffer strb = new StringBuffer("aaa");
-
StringBuffer的使用
sb.toString(); //转化为String类型 sb.append("**"); //追加字符串 sb.insert (1, "**"); //插入字符串
注意:
String是不可变对象,经常改变内容的字符串最好不要使用String
StringBuffer是可变的字符串,字符串经常改变的情况可使用StringBuffer,更高效
JDK5.0后提供了StringBuilder,等价StringBuffer
8、操作日期时间
-
获取当前日期
java.util.Date类:表示日期和时间,提供操作日期和时间各组成部分的方法
java.text.SimpleDateFormat类
//创建日期对象 Date date = new Date(); //定制日期格式 SimpleDateFormat formater = new SimpleDateFormat("yyyy- MM-dd HH:mm:ss"); String now = formater.format(date); System.out.println(now);
-
Calendar类
抽象类,java.util.Calendar,用于设置和获取日期/时间数据的特定部分
protected Calendar() :由于修饰符是protected,所以无法直接创建该对象。
//通过该方法生成Calendar对象 Calendar cr = Calendar.getInstance();
方法或属性 说明 int get(int field) 返回给定日历字段的值(年月日) MONTH 指示月 DAY_OF_MONTH 指示一个月中的某天 DAY_OF_WEEK 指示一个星期中的某天 //get(int field) 返回给定日历字段的值(年月日) Calendar cr = Calendar.getInstance(); int year = cr.get(Calendar.YEAR); int month = cr.get(Calendar.MONTH); int day = cr.get(Calendar.DAY_OF_MONTH); int week = cr.get(Calendar.DAY_OF_WEEK); //month是从0开始的,而月份是从1开始的 System.out.println(year+"年"+(month+1)+"月"+day+"日星期"+week); //设置指定日期 //将周一(FirstDay)设为每周的第一天(monday) cr.setFirstDayOfWeek(Calendar.MONDAY); //将年份设为2015年 cr.set(Calendar.YEAR,2015); //将月份设为4月(java中0-11代表12个月) cr.set(Calendar.MONTH,3); //将日数设为第6日 cr.set(Calendar.DATE,6); //使用Calendar.WEEK_OF_YEAR来求出属于某年的第几周 week = cr.get(Calendar.WEEK_OF_YEAR); System.out.println("2015年4月6日是一年中的第"+week+"周");