1.Java API
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等类。
2.枚举
从Java SE 5.0开始,Java程序设计语言引入了一种新的类型——枚举。
枚举:由一组固定常量组成的类型,使用关键字enum定义。
定义枚举语法格式:
[Modifer] enum enumName{
enumContantName[,enumContantName2...[;]]
//[field,method]
}
说明:
1.Modifer表示访问修饰符,如public等;
2.enumContantName[,enumContantName2...[;]]表示枚举常量列表,枚举常量之间用逗号隔开;
3.[field,method]表示其他的成员,包括构造方法,写在枚举常量的后面。
4.在枚举中,如果除了定义枚举常量,还定义了其他成员,则枚举常量列表必须用分号(;)结尾。
枚举其实就是一种类型,是java.lang.Enum类的子类,继承了Enum类的许多方法。
//枚举类型:enum,枚举类型里的都是静态常量
public enum Genders {
男,女
}
public class Student {
public String name;
public Genders sex;//性别是枚举类型
public static void main(String[] args) {
Student stu=new Student();
stu.name="张三";
stu.sex=Genders.男;//给sex赋值只能是Genders枚举类型里已经声明好的数据
stu.sex=Genders.女;
}
}
使用枚举的好处
1.在Java中,通常使用枚举表示一组个数有限的值,用来实现对输入的值进行约束检查;
2.在程序中使用枚举的好处总结如下:
-->枚举可以使代码更易于维护,有助于确保为变量指定合法的、期望的值。
-->枚举更易于编程时输入,使用枚举赋值,只需要输入枚举名,然后输入一个点(.),就能将所有的值显示出来。
-->枚举使代码更清晰,允许使用描述性的名称表示数据,使用时直观方便。
3.包装类
3.1 概述
Java语言是面向对象的,在设计类时,为每个基本数据类型设计了一个对应的类,称为包装类。
包装类均在java.lang包中,包装类和基本数据类型对应关系如下:
基本数据类型 | 包装类 |
char | Character |
boolean | Boolean |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
其中,Character类和Boolean类继承Object类,Byte、Short、Integer、Long、Float、Double类继承Number类,Number类继承Object类。
包装类的用途:
包装类作为和基本数据类型对应的类存在,方便对象的操作;
提供了一系列实用的方法;
集合不允许存放基本数据类型数据,存放数字时,使用了包装类。
3.2 包装类和基本数据类型的转换
3.2.1 基本数据类型转换成包装类
方法一:使用包装类的构造方法创建包装类对象
所有包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例
public Type(type value)
Type表示包装类,type表示基本数据类型
如:Integer i=new Integer(1);
// 所有的包装类都可将与之对应的基本数据类型作为参数,来构造它们的实例
byte num1=10;
Byte byte1=new Byte(num1);
short num2=100;
Short short1=new Short(num2);
int num3=1000;
Integer int1=new Integer(num3);
long num4=1000000000;
Long long1=new Long(num4);
float num5=12.2F;
Float float1=new Float(num5);
double num6=12.22;
Double double1=new Double(num6);
char num7='你';
Character ch1=new Character(num7);
boolean num8=true;
Boolean bool=new Boolean(num8);
Boolean boo=new Boolean(false);
除Character类外,其他包装类可将一个字符串作为参数构造它们的实例
public Type(String value)
如:Integer i=new Integer("123");
对于Character类,不能使用第二种构造方法创建Character类的包装类对象,只能是Character charValue = new Character('x')这种形式。
//除了Character类,其他包装类可将一个字符串作为参数构造它们的实例
Byte byte2=new Byte("123");
Short short2=new Short("100");
Integer int2=new Integer("200");
Long long2=new Long("1230000");
Float float2=new Float("12.2");
Double double2=new Double("13.33");
Boolean bool1=new Boolean("true");
System.out.println(bool1);//true
Boolean bool2=new Boolean("TrUe");
System.out.println(bool2);//true
Boolean bool3=new Boolean("false");
System.out.println(bool3);//false
Boolean bool4=new Boolean("1qw3");
System.out.println(bool4);//false
注意:
Boolean类构造方法参数为String类型时,若该字符串内容是true(不考虑大小写),则该Boolean对象表示true,否则表示false;
当Number包装类构造方法参数为String 类型时,字符串不能为null,且该字符串必须可解析为相应的基本数据类型的数据,否则编译不通过,运行时会抛出NumberFormatException异常。
方法二:使用包装类的valueOf()方法
valueOf()方法是静态方法,它可以接收基本数据类型和字符串作为参数并返回包装类对象。
public static Type valueOf(type value)
如:Integer i=Integer.valueOf(12);
public static Type valueOf(String value)(Character类除外)
如:Integer i=Integer.valueOf("12");
Float num3=Float.valueOf(34.3F);
Float num4=Float.valueOf("23.2");
Character n=Character.valueOf('1');//字符->包装类是可以的
对于Character类的valueOf()方法只能这么写:Character ch=Character.valueOf('value');
3.2.2 包装类转换成基本数据类型
包装类转换成基本数据类型通常采用如下方法:
public type typeValue();
其中,type指的是基本数据类型,如byteValue()、charValue()等,相应的返回值为byte、char。
如:Integer int1=new Integer(23);
int int2=int1.intValue();
3.3 包装类常用方法
toString():以字符串形式返回包装对象表示的基本类型数据(基本类型->字符串)
String sex=Character.toString('男');
String age=Integer.toString(21);
parseXXX():把字符串转换为相应的基本数据类型数据(Character除外)(字符串->基本类型)
XXX表示基本数据类型
int num=Integer.parseInt("12");
boolean bool=Boolean.parseBoolean("false");
3.4 装箱和拆箱
在Java SE 5.0版本之后,编译器自动完成包装类和基本数据类型的转换。
装箱:基本数据类型转换为包装类;
拆箱:包装类转换成基本数据类型。
4.Math类
java.lang.Math类提供了一些基本数学运算和几何运算的方法以及两个静态常量E(自然对数的底数) 和PI(圆周率)。
Math类中的所有方法都是静态方法,Math类是final类,没有子类。
4.1 Math类常用方法
Math.abs() | 返回一个数的绝对值 |
ceil(num) | 上舍入:返回比num大的最小的整数 |
floor(num) | 下舍入:返回比num小的最大的整数 |
round(num) | 四舍五入 |
max()/min() | 求最大值和最小值 |
pow() | 求一个数的指定次幂 |
random() | 返回一个[0.0,1.0)之间的double类型数据 |
代码举例说明:
//Math类的一些常用方法
public static void main(String[] args) {
//Math.PI:返回一个无限接近圆周率的double类型的值
double num=Math.PI;
System.out.println(num);
//Math.abs()方法:求一个数的绝对值,正数的绝对值是它本身,负数的绝对值是其相反数
System.out.println(Math.abs(100));
System.out.println(Math.abs(-100));
//求近似数
//ceil(num):返回比num大的最小的整数
System.out.println(Math.ceil(9.1));//10
//floor(num):返回比num小的最大的整数
System.out.println(Math.floor(9.9));//9
//round(num):四舍五入
System.out.println(Math.round(9.6));//10
//求最大值和最小值
System.out.println(Math.max(3, 5));
System.out.println(Math.min(34, 21));
//求一个数的指定次幂:pow()方法
System.out.println(Math.pow(2, 10));
//求随机数
//Math.random():返回一个[0.0,1.0)之间的double类型数据
double random1=Math.random();
System.out.println(random1);
//Math.random()*10:返回一个[0.0,10.0)之间的double类型数据
double random2=Math.random()*10;
System.out.println(random2);
//(int)Math.random()*10:返回一个[0,,10)之间的int类型数据
int random3=(int)(Math.random()*10);
System.out.println(random3);
//(int)Math.random()*(num2-num1)+num1):返回一个[num1,num2)之间的int类型数据,num2>num1
//随机获取一个[30,60)之间的int类型的数据
int random4=(int)(Math.random()*(60-30)+30);
System.out.println(random4);
}
5.Random类
Random类用于生成随机数。Math类的random()方法也可以产生随机数,其实Math类的random()方法底层就是使用Random类实现的。
5.1 Random类构造方法
Random() //创建一个新的随机数生成器
Random(long seed) //使用单个long种子创建一个新的随机数生成器
5.2 Random类常用方法
int nextInt():返回下一个随机数,它是此随机数生成器的序列中均匀分布的int值
int nextInt(int n):返回下一个伪随机数,它是取自[0,n)之间均匀分布的int值(n是指定值)
代码举例说明:
public static void main(String[] args) {
//创建Random对象
Random random=new Random();
//获取随机数
int num1=random.nextInt();
System.out.println(num1);
int num2=random.nextInt(10);//获取[0,10)之间的一个int类型数据
System.out.println(num2);
System.out.println(random.nextBoolean());//随机返回一个boolean类型的值
Random r1=new Random(1000);
Random r2=new Random(100);
System.out.println(r1.nextInt());
System.out.println(r2.nextInt());
}