实用类
- Java API介绍
- 认识枚举
- 枚举概述
- 包装类
- 包装类概述
- 包装类和基本数据类型的转换
- Math类
- 总结
Java API介绍
Java应用程序编程接口(Java Application Programming Interface,Java API)是运行库的集合,预先定义了一些接口和类,程序员可以直接使用这些被打包的接口和类来开发具体的应用,节约了程序员大量的时间和精力。API除了有“应用程序编程接口”的意思外,还特指API的说明文档,也称帮助文档。
Java语言的强大之处在于它提供了多种多样的类库,从而大大提高了程序员的编程效率和质量。
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 SE 5.0开始,Java程序设计语言引入了一种新的类型——枚举(Enum)。
枚举是指一组固定的常量组成的类型。使用关键字enum定义。
定义枚举语法格式如下:
[Modifier] enum enumNum{
enumContantName1 [,enumConstantName2…[;]]
//[field,method]
}
Modifier是访问修饰符,如public等。
enum是关键字。
enumContantName1 [,enumConstantName2…[;]]表示枚举常量列表,枚举常量之间以逗号分隔。
//[field,method]表示其他的成员,包括构造方法,置于枚举常量的后面。
在枚举中,如果除了定义枚举常量,还定义了其他成员,则枚举常量列表必须以分号(;)结尾。
示例一:定义表示性别的枚举,两个枚举常量分别代表“男”和“女”。
关键代码:
public enum Genders{
Male,Female
}
枚举其实就是一种类型,是java.lang.Enum类的子类,继承了Enum类的许多有用的方法。
在Java中,通常使用枚举表示一组个数有限的值,用于实现对输入的值进行约束检查。
示例二:
关键代码:
public enum Sex {//枚举类型
男,女,value;
private String sex;
Sex() {
}
public void setSex(String sex){
this.sex=sex;
}
public String getSex(){
return this.sex;
}
}
class TestSex{
public static void main(String[] args) {
Sex man=Sex.男;
man.setSex("male");
System.out.println(man.getSex());
if(man==Sex.valueOf("男")){
System.out.println("可以通过这种方式判断");
}
}
}
输出结果:
总结:在程序中使用枚举的好处
枚举可以使代码更易于维护,有助于确保为变量指定合法的、期望的值。
枚举更易于编程时输入,使用枚举赋值,只需要输入枚举名,然后输入一个点(.),就能将所有值显示出来。
枚举使代码更清晰,允许用描述性的名称表示数据,使用时直观方便。
示例三:为大数据岗位课程三个学习阶段定义枚举:L1、L2、L3,分别表示第一、二、三阶段。
编程输出每个单元的学习目标
L1:大数据开发工程师
L2:大数据挖掘工程师
L3:大数据架构师
关键代码:
mport java.util.HashMap;
import java.util.Set;
public enum Dashuju {
L1,L2,L3
}
class TestDashuju{
public static void main(String[] args) {
HashMap map=new HashMap();
Dashuju a=Dashuju.L1;
Dashuju b=Dashuju.L2;
Dashuju c=Dashuju.L3;
map.put(a,"大数据开发工程师");
map.put(b,"大数据挖掘工程师");
map.put(c,"大数据架构师");
Set entry=map.entrySet();
for (Object o : entry) {
System.out.println(o);
}
}
}
输出结果:
包装类
包装类概述
Java语言是面向对象的,但是Java中的基本数据类型却不是面向对象的,这在实际开发中存在很多的不便。为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类,称为包装类。
包装类均位于java.lang包中,包装类和基本数据类型的对应关系如下所示:
基本数据类型 | 包装类 |
byte | Byte |
boolean | Boolean |
short | Short |
char | Charcter |
int | Integer |
long | Long |
float | Float |
double | Double |
包装类的用途主要有两个:
包装类作为和基本数据类型对应的类存在,方便对象的操作。
包装类包含每种基本数据类型,如最大值、最小值等,以及相关的操作方法。
包装类和基本数据类型的转换
(1)基本数据类型转换为包装类
在Java中,基于数据类型数据创建包装类对象通常可以采用如下两种方式:
①使用包装类的构造方法
包装类的构造方法有两种形式:
public Type(type value)
public Type(String value)
其中,Type表示包装类,参数type为基本数据类型。
针对每一个包装类,都可以使用关键字new将一个基本数据类型值包装为一个对象。例如:要创建一个Integer类型的包装类对象,代码可以这样写。
Integer intValue=new Integer(21);
或
Integer intValue=new Integer(“21”);
注意:不能使用第二种形式的构造方法创建Character类型的包装类对象。只能是Character charValue=new Character(‘x’);这种形式。
②使用包装类的valueOf()方法
包装类中一般采用静态的重载的valueOf()方法,它也可以接收基本数据类型数据和字符串作为参数并返回包装类的对象。以Integer包装类为例,valueOf()方法的定义如下所示:
方法 | 说明 |
Integer valueOf(int i) | 返回一个表示指定的int值的Integer对象 |
Integer valueOf(String s) | 返回保存指定的String值的Integer对象 |
Integer valueOf(String s,int radix) | 返回一个Integer对象,该对象中保存了用第二个参数提供的基数(二进制。十进制等)进行解析时从指定的String中提取的值 |
注意:Character类的valueOf()方法只有一个版本的定义,即valueOf(char c),它返回一个指定char值的Character对象。
(2)包装类转换成基本数据类型
包装类转换成基本数据类型通常采用如下的方法:public type typeValue();其中,type指的是基本数据类型,如byte()、charValue(),相应的返回值则为byte、char。
具体的用法如下:
Integer integerId=new Integer(25);
int intId=integerId.intValue();
Boolean bl=Boolean.valueOf(true);
boolean bool=bl.booelanValue();
(3)基本数据类型和包装类的自动转换
在Java SE 5.0版本之后程序员不需要编码实现基本数据类型和包装类之间的转换,编译器会自动完成。
示例四:
public class TestInteger {
public static void main(String[] args) {
// Integer num=new Integer(123);
// Integer a=1;//自动装箱
// // 用字符串的构造方法时,必须是数字,否则会报异常
// int b=new Integer("123");//自动拆箱
Integer a=127;
Integer b = 127;
//0-127是缓冲区
System.out.println(a == b);
Integer c=new Integer(1);
System.out.println(a==c);
Integer d = Integer.valueOf(123);
String str="123";
int num=new Integer(str);
Character ch = new Character('a');//character没有String类型的构造方法
Character ch1='a';
Boolean flag=new Boolean("true");
System.out.println(flag);
Double dou=new Double("123.1");
System.out.println(dou.intValue());
Float f=123.1f;
Integer i=Integer.parseInt("123");
}
}
输出结果:
Math类
java.lang.Math类提供了一些基本数学运算和几何运算的方法。此类中的所有方法都是静态的。这个类是final类,因此没有子类,Math类常见方法如下:
Math类 | 方法 |
Math.pow(double a, double b) | 计算a的b次方 |
Math.abs(int/float/double/long/ o) | 计算数值的绝对值 |
Math.acos(double a) | 计算参数的反余弦值,返回弧度 |
Math.asin(double a) | 计算参数的反正弦值,返回弧度 |
Math.atan(double a) | 计算参数的反正切值,返回弧度 |
Math.atan2(double a, double b) | 计算参数的反正切值 |
Math.addExact(int/long x, int/long y) | 计算其参数总和,如果结果溢出,则抛出异常 |
Math.sin(double a) | 计算参数的正弦值,参数是弧度 |
Math.cos(double a) | 计算参数的余弦值,参数是弧度 |
Math.tan(double a) | 计算参数的正切值,参数是弧度 |
Math.toRadians(double angdeg) | 角度转弧度 |
Math.toDegress(double argrad) | 弧度转角度 |
Math.exp(double a) | 返回欧拉数E的a次幂 |
Math.log(double a) | 以e为底的对数a,返回幂次 |
Math.log10(double a) | 以10为底的对数a,返回幂次 |
Math.log1p(double a) | 以a+1为底的自然对数 |
自然对数 | 是以常数e为底数的对数 |
Math.sqrt(double a) | 对a进行开平方 |
Math.cbrt(double a) | /对a进行开三次方 |
Math.ceil(double a) | 对a进行向上取整,即10.9=11,-10.9=10 |
Math.floor(double a) | 对a进行向下取整,即10.9=10,-10.9=-11 |
Math.rint(double a) | 对a进行四舍五入,偶数的.5会被舍弃 |
Math.atan2(double y, double x) | 求向量(x,y)与x轴的夹角 |
Math.pow(double a, double b) | 求a的b次方 |
Math.round(float/double a) | 对a进行四舍五入 |
Math.random() | 生成一个随机数(0~1) |
Math.subtractExact(int/long x, int/long y) | 求商 |
Math.multiplyExact(int/long x, int/long y) | 求乘 |
Math.incrementExact(int/long a) | 自增1 |
Math.decrementExact(int/long a) | 自减1 |
Math.negateExact(int/long a) | 求反 |
Math.toIntExact(long value) | 转int |
Math.floorDiv(int/long x, int/long y) | 以x除以y,然后对结果进行求下限,即对商进行Math.floor |
Math.floorMod(int x, int y) | 如果x,y符号相同,则与%结果一致 |
Math.max(int/long/float/double a, int/long/float/double b) | 求两者的最大值 |
Math.min(int/long/float/double a. int/long/float/double b) | 求两者的最小值 |
Math.ulp(double d) | 返回参数的ulp大小,所谓的ulp,则是表示一个数字和距其最近的数字之间的距离。在计算机中保存的数和在数学上认为的是不一样的,比方说2.0与3.0之间有多少个数,在数学中是无限的,但在计算机中是有限的。比如double最大只有64位,则其最近的数字则是到最小位+1 |
Math.signum(float/double a) | 返回指定int值的符号函数,如果指定值为负,则返回-1,如果指定值是0,则返回0,如果指定值为正数,则返回1 |
Math.sinh(double x) | 计算双曲正弦 |
Math.cosh(double x) | 计算双曲余弦 |
Math.cosh(double x) | 计算双曲正切 |
Math.hypot(double x, double y) | 用来求两点间的距离 |
Math.expm1(double x) | 返回(e^x) - 1 |
Math.nextAfter(double start, double direction) | 返回与第二个参数方向相邻的第一个参数的浮点数 |
Math.nextUp(double d) | 返回与正无穷大方向相邻的d的浮点值 |
Math.nextDown(double d) | 返回与负无穷大方向相邻的d的浮点值 |
示例五:商场的抽奖规则如下:会员号的百位数字等于产生的随机数字即为幸运会员。
编程实现以下功能:
(1)从键盘接收会员号。
(2)生成随机数。
关键代码:
import java.util.Scanner;
public class huiyuan {
public static void main(String[] args) {
//产生随机数
int random=(int)(Math.random()*10);
//从控制台接收一个4位会员号
System.out.println("我行我素购物管理系统>幸运抽奖\n");
System.out.print("请输入4位会员号:");
Scanner sc = new Scanner(System.in);
int cusNo=sc.nextInt();
//分解百位
int baiwei=cusNo/100%10;
//判断是否是幸运会员
if(baiwei==random){
System.out.println(cusNo+"是幸运客户,获精美Mp3一个!");
}else{
System.out.println(cusNo+"谢谢您的支持!");
}
}
}
输出结果:
总结
枚举:可以认为是类的变种
里面的直接写的值都是该类的公共静态常量,可以用类型.值的方式调用
可以和普通一样定义属性和方法
valueOf方法常用来将该类的枚举类型与字符串类型比较
包装类:对应每个基本数据类型,都有一个包装类型与之对应
目的:可以把基本数据类型转成对象
也可以把字符串转成相应的基本数据类型
泛型是不可以放基本数据类型
装箱和拆箱:把基本数据类型赋值给包装类型叫装箱,否则就是拆箱
以Integer为例:几种赋值方法
new Integer(整型)
new Integer(字符串)
Integer.valueOf(字符串/整型)
Integer.parseInt(字符串)
byte:Byte
short:Short
int:Integer
long:Long
float:Float
double:Double
char:Character
boolean:Boolean