JavaAPI:
Java应用程序编程接口,是运行库的集合,预先定义了一些接口和类,程序员可以使用已经打包的接口和类来开发具体的应用,这能使编写的程序简洁高效,也极大的节约程序员的时间和经历。
JavaAPI提供了许多的常用的包,在这些包中,有许多的类,例如
java.lang : java使用最广泛的类,自动导入所有程序中,包含了最基础的类和接口、包装类、Math类、String类等常用的类都包含在此。
java.util : 包含了实用工具库,特别是Collection、List、Set、Map等集合类。
java.io : 包含了输入流和输出流有关的类。
java.net : 包含了与网络操作有关的类。
java.sql : 包含了与数据库相关的类。
枚举
枚举是由一组固定的常量组成的类型,使用关键字enum定义。
语法如下
public enum Genders { //
Male("男"),Female("女")
//如果枚举实例后面没有定义其他内容,可以不用;进行结束,但是如果枚举实例之后定义了其他内容,必须使用;结束
而且定义的枚举实例必须放在枚举类的第一行。
public enum Course {
L1,L2,L3;
private String str;
为什么要使用枚举?
如果想定义一个Color类,它只能有RED、GREEN、BLUE 3种值;其他的值都是不能被使用的
定义一个性别。对于人类来说,大众熟知的性别只有男和女。
一周的只有七天。周一到周末
一天只有24小时
这种具有固定属性,无法改变的要使用枚举类来定义条件
我们的类型是枚举类的类型,用户只能使用我们定义枚举类的值,不能使用别的值了
枚举类只能通过枚举类名.实例方法来调用
下面我们用一段代码来演示一下
//枚举类,定义了周日到周六的实例
public enum Week {
SUN,MON,TUE,WED,THUR,FRI,SAT
}
public class Weekend{
public Week day;
}
//新的一个测试类
public class Test {
public static void main(String[] args) {
Weekend wek = new Weekend();
wek.day = Week.SUN;
//Wek.day = "周末";
//Type mismatch: cannot convert from String to Week
//类型不匹配:不能将字符串转换为周
//因为我们已经将Weekend类中的day声明为一个Week的枚举类型。就不能使用直接赋值的方法。
switch (wek.day) {
case SUN:
System.out.println("周日");
break;
case MON:
System.out.println("周一");
break;
case TUE:
System.out.println("周二");
break;
case WED:
System.out.println("周三");
case THUR:
System.out.println("周四");
case FRI:
System.out.println("周五");
case SAT:
System.out.println("周六");
default:
System.out.println("一周只有七天,周一到周日");
}
}
}
//简单的举个例子,枚举类的实例可以当作switch的条件。
包装类
Java是面向对象的,但是Java中的基本数据类型不是面向对象的。所以在设计类的时候,为每个基本数据类型设计了一个对应的类,称为包装类
包装类把基本类型数据转换为对象
每个基本类型在java.lang包中都有一个相应的包装类
boolean ---- Boolean 布尔类型的包装类
int ---- Interger 整型的包装类
short ---- Short 短整型的包装类
byte ---- Byte 字节型的包装类
long ---- Long 长整型的包装类
double ---- Double 双精度浮点数的包装类
float ---- Float 单精度浮点数的包装类
char ---- Character 字符型的包装类
包装类和基本数据类型之间的转换:
Integer i = new Integer(25);
Integer j = new Integer("30");
int w = i.intValue();
System.out.println( w );
//25 包装类转换成基本数据类型
System.out.println( i.intValue() );
System.out.println( j.intValue() ); //因为Integer valueOf(String s) 可以返回保存制定的String值的Integer对象。
所以可以在使用包装类时声明一个可以解析为相应数据类型的String类型的数据。且不能为null
short c=15;
Short a=new Short(c);
Short e=new Short("10");
System.out.println(a.shortValue());
//可以先声明一个short类型的变量并赋值,在使用包装类时直接调用该变量
Boolean boolen1=new Boolean(false);
Boolean boolen2=new Boolean("TRue"); //true True TRue TRUe TRUE
只要这里面是true,无论大小写,不在单词中间添加其他字符的话(tr ue),该变量都是true
Boolean boolen3=new Boolean("abc");
boolean boolean4=boolen1.booleanValue();
System.out.println(boolen1+" "+boolen2); //false true
System.out.println(boolen1+" "+boolean4); //false false
//在使用Boolean设置属性时,如果声明的是一个字符串值,那么该字符串中只能时false 或者true 否则结果都是false
//在声明时,可以使用条件判断
基本类型中,除了char类型的包装类Character的valueOf方法只有一个版本的定义。即valueOf (char c)
它返回一个表示指定char值的Character对象
Character character1=new Character('a');
//在声明Character包装类时,只能声明一个字符类型的数据,不能像其他基本数据类型一样声明一个字符串
System.out.println(character1.charValue());
字符串转基本类型
String str = "100";
int a = Integer.parseInt(str);
double b = Double.parseDouble(str);
//基本数据类型使用相对于的包装类的.parse方法可以将字符串转换成基本类型
char e = str.charAt(0);
//字符串转成char类型 使用变量名.charAt方法
基本类型转为字符串
int a = 10;
String str = a + ""; //整型转成字符串
double b = 10;
String str2 = b + ""; //浮点型转成字符串
String s = "" + 'c'; //字符型转成字符串
Integer c = new Integer(a);
String str3 = c.toString(); //包装类转成字符串
包装类与相对应的数据类型之间可以自动拆装箱
Integer intObject = 5; //基本类型转换成包装类
int intValue = intObject; //包装类转换成基本类型
Math类
java.lang.Math类提供了一些基本数学运算和几何运算的方法。此类中的方法都是静态、常量的,没有子类
Math类中常用的方法有:
static int abs(int a) 返回int值的绝对值
Math.abs(-8); 返回 8
static int max(int a, int b) 返回两个int值中最大的一个
Math.max(15,35); 返回35
static double random() 返回一个double类型的随机数,取值在0.0~1.0之间
Math.random(); 返回一个0.0~1.0之间的随机小数
使用Math.random方法生成六个值,且取值范围在1~15之间
并确保六个值不重复且按序输出。
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<Integer>();
HashSet<Integer> hash = new HashSet<Integer>();
while(list.size()<6){
Integer red = (int)(Math.random()*15+1);
//生成随机数乘15 此时取值范围在0~14之间。加1之后取值范围在1~15之间
if(hash.add(red)){ //利用HashSet中的元素不能重复的特性,将随机生成的数据在此进行判断
//如果该数据可以添加到HashSet中,就会返回一个true,这个数据就可以插入到ArrayList中
list.add(red);
}
}
String类
String类位于java.lang包中,该包是被自动导入进所有程序中
在Java中,字符串被作为String类型的对象来处理
创建String对象的方法
String ss = “你好”;
或者String sss = new String(“你好”);
String类的常用方法
使用length方法返回字符串的长度
格式: 变量名.length();
Scanner input = new Scanner(System.in);
System.out.println("***欢迎进入注册系统***");
while (true) {
System.out.println("请输入手机号:");
String num = input.next();
if(num.length()<11||num.length()>11){
//使用.length()方法判断字符串长度,
System.out.println("手机号码长度不能小于11位也不能大于11位");
continue;
}
System.out.println("手机号录入成功");
break;
}
使用equals方法来比较字符串的值是否相同,区别大小写
如果两个字符串的每个字符都相同,返回true,否则返回false
Scanner input = new Scanner(System.in);
System.out.println("***欢迎使用本系统***");
System.out.println("请输入用户名:");
String userName = input.next();
System.out.println("请输入密码:");
String passWord = input.next();
if(userName.equals(”admin“)&&passWord.equals(”111555333“)){
//使用equals方法判断用户输入的字符串是否相等。
System.out.println("登陆成功");
}else{
System.out.println("账号或密码错误,请输入正确的账号密码");
}
在Java中 == 和equals()方法应用于字符串的比较时,比较的是不同的
equals()比较的是两个字符串的值 ==比较的是两个字符串对象的内存地址。
如何在比较两个字符串时不考虑大小写的问题
使用.equalsIgnoreCase()方法来进行比较
String str1 = "Abc";
String str2 = "abc";
System.out.println(str1.equalsIgnoreCase(str2));
//输出结果为true
如果使用equals()方法比较两个字符串时,如果大小写不同 怎么将输出结果变为true
这时就要使用改变字符串中英文字符大小写的方法
toLowerCase() 转换字符串中的英文字符为小写
toUpperCase() 转换字符串中的英文字符为大写
String str1 = "Abc";
String str2 = "abc";
str1 = str1.toLowerCase();
str2 = str2.toLowerCase();
System.out.println(str1.equals(str2));
//输出结果为true
如何将两个字符串的内容添加到一个字符串中
使用.concat()方法或者使用加号进行字符串拼接
String str1 = "abc";
String str2 = "123";
String result1 = str1 + str2;
String result2 = str1.concat(str2);
System.out.println(result1+” “result2); //输出结果都为abc123
indexOf(int ch) | 搜索第一个出现的字符ch(或字符串value),
indexOf(String value) | 如果没有找到,返回-1
--------------------------------------------------- |---------------------------------------
lastIndexOf(int ch) | 搜索最后一个出现的字符ch(或字符串value)
lastIndexOf(String value) | 如果没有找到,返回-1
----------------------------------------------------|---------------------------------------
String substring(int index) | 提取从位置索引开始的字符串部分
----------------------------------------------------|--------------------------------------
String substring(int beginindex, int endindex) | 提取beginindex和endindex之间的字符串部分
----------------------------------------------------|----------------------------------------
String trim() | 返回一个前后不含任何空格的调用字符串的副本
----------------------------------------------------|----------------------------------------
String replaceAll(char oldChar, char newChar) | 返回一个任何位置都不含空格的调用字符串的副本
使用使用indexOf()方法搜索第一个出现字符(字符串)的位置
String str1 = "123。dw.txt";
int index1 = str1.indexOf('。');
System.out.println(index1);
//输出值为3 因为在Java中 下标是从0开始 。在第四位。下标为3
使用lastIndexOf()方法搜索最后一个出现字符(字符串)的位置
String fileName = "abc.java";
int index1 = fileName.lastIndexOf(".java");
if (index1 == -1) { // 字符串中没有.java时,返回值是-1
System.out.println("该文件不是一个java文件");
}else{
System.out.println("该文件是一个java文件");
}
使用substring()方法获取从指定位置开始的部分字符串
String temp = "无敌转转圈无敌";
String temp1 = temp.substring(3); //从字符串的第三个位置开始提取字符串 该位置不是下标
System.out.println(temp1); //转圈无敌
如果用户在输入数据时在开始时输入了一个空格,就会导致程序运行失败
怎么避免这个问题呢?
使用.trim()方法去除字符串首尾的空格
Scanner input = new Scanner(System.in);
System.out.println("***欢迎使用本系统***");
System.out.println("请输入用户名:");
String userName = input.next();
System.out.println("请输入密码:");
String passWord = input.next();
if(userName.trim().equals(”admin“)&&passWord.trim().equals(”111555333“)){
//先使用trim方法去除用户在开头和结尾输入的空格,再使用equals方法判断用户输入的字符串是否相等。
System.out.println("登陆成功");
}else{
System.out.println("账号或密码错误,请输入正确的账号密码");
}
如果用户在输入数据时在不同位置输入了空格,会导致程序运行失败
怎么避免这个问题呢?
使用replaceAll()方法删除所有的空格
String str = " aaa c c d";
String str2 = str.replaceAll(" ","");
System.out.println(str2);
//结果为aaaccd
如何将"如,果,真,的,有,一,天"拆分成单个字符串并进行换行输出
这时就要使用.split(separator,limit)方法来将字符串按照指定的符号为条件来拆分字符串
需要使用数组来进行接收
String str = "如,果,真,的,有,一,天";
String[] strs = str.split(","); //条件为","
for (String temp : strs) { //遍历该数组
System.out.println(temp);
}
//如 果 真 的 有 一 天 此处输出时换行,为了节省空间 我用空格代替换行
在Java中除了使用String类存储字符串之外,还可以使用StringBuffer了来存储字符串
StringBuffer类是比String类更高效存储字符串的引用数据类型。尤其是在对字符串的连接操作上。
在使用是需要声明并且初始化 不需要进行导包处理
格式为:StringBuffer sbf = new StringBuffer(“wsc”);
常用的StringBuffer类的方法
toString()方法
将StrignBuffer类型的字符串转换成String类型的字符串
StringBuffer sbf = new StringBuffer(”zcsdw“);
String result=sbf.toString();
append()方法 将参数链接到字符串后并返回
StringBuffer sbf = new StringBuffer("你是谁");
sbf.append("我爱你"); // 你是谁我爱你
System.out.println(sbf);
insert()方法 在指定位置插入参数
StringBuffer sbf = new StringBuffer("你是谁");
sbf.insert(2, "55"); // 你是55谁 // 2为下标 从0开始 2是第三个,所以在第三个位置插入
System.out.println(sbf);
delete()方法,删除字符串中指定范围之间的字符
StringBuffer sbf = new StringBuffer("你是谁");
sbf.delete(0, 2); //删除的是开始到结束之前一位的字符
System.out.println(sbf); //谁
StringBuilder类是用来当作StringBuffer类的简单替换。两个类中的方法和用法基本相同
StringBuilder类是StringBuffer类是等价的,区别在于StringBuffer是线程安全的。
而StringBuilder类是单线程的,不提供同步,理论上效率更高
java.util包中的常用类
使用Date类获取当前系统时间
Date date = new Date();
System.out.println(date);
使用SimpleDateFormat类格式化时间
Date date = new Date();
System.out.println(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //年-月-日 时:分:秒
String currentTime = sdf.format(date); //将格式化的时间转换成字符串
System.out.println(currentTime);
//输出的时间为 2020-06-17 23:18:36
使用Calendar类获取日期及星期并使用Date和SimpleDateFormat将时间格式化
Calendar c = Calendar.getInstance();
System.out.println(c.getTime());
System.out.println("今天是星期"+(c.get(Calendar.DAY_OF_WEEK)-1));
//因为国外周日是第一天,所以在在获取星期的时候要减1
//Wed Jun 17 23:31:09 CST 2020
//今天是星期3
Date date = c.getTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
String times = sdf.format(date);
System.out.println(times);
Random类生成随机数
Random random = new Random();
int result = random.nextInt(33)+1;
int result2 = random.nextInt(33)+1;
System.out.println(result);
System.out.println(result2);
在使用Random类生成随机数时,尽量不要再new的Random中传参
如果new了两个 Random 并且传参相同时,
产生的随机数永远是一样的值
Random random = new Random(10);
Random random1 = new Random(10);
int result = random.nextInt(33)+1;
int result2 = random1.nextInt(33)+1;
System.out.println(result);
System.out.println(result2);
//此时产生的随机数值为28,无论运行几次,产生的随机数值都为28
Random random1 = new Random(10);
int result12 = random1.nextInt(33)+1;
int result22 = random1.nextInt(33)+1;
System.out.println(result12);
System.out.println(result22);
//如果只存在一个Random,并且传参之后,两次产生的随机数虽然不同 但是是固定的