主要是将基本数据类型封装在包装类中,如int型的包装为Integer、boolean型的包装类Boolean等
Integer类
Integer类在对象中包装了一个基本数据类型int的值,该类的对象包含int字段
例子:Integer类的常用方法
Integer 类提供了以下4个常量
MAX_VALUE:表示int类型可取的最大值,即231-1。
MIN_VALUE:表示int类型可取的最小值,即-23。
SIZE:用来以二进制补码形式表示int值的位数。
TYPE:表示基本类型int的Class 实例。
例子:查看Integer类的常量
int直接取整 ,不会四舍五入
Double类
例子:Double常用方法
Double类主要提供了以下常量:
MAX_EXPONENT:返回 int 值,表示有限 double变量可能具有的最大指数
MIN EXPONENT:返回int值,表示标准化 double变量可能具有的最小指数
QNEGATIVE_INFINITY:返回 double值,表示保存 double 类型的负无穷大值的常量
POSITIVE_INFINITY:返回 double值,表示保存 double类型的正无穷大值的常量
Boolean类
例子:Boolean类的常用方法
-
public class IntegerDemo {
-
public static void main(String[] args) {
-
Boolean b1=Boolean.valueOf("true");//创建Boolean对象
-
Boolean b2=Boolean.valueOf("ok");
-
System.out.println("b1:"+b1.booleanValue());
-
System.out.println("b2:"+b2.booleanValue());
-
}}
运行结果:
b1:ture
b2:false
Boolean提供以下3个常量:
TRUE:对应基值ture的 Boolean 对象
FALSEr对应基值false 的 Boolcan 对象
TYPE:基本类型boolean的Class对象
Character类
例子:Character类常用方法
Character类提供大量表示特定字符的常量:
CONNECTOR_PUNCTUATION:返回byte型值,表示Unicode规范中常规类别“Pc”
UNASSIGNED:返回byte型值,表示Unicode规范中常规类别“Cn”
TITLECASE_LETTER:返回byte型值,表示Unicode规范中常规类别“Lt”
Number类
数字处理
数字格式化
在java中没有格式化的数据以下原则:
如果数据绝对值大于0.001 并且小于 10000000,使以常规小数形式表示。
如果数据绝对值小于0.001或者大于10000000,使用科学记数法表示。
DecimalFormat类是NumberFormat的一个子类用于格式化十进制数字。它可以将一些数字格式化为整数、浮点数、百分数等。通过使用该类可以为要输出的数字加上单位或控制数字的精度。一”情况下,可以在实例化 DecimalFormat 对象时传递数字格式,也可以通过 DecimalFormat 类中applyPattern0方法来实现数字格式化。
当格式化数字时,可在DecimalFormat类中使用一些特殊字符构成一个格式化模板,使数字按照定的特殊字符规则进行匹配。
例子:
在DecimalFormat类
-
import java.text.DecimalFormat;
-
public class DecimalFormatSimpleDemo {
-
//使用实例化对象时设置格式化模式
-
static public void SimgleFormat(String pattern, double value) {
-
DecimalFormat myFormat = new DecimalFormat(pattern);//实例化DecimalFormat 对象
-
String output = myFormat.format(value);//将数字进行格式化
-
System.out.println(value +""+ pattern +""+ output);
-
}
-
//使用applyPattern()方法对数字进行格式化
-
static public void UseApplyPatternMethodFormat(String patter, double value) {
-
DecimalFormat myFormat = new DecimalFormat();//实例化DecimalFormat 对象
-
//调用applyPattern()方法设置格式化模板
-
myFormat.applyPattern(pattern);
-
System.out.printin(value +"" + pattern + "" + myFormat.format(value));}
-
public static void main(String[] args){
-
SimgleFormat("########",123456.789);//调用静态SimgleFormat()方法
-
SimgleFormat("00000000.###kg",123456.789);//在数字后加上单位
-
//按照格式模板格式化数字,不存在的位以0显
-
SimgleFormat("000000.000",123.78);
-
//调用静态UseApplyPatternMethodFormat()方法"
-
UseApplyPatternMethodFormat("#.###%",0.789);//将数字转换为百分数形式
-
UseApplyPatternMethodFormat("###.##",123456.789);//将小数点后格式化为两位
-
UseApplyPatternMethodFormat("0.00u2030",0.789);//将数字转换为千分数形式
-
}}
运行结果为:
123456.789###,###.### 123,456.789
123456.789 00000000.###kg 00123456.789kg
123.78 000000.000 000123.780
0.789#.###%78.9%
123456.789 ###.##123456.79
0.789 0.00% 789.00%
在DecimalFormat类中,除了可通过格式化模板来格式化数字,还可以使用一些特殊方法对数字行格式化设置。例如:
//实例化DecimalFormat 类对象
DecimalFormat myFormat = new DecimalFormat();
myFormat.setGroupingSize(2);//设置将数字分组的大小
myFormat.setGroupingUsed(false);//设置是否支持分组
-
import java.text.DecimalFormat;
-
public class DecimalMethod {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
DecimalFormat myFormat = new DecimalFormat();
-
myFormat.setGroupingSize(2);//设置将数字分组为2
-
String output = myFormat.format(123456.789);
-
System.out.println("将数字以每两个数字分组 "+ output);
-
myFormat.setGroupingUsed(false);//设置不允许数字进行分组
-
String output2 = myFormat.format(123456.789);
-
System.out.println("不允许数字分组 "+ output2);
-
}
-
}
运行结果:
Math类
三角函数方法
Math类中包含的三角函数方法如下:
public static double sin(doublea):返回角的三角正弦
public static double cos(doublea):返回角的三角余弦
public static double tan(doublea):返回角的三角正切
public static doubleasin(doublea):返回一个值的反正弦
public static double acos(doublea):返回一个值的反余弦
public static double atan(doublea):返回一个值的反正切。
public static double toRadians(double angdeg):将角度转换为弧度
public static double toDegrees(double angrad):将弧度转换为角度。
例子:在java中进行三角函数运算
-
public class TrigonometricFunction {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
System.out.println("90度的正弦值:"+Math.sin(Math.PI/2));//取90°的正弦
-
System.out.println("0度的余弦值:"+Math.cos(0));//取0°的余弦
-
System.out.println("60度的正弦值:"+Math.tan(Math.PI/3));//取60°的正切
-
//取2的平方根与2商的反正弦
-
System.out.println("2的平方根与2商的反正弦值:"+Math.asin(Math.sqrt(2)/2));
-
System.out.println("2的平方根与2商的反余弦值:"+Math.acos(Math.sqrt(2)/2));
-
System.out.println("1的正切值:"+Math.atan(1));//取1的反正切
-
System.out.println("120度的弧度值:"+Math.toRadians(120.0));//取120°的弧度值
-
System.out.println("Π/2的角度值:"+Math.toDegrees(Math.PI/2));//取Π/2的角度
-
}
-
}
指数函数方法
1.Math类中与指数相关的函数方法如下。
public static double exp(doublea):用于获取e的a次方,即取e
public static double log(doublea):用于取自然对数,即取Ina的值
public static double log10(doublea):用于取底数为10的a的对数。
public static doublesqrt(doublea):用于取a的平方根,其中a的值不能为负值。
public static double cbrt(doublea):用于取a的立方根。
public static double pow(double adouble b):用于取a的b次方
例子:在java中进行指数函数运算
取整函数方法
1.在具体的问题中,取整操作使用也很普遍,所以Java在Mah类中添加了数字取整方法。Math中主要包括以下几种取整方法:
public static double ceil(double a): 返回大于等于参数的最小整数
public static double floor(double a): 返回小于等于参数的最大整数
public static double rint(double a): 返与参数最接近的整数,如果存在两个同样接近的整数.
则结果取偶数。
public static int round(float a): 将参数加上0.5 后返与参数最近的整数区
public static long round(double a): 将参数加上0.5 后返与参数最近的整数,然后强制转换为长整型。
例子:各场景下取整函数的运算结果
取最大值、最小值、绝对值的函数方法
1.在程序中最常用的方法就是取最大值、最小值、绝对值等,Ma 类中包括的操作方法
public static double max(double a double b):取a与b之间的最大值。
public static int min(inta.int b):取a与b之间的最小值,参数为整型
public static long min(long a,long b):取a与b之间的最小值,参数为长整型
public static float min(float a,float b):取a与b之间的最小值,参数为单精度浮点型
public static double min( double a,double b): 取a与b之间的最小值,参数为双精度浮点
public static int abs(int a):返回整型参数的绝对值。
public static long abs(long a):返回长整型参数的绝对值。
public static float abs(float a):返回单精度浮点型参数的绝对值。
例子:取最大值、最小值、绝对值的方法
Random类
1.Random类是JDK中的随机数生成器类,可以通过实例化一个 Random对象创建一个随机数生器,语法如下:
Random r = new Random();
2.用户也可以在实例化 Random 类对象时,设置随机数生成器的种子。语法如下:
Random r = new Random(seedValue);
r:Random类对象
seedValue:随机数生成器的种子。
在Random 类中,提供了蔬聚各种据类型随机数的方法,下面列举几个常用的方法
public int nextInt():返回一个随机整数。
public int nextlnt(int n): 返回大于等于0 且小于n的随机整数.
public long nextLong(): 返回一个随机长整型值
public boolean nextBoolean(): 返回一个随机布尔型值,
public foat nextFloat(): 返回一个随机单精度浮点型值.
public double nextDouble(): 返回一个随机双精度浮点型值.
public double nextGaussian(): 返回一个概率密度为高斯分布的双精度浮点型值
例子:获取不同取值范围、不同类型的随机数
-
import java.util.Random;
-
public class RandomDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
Random r = new Random();//实例化一个Random类
-
//随机产生一个整数
-
System.out.println("随机产生一个整数:"+r.nextInt());
-
//随机产生一个大于等于0小于10的整数
-
System.out.println("随机产生一个大于等于0小于10的整数:"+r.nextInt(10));
-
//随机产生一个布尔型的值
-
System.out.println("随机产生一个布尔型的值:"+r.nextBoolean());
-
//随机产生一个双精度浮点型的值
-
System.out.println("随机产生一个双精度浮点型的值:"+r.nextDouble());
-
//随机产生一个单精度浮点型的值
-
System.out.println("随机产生一个单精度浮点型的值:"+r.nextFloat());
-
//随机产生一个概率密度为高斯分布的双精度浮点型的值
-
System.out.println("随机产生一个概率密度为高斯分布的双精度浮点型的值:"+r.nextGaussian());
-
}
-
}
运行结果:
-
import java.math.BigInteger;
-
public class BigIntegerDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
//第一个大数字
-
BigInteger b1 = new BigInteger("987654321987654321");
-
//第二个大数字
-
BigInteger b2 = new BigInteger("123456789123456789");
-
//加法运算
-
System.out.println("加法操作:"+b1.add(b2));
-
//减法运算
-
System.out.println("减法操作:"+b1.subtract(b2));
-
//乘法运算
-
System.out.println("乘法操作:"+b1.multiply(b2));
-
//除法运算
-
System.out.println("除法操作:"+b1.divide(b2));
-
//取商运算
-
System.out.println("取商:"+b1.divideAndRemainder(b2)[0]);
-
//取余运算
-
System.out.println("取余数:"+b1.divideAndRemainder(b2)[1]);
-
//2次方运算
-
System.out.println("做2次方操作:"+b1.pow(2));
-
//相反数运算
-
System.out.println("取相反数操作:"+b1.negate());
-
}
-
}
运行结果:
-
import java.math.BigDecimal;
-
import java.math.RoundingMode;
-
public class BigDecimalDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
//第一个大小数
-
BigDecimal b1 = new BigDecimal("0.00987654321987654321");
-
//第二个大小数
-
BigDecimal b2 = new BigDecimal("0.00123456789123456789");
-
//加法运算
-
System.out.println("两个数字相加结果:"+b1.add(b2));
-
//减法运算
-
System.out.println("两个数字相减结果:"+b1.subtract(b2));
-
//乘法运算
-
System.out.println("两个数字相乘结果:"+b1.multiply(b2));
-
//除法运算,商小数点后保留9位,并将结果进行四舍五入操作
-
System.out.println("两个数字相除,保留小数点后9位结果:"+b1.divide(b2,9,RoundingMode.HALF_UP));
-
}
-
}
运行结果:
综上所述,Java 输出换行的方法有以下两种:
System.out.print("n");//利用换行符\n 实现换行
System.out.println();//空参数即可实现换行
2、计时
1.System.currentTimeMillis0方法可以获取自1970年1月1日零点至今的毫秒数。虽然Dae也有类似的方法,但代码会比 System 类多,所以System.currentTimeMillis0方法是为获取当前毫最常用的方法。因为该方法的返回值精确到毫秒,所以可以利用该方法来记录程序的运行时间。
例子:查看执行一万次字符串拼接所消耗的时间
-
public class SystemTimeDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
long start = System.currentTimeMillis();
-
//程序开始记录时间
-
String str = null;//创建null字符串
-
for(int i=0;i<10000;i++) {//循环10000次
-
str += i;//将字符串与循环变量拼接
-
}
-
long end = System.currentTimeMillis();
-
System.out.println("循环用时:"+(end-start)+"毫秒");
-
}
-
}
运行结果:
循环用时:133秒
4.使用Scanner类扫描控制台的代码如下:
Scanner sc = new Scanner(System.in);
-
import java.util.Random;
-
import java.util.Scanner;
-
public class ScannerDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
Random r= new Random();//随机数对象
-
int num = r.nextInt(100);//从1~99取值
-
int input = -1;//记录用户输入的值
-
Scanner sc= new Scanner(System.in);//扫描器扫描控制台输入
-
while(true) {
-
System.out.println("猜一猜随机数是多少?");
-
input = sc.nextInt();//获取用户输入的一个整数
-
if(input>num) {//如果大于随机数
-
System.out.println("你输入的数字大了!");
-
}else if(input<num) {//如果小于随机数
-
System.out.println("你输入的数字小了!");
-
}
-
else if(input==num) {//如果等于随机数
-
break;//结束循环
-
}else {
-
System.out.println("您的输入有误!");
-
}
-
}
-
System.out.println("恭喜你答对了!");
-
sc.close();//关闭扫描器
-
}
-
}
猜一猜随机数是多少
日期时间类
1.Date类
1.Date 类用于表示日期时间,使用该类表示时间需要使用其构造方法创建对象
使用 Date类的第2种构造方法创建一个 Date类的对象,代码如下:
long timeMillis=System.currentTimeMillis();
//当前系统时间所经历的毫秒数
Date date = new Date(timeMillis);
上述代码中的System类的currentTimeMillis0方法主要用来获取当前系统时间距标准基准时间的毫秒数。另外,这里需要注意的是,创建 Date 对象时使用的是 long 型整数,而不是 double 型,这主要是因为 double类型可能会损失精度。
-
import java.util.Date;
-
public class DateDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
Date date = new Date();//创建现在时间
-
long value = date.getTime();//获取毫秒数
-
System.out.println("日期:"+date);
-
System.out.println("到现在所经历的毫秒数为:"+value);
-
}
-
}
4.由于DateFormat类是一个抽象类,不能用 new创建实例对象。因此,除了使用getXXXInstance0方能创健其对象,还可以使用其子类,如 SimpleDateFormat 类,该类是一个以与语言环境相关的方式*花式化和分析日期的具体类,它允许进行格式化 (日期一文本)、分析(文本一日期)和规范化。
5.SimpleDateFormat 类提供了19个格式化字符,可以让开发者随意编写日期格式,这19个格式化字符如表11.17所示。
例子:
-
import java.text.DateFormat;
-
import java.text.SimpleDateFormat;
-
import java.util.Date;
-
public class DateFormatDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
DateFormat df = new SimpleDateFormat("yyyy年 MM月 dd日 EEEE HH时 mm分 ss秒");
-
System.out.println("各位观众大家好,现在是");
-
System.out.println(df.format(new Date()));
-
System.out.println(", 欢迎收看新闻。");
-
}
-
}
欢迎收看
3.Calendar 类
1.Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF MONTH、HOU等日历字段之间的转换提供了一些方法,并为操作日历字段(如获得下星期的日期)提供了一些方法。另外,该类还为实现包范围外的具体日历系统提供了其他字段和方法,这些字段和方法被定义为 protected
2.Calendar 提供了一个类方法 getInstance0,以获得此类型的一个通用的对象。Calendar 类的getInstance0方法返回一个Calendar对象,其日历字段已由当前日期和时间初始化,其使用方法如下:
Calendar rightNow = Calendar.getlnstance();
3.Calendar类提供的常用字段及其说明如表11.19所示。
例子:
-
import java.text.SimpleDateFormat;
-
import java.util.Calendar;
-
import java.util.Date;
-
public class CountDown {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
System.out.println("————————————中华人民共和国成立100周年倒计时————————————");
-
Date date = new Date();//当前时间
-
//创建SimpleDateFormat对象,指定目标格式
-
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年 MM月 dd日");
-
//调用format方法,格式化时间,转换为指定格式
-
String today = simpleDateFormat.format(date);//输出当前时间
-
System.out.println("今天是"+ today);
-
//获取自1970年1月1日至当前时间所经过的毫秒数
-
long time1 = date.getTime();
-
//使用默认时区和语言环境获得一个日历calendar
-
Calendar calendar = Calendar.getInstance();
-
//设置日历Calendar中的年、月、日的值。因为月份是从0开始计算的,所以减一
-
calendar.set(2049, 10-1, 1);
-
//计算1970年1月1日至2049年10月1日所经过的毫秒数
-
long time2 = calendar.getTimeInMillis();
-
//计算2049年10月1日距离当前时间相差的天数
-
long day =(time2 - time1)/(1000* 60* 60* 24);
-
System.out.println("距离2049年10月1日还有"+day+"天!");
-
}
-
}
例子:
-
import java.io.BufferedReader;
-
import java.io.IOException;
-
import java.io.InputStream;
-
import java.io.InputStreamReader;
-
public class RuntimeExecDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
Runtime r = Runtime.getRuntime();//获取本地Runtime对象
-
try {
-
Process p =r.exec("help");//执行help命令,获取进程对象
-
InputStream is = p.getInputStream();//获取进程的字节输入流
-
//将字节输入流转换为字符输入流
-
BufferedReader br = new BufferedReader(new InputStreamReader(is));
-
String str = null;//创建null 字符串
-
while((str = br.readLine()) != null) {//如果字符流中可以获取非空内容
-
System.out.println(str);//打印获取的内容
-
}
-
}catch(IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
2.查看内存
1.Runtime类可以通过freeMemory0方法查看当前Java虚拟机可用内存的剩余量。如果程序能够实时监控内存剩余量,就可以尽量控制程序对内存的占用,从而避免出现“内存溢出”的情况。同样,也可以用来对测试程序性能,检验程序算法是否导致内存紧张
例子:
-
public class MemoryDemo {
-
public static void main(String[] args) {
-
// TODO Auto-generated method stub
-
Runtime r= Runtime.getRuntime();//获取本地Runtime对象
-
Integer ints[] = new Integer[10000];//创建长度为10000的整型数组
-
long before = r.freeMemory();//获取当前空闲内存数
-
System.out.println("赋值前空闲内存字节数:"+before);
-
for(int i=0,length = ints.length;i<length;i++) {//循环为整型数组赋值
-
ints[i] = i;//赋值
-
}
-
long after = r.freeMemory();//获取当前空闲内存数
-
System.out.println("赋值后空闲内存字节数:"+after);
-
System.out.println("数组用掉的内存字节数:"+(before- after));//输出数组用掉的内存量
-
}
-
}