1、包装类
在JAVA中,将基本类型数据封装在包装类中,这样便可以把基本数据类型转换为对象类型处理。
包装类详单于基本数据类型与对象类型之间的一个桥梁,这里有装箱和拆箱的概念,装箱就是将基本类型转换为包装类,而拆箱就是将包装类转换为基本数据类型。
JAVA中的包装类及其对应的基本数据类型如下表所示:
包装类 | 基本数据类型 |
---|---|
Byte | byte |
Short | short |
Integer | int |
Long | long |
Float | float |
Double | double |
Character | char |
Boolean | boolean |
Integer类
我们可以使用valueOf方法创建一个Integer对象,也可以用new的方法来创建。
package CommonClass;
public class IntegerDemo {
public static void main(String[] args){
int num = Integer.parseInt("456");
Integer iNum = Integer.valueOf("456");
Integer iNum2 = new Integer("456");
System.out.println("int数据与Integer数据的比较:" + iNum.equals(num));
}
}
输出为:
int数据与Integer数据的比较:true
Double类
Double类的操作与Integer类基本相同。
package CommonClass;
public class DoubleDemo {
public static void main(String[] args){
Double dNum = new Double("3.14");
double num = Double.parseDouble("3.14");
Double dNum2 = Double.valueOf("3.14");
System.out.println("double数据和Double数据比较:"+dNum.equals(num));
System.out.println("整数部分为:"+dNum.intValue());
}
}
输出为:
double数据和Double数据比较:true
整数部分为:3
Boolean类
Boolean类也提供了两种构造方法,当使用字符串时,只有当字符串不为null且忽略大小写时为true的情况下才为true,其他情况都是false。
package CommonClass;
public class BooleanDemo {
public static void main(String[] args){
Boolean b1 = new Boolean(true);
Boolean b2 = new Boolean("ok");
Boolean b3 = new Boolean("True");
System.out.println("b1:" + b1.booleanValue());
System.out.println("b2:" + b2.booleanValue());
System.out.println("b3:" + b3.booleanValue());
}
}
输出为
b1:true
b2:false
b3:true
Character类
Character类提供了很多方法,可以确定字符的类型,以及很方便的将字符转换大小写等方法
package CommonClass;
public class CharacterDemo {
public static void main(String[] args){
Character mychar1 = new Character('A');
Character mychar2 = new Character('a');
Character mychar3 = new Character('1');
if(Character.isUpperCase(mychar1)){
System.out.println("mychar1转换为小写字母为:" + Character.toLowerCase(mychar1));
}
if(Character.isLowerCase(mychar2)){
System.out.println("mychar2转换为大写字母为:" + Character.toUpperCase(mychar2));
}
if(Character.isDigit(mychar3)){
System.out.println("mychar3是为数字字符" );
}
}
}
输出为:
mychar1转换为小写字母为:a
mychar2转换为大写字母为:A
mychar3是为数字字符
2、Math类
Math 类包含常用的数学方法以及常用的数学常量。数学方法包括三角函数方法sin、cos、tan等,指数函数方法exp,log、log10、sqrt等、取整函数方法ceil、floor、round等遗迹最大值,最小值和绝对值函数方法。
package CommonClass;
public class MathDemo {
public static void main(String[] args){
System.out.println("90度的正弦值:" + Math.sin(Math.PI / 2));
System.out.println("2的平方根与2商的反弦值:" + Math.asin(Math.sqrt(2)/2));
System.out.println("e的平方值:"+ Math.exp(2));
System.out.println("以e为底2的对数值:" + Math.log(2));
System.out.println("以10为底2的对数值:" + Math.log10(2));
System.out.println("2的平方根:" + Math.sqrt(2));
System.out.println("2的平方:" + Math.pow(2,2));
System.out.println("不小于3.5的最小整数" + Math.ceil(3.5));
System.out.println("不大于3.5的最大整数:" + Math.floor(3.5));
System.out.println("3.5最接近的整数为,同样接近取偶数:" + Math.rint(3.5));
}
}
输出为:
90度的正弦值:1.0
2的平方根与2商的反弦值:0.7853981633974484
e的平方值:7.38905609893065
以e为底2的对数值:0.6931471805599453
以10为底2的对数值:0.3010299956639812
2的平方根:1.4142135623730951
2的平方:4.0
不小于3.5的最小整数4.0
不大于3.5的最大整数:3.0
3.5最接近的整数为,同样接近取偶数:4.0
3、随机数
Math.Random()方法
Math.Random()方法返回一个大于等于0,小于1的随机数。该方法返回的随机数实际上是伪随机数,它通过复杂的运算得到一系列的数,该方法是通过当前时间作为随机数生成器的参数,所以每次执行程序都会产生不同的随机数。
Random类
我们通过一个例子来了解Random类的使用:
package CommonClass;
import java.util.Random;
import java.util.Scanner;
public class RandomDemo {
public static void main(String[] args){
System.out.println("------模拟微信抢红包--------");
Random r = new Random();
Scanner sc = new Scanner(System.in);
System.out.println("请输入红包金额:");
double total = sc.nextDouble();
System.out.println("请输入红包总数:");
int bagsnum = sc.nextInt();
double min = 0.01;
for (int i = 1;i<bagsnum;i++){
//后面每个至少有1分
double max = total - (bagsnum-i) * min;
double bound = max - min;
double safe = (double)r.nextInt((int)(bound * 100))/100;
double money = safe + min;
total = total - money;
System.out.println("第" + i + "个红包的金额是:" + String.format("%.2f",money));
}
System.out.println("第" + bagsnum + "个红包的金额是:" + String.format("%.2f",total));
}
}
输出为:
------模拟微信抢红包--------
请输入红包金额:
10
请输入红包总数:
10
第1个红包的金额是:0.46
第2个红包的金额是:1.42
第3个红包的金额是:5.41
第4个红包的金额是:1.64
第5个红包的金额是:0.22
第6个红包的金额是:0.07
第7个红包的金额是:0.50
第8个红包的金额是:0.17
第9个红包的金额是:0.03
第10个红包的金额是:0.08
4、日期时间类
Date类
目前Date类只有两种构造方法,Date()和Date(long date),后一种方法需要传入一个毫秒数:
package CommonClass;
import java.util.Date;
public class DateDemo {
public static void main(String[] args){
Date d1 = new Date();
long timeMillis = System.currentTimeMillis();
Date d2 = new Date(timeMillis);
long value = d2.getTime();
System.out.println("日期" + d1);
System.out.println("毫秒数" + value);
}
}
输出为:
日期Sat Jan 27 13:57:19 CST 2018
毫秒数1517032639754
DataFormat类
DateFormat 类是日期/时间格式化子类的抽象类,在java.text包中,一般使用的是SimpleDateFormat类:
package CommonClass;
import java.text.SimpleDateFormat;
import java.text.DateFormat;
import java.util.Date;
public class DateFormatDemo {
public static void main(String[] args) {
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss EE");
DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日");
Date date = new Date();
System.out.println("格式化输出日期1:" + df1.format(date));
System.out.println("格式化输出日期2:" + df2.format(date));
}
}
输出为:
格式化输出日期1:2018-01-27 02:03:16 星期六
格式化输出日期2:2018年01月27日
Calendar类
为了更加便捷的对日期进行操作,Calendar类对YEAR、MONTH、DAY_OF_MONTH、HOUR等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
package com.test.calendar;
import java.util.Calendar;
import org.junit.Before;
import org.junit.Test;
public class CalendarDemo {
Calendar calendar = null;
@Before
public void test() {
calendar = Calendar.getInstance();
}
// 基本用法,获取年月日时分秒星期
@Test
public void test1() {
// 获取年
int year = calendar.get(Calendar.YEAR);
// 获取月,这里需要需要月份的范围为0~11,因此获取月份的时候需要+1才是当前月份值
int month = calendar.get(Calendar.MONTH) + 1;
// 获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
// 获取时
int hour = calendar.get(Calendar.HOUR);
// int hour = calendar.get(Calendar.HOUR_OF_DAY); // 24小时表示
// 获取分
int minute = calendar.get(Calendar.MINUTE);
// 获取秒
int second = calendar.get(Calendar.SECOND);
// 星期,英语国家星期从星期日开始计算
int weekday = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println("现在是" + year + "年" + month + "月" + day + "日" + hour
+ "时" + minute + "分" + second + "秒" + "星期" + weekday);
}
// 一年后的今天
@Test
public void test2() {
// 同理换成下个月的今天calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.YEAR, 1);
// 获取年
int year = calendar.get(Calendar.YEAR);
// 获取月
int month = calendar.get(Calendar.MONTH) + 1;
// 获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("一年后的今天:" + year + "年" + month + "月" + day + "日");
}
// 获取任意一个月的最后一天
@Test
public void test3() {
// 假设求6月的最后一天
int currentMonth = 6;
// 先求出7月份的第一天,实际中这里6为外部传递进来的currentMonth变量
// 1
calendar.set(calendar.get(Calendar.YEAR), currentMonth, 1);
calendar.add(Calendar.DATE, -1);
// 获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("6月份的最后一天为" + day + "号");
}
// 设置日期
@Test
public void test4() {
calendar.set(Calendar.YEAR, 2000);
System.out.println("现在是" + calendar.get(Calendar.YEAR) + "年");
calendar.set(2008, 8, 8);
// 获取年
int year = calendar.get(Calendar.YEAR);
// 获取月
int month = calendar.get(Calendar.MONTH);
// 获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
System.out.println("现在是" + year + "年" + month + "月" + day + "日");
}
}
输出为:
现在是2016年11月7日11时42分18秒星期2
一年后的今天:2017年11月7日
6月份的最后一天为30号
现在是2000年
现在是2008年8月8日