java API与包装类
文章目录
Java API概述
Java API(Java Application Programming Interface) 即Java应用程序编程接口,它是运行库的集合,预先定义一些接口和类,程序员可以直接使用这些已经被打包的接口和类来开发具体的应用,节约了程序员大量的时间和精力。API还特指API的说明文档,也称帮助文档。
我们学习java编程面对2中类
- 我们自己写的类。
- 用其他人写好的类来使用。
API是把jdk里面提供好的类梳理成了一个文档,方便我们来查阅。
基本信息
类的属性的摘要
类的构造器的摘要
方法的摘要
从父类继承下来的方法
Java API中常用的包
-
java.lang:编写java程序时最广泛使用的包,自动导入到所有的程序中,包含了java程序的基础类和接口。包装类、Math类、String类等常用的类都包含在此包中,java.lang包还提供了用于管理类的动态加载、外部进程创建、主机环境查询和安全策略实施等“系统操作”的类
-
java.util:包含了系统辅助类,特别是Collection、List和Map等集合类
-
java.io:包含了与输入/输出有关的类,如文件操作等类
-
java.net:包含了与网络有关的类,如Socket、ServerSocket等类
-
java.sql:包含了与数据库相关的类,如Connection、Statement等类
java.lang包中常用类
String类
/*String类的特点:
String 类代表字符串。
Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。
字符串是常量;它们的(双引号括起来字符串)值在创建之后不能更改
*/
/*
* String类构造方法
* String(String original)
* String类的 boolean equals(Object obj)
* 重写了Object类中的equals方法,比较的是两个字符串的内容,不再比较地址值
*/
public class Demo {
public static void main(String[] args) {
// method01();
//method02();
String s1= "abc";
String s2= new String("abc");
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true
}
private static void method02() {
String s1="abc";
String s2="abc";
System.out.println(s1==s2);//s1与s2比较的是内存地址值,s1,s2引用都是常量池中的同一个abc,所以地址值相同
System.out.println(s1.equals(s2));//true 比较的是两个字符串内容
}
private static void method01() {
String str=new String("abc");
System.out.println(str.toString());
String s1="abc";
String s2="def";
boolean b=s1.equals(s2);
System.out.println(b);
}
}
String内存图解
String类中的转换
- 字符数组和字符串的相互转换
- 大小写转换
/* String类的转换功能:
* 1.字符串和字符数组相互转换
* 字符数组-->字符串
* String(char[] value)
String(char[] value, int offset, int count)
offset:从字符数组第几个索引位置开始
count:获取多少个字符
字符串--->字符数组
* char[] toCharArray()
将此字符串转换为一个新的字符数组。
* 2.转换大小写
* String toLowerCase():将字符串中所有的字符全部转为小写
* String toUpperCase():将字符串中所有的字符全部转为大写
*/
public class Test {
public static void main(String[] args) {
method01();
//method02();
//method03();
}
//大小写转换
public static void method03(){
/*String str="aBCd";
str.toLowerCase();
System.out.println(str);//打印的还是原始字符串,因为"aBCd"一经初始化不可改变*/
String str="aBCd";
String lowerStr=str.toLowerCase();//不会改变原有字符串,而是产生一个新的字符串
//相当于String lowerStr="abcd"
System.out.println(str);//aBCd
System.out.println(lowerStr);//abcd
String upperStr=str.toUpperCase();//不会改变原有字符串
//相当于String upperStr="ABCD"
System.out.println(str);//aBCd
System.out.println(upperStr);//ABCD
}
//字符串--->字符数组 为了使用字符数组的索引,可以考虑将字符串转成字符数组
public static void method02(){
String str="def";
char[] charArr=str.toCharArray();//{'d','e','f'}
for (int i = 0; i < charArr.length; i++) {
System.out.println(charArr[i]);
}//d e f
char[] chArr="ghk".toCharArray();//"ghk"字符串常量就是一个字符串对象
for (int i = 0; i < chArr.length; i++) {
System.out.println(chArr[i]);
}//g h k
}
//字符数组-->字符串,当我们想使用字符串中的一些方法的时候,可以利用这个转换
public static void method01(){
char[] chArr={'a','c','d'};
String str=new String(chArr);//将字符数组中的内容放在字符串中
System.out.println(str);//acd
String str2=new String(chArr,1,2);//从1索引位置开始,将2个字符转换为字符串(包含1索引的字符)
System.out.println(str2);//cd
//String str3=new String(chArr,1,3);//从1索引位置开始,将2个字符转换为字符串(包含1索引的字符)
//System.out.println(str3); //StringIndexOutOfBoundsException
}
}
String类中的判断
- 判断字符串开始或结束字符串
String str = "StringDemo.java";
boolean b1 = str.startsWith("Demo");//判断是否以给定字符串开头
boolean b2 = str.startsWith("String");
boolean b3 = str.endsWith("java");//判断是否以给定字符串结尾
- 判断字符串是否包含指定子串
String str = "abcde";
boolean b2 = str.contains("bcd");
//判断是否包含指定字符串,包含返回true,不包含返回false
- 判断两个字符串中的内容是否相同
String str = "abcde";
String str2 = "abcde";
String str3 = "hello";
boolean b1 = str.equals(str2);
boolean b2 = str.equals(str3);
String类中的获取功能
-
获取字符串长度 : length(),返回int型的字符串的长度
-
获取部分字符串
public static void main(String[] args) {
String str = "abcde";
String s1 = str.substring(1);
//返回一个新字符串,内容为指定位置开始到字符串末尾的所有字符
String s2 = str.substring(2, 4);
//返回一个新字符串,内容为指定位置开始到指定位置结束所有字符
System.out.println("str="+str);//str=abcde
System.out.println("s1="+s1);//s1=bcde
System.out.println("s2="+s2);//s2=cd
}
-
其它获取功能
/* *String 类的获取功能: * int length() //获取字符串中的字符个数 * * char charAt(int index)//获取指定位置的字符 * String substring(int start)//获取字符串中指定索引开始的子串 * String substring(int start,int end)//获取从start到end-1的字符串,包含start以及end-1的字符 * * String trim() //去除首尾的空白字符 * * int indexOf(String str)//拿着指定的字符串作为子串去调用indexOf的字符串中查找,返回第一次找到子串的位置 * //如果不存在这个子串,返回-1 * int lastIndexOf(String str)//拿着指定的字符串作为子串去调用lastIndexOf的字符串中倒着查找,返回第一次找到子串的位置 * //如果不存在这个子串,返回-1,注意返回的索引位置是将字符串从起始位置编号 */ /* 连接字符串 concat() 拆分字符串 split() */
枚举
枚举类型可以取代以往常量的定义方式,即将常量封装在类或接口中。此外,枚举类型还提供了安全检查功能。枚举类型本质上还是以类的形式存在。
使用enum关键字定义
public enum EnumDemo {
MON,TUE,WED,THU,FRI,SAT,SUN
}
用户可以将一个枚举类型看作是一个类,它继承于java.lang.Enum类,当定义一个枚举类型时,每一个枚举类型成员都可以看作是枚举类型的一个实例,这些枚举类型成员默认都被final、public、static所修饰,所以当使用枚举类型成员时直接使用枚举类型名称调用枚举类型成员即可。
enum Week {
MON,TUE,WED,THU,FRI,SAT,SUN
}
class WeekDemo{
public void doWhat(Week day){
switch (day){
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("1-5");
break;
case SAT:
case SUN:
System.out.println("6-7");
break;
default:
System.out.println("数字不是1-7的整数");
}
}
}
public class EnumDemo{
public static void main(String[] args) {
WeekDemo weekDemo = new WeekDemo();
weekDemo.doWhat(Week.FRI);//1-5
Week day = Week.SAT;
weekDemo.doWhat(day);//6-7
}
}
包装类
概述
Java语言是面向对象的,但是Java中的基本数据类型却不是面向对象的,这在实际开发中存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类,称为包装类。
包装了均位于java.lang包中,包装类和基本数据类型的对应关系如下:
基本数据类型 | 包装类型 |
---|---|
byte | Byte |
boolean | Boolean |
short | Short |
char | Character |
int | Integer |
long | Long |
float | Float |
double | Double |
-
Integer主要的字段(即属性)
-
Integer构造方法
-
Integer常用的方法:将string类型转换为int
-
将包装类对象转换为基本类型的方式
总结
- string 转换为基本数据类型
String==>int Integer.parseInt()
String==>int Integer.valueOf(str)
String==>int new Integer(string str)
String==>double Double.parseDouble()
String==>byte Byte.parseByte()
String==>char 没有Character.parseChar()不存在
- 基本类型转换为string类型
Int==>String Integer.toString(int)
Double==>String Double.toString(double);
Java 5 增加了自动装箱、拆箱机制,提供基本数据类型和包装类型的相互转换操作。
自动装箱
自动装箱即自动将基本数据类型转换成包装类型,在 Java 5 之前,要将基本数据类型转换成包装类型只能这样做,看下面的代码。
Integer i1 = new Integer(5);
Integer i2 = Integer.valueOf(5);
// 自动装箱
Integer i3 = 5;
以上 3 种都可以进行转换,但在 Java 5 之前第 3 种方法是编译失败的,第 3 种方法也正是现在的自动装箱功能。另外,第一种构造器方法也不推荐使用了,已经标为废弃了。
其实自动装箱的原理就是调用包装类的 valueOf 方法,如第 2 个方法中的 Integer.valueOf 方法。
自动拆箱
自动拆箱即自动将包装类型转换成基本数据类型,与自动装箱相反。
// 自动拆箱
int i4 = i3;
int i5 = i3.intValue();
继续上面的例子,把 i3 赋值给 i4 就是实现的自动拆箱功能,自动装箱的原理就是调用包装类的 xxValue 方法,如 i5 中的 Integer 的 intValue 方法。
自动装箱、拆箱不只是体现在以上的例子,在方法接收参数、对象设置参数时都能自动装箱拆箱。
Math类
java中java.lang下面的所有类都不需要引入,可以直接来使用。
工具类Math,内部的属性和方法都是静态的
//jdk1.7的新特性,静态导入
import static java.lang.Math.*;
//*表示全部
public class MathTest {
public static void main(String[] args) {
System.out.println(min(2,5));//2
}
}
public class Demo {
/*
自然对数:Math.E
圆周率:Math.PI
绝对值:Math.abs(-1.5)-->1.5
把小数去掉整数加1 Math.ceil(12.1)-->13.0
把小数位舍弃 Math.floor(12.9)-->12.0
比较两个数的大小 Math.max(12.9, 27)-->27
比较两个数的大小 Math.min(12.9, 27)-->12.9
计算某个数的n次幂 Math.pow(3, 3)-->27.0
四舍五入 Math.round(4.5)-->5
开平方 Math.sqrt(16)-->4.0);
*/
public static void main(String[] args){
System.out.println(Math.E);//e 2.718281828459045
System.out.println(Math.PI);//3.141592653589793
int r1 = Math.abs(-1);
System.out.println("绝对值是:"+r1);//绝对值是:1
//取整
double r2 = Math.ceil(1.8);
System.out.println("ceil向上取整:"+r2);////ceil向上取整:2.0
double r3 = Math.floor(1.8);
System.out.println("floor向下取整:"+r3);//floor向下取整:1.0
int r4 = Math.max(2,5);
System.out.println("求最大值:"+r4);//求最大值:5
int r5 = Math.min(2,5);
System.out.println("求最小值:"+r5);//求最小值:2
double r6 = Math.pow(3, 3);
System.out.println("3的3次幂"+r6);//3的3次幂27.0
long r7 = Math.round(1.6);
System.out.println("四舍五入:"+r7);//四舍五入:2
double r8 = Math.sqrt(16);
System.out.println("开平方:"+r8);//开平方:4.0
}
}
Math.random()
返回一个double值为正号,大于等于0.0 ,小于1.0 。返回的值是从该范围(大约)均匀分布而伪随机选择的。
System.out.println(Math.random());