龙空技术网

Java教学:Integer、日期类、数字类、随机数、枚举,一次搞定!

程序员小橙 91

前言:

当前你们对“字符串datejava”都比较注意,朋友们都需要学习一些“字符串datejava”的相关知识。那么小编在网上网罗了一些关于“字符串datejava””的相关内容,希望各位老铁们能喜欢,大家一起来学习一下吧!

基本数据类型的8种包装类

java种为8种基本数据类型又对应准备了8种包装类型。

8种包装类属于引用数据类型,父类是Object。

为什么要再提供8种包装类呢?

因为8种基本数据类型不够用。所以SUN又提供了对应的8种包装类型。

8种基本数据类型对应的包装类型名是什么?

8种包装类中其中6个都是数字对应的包装类,他们的父类都是Number,可以先研究一下Number中公共的方法:

Number是一个抽象类,无法实例化对象。

Number类中有这样的方法:

byte byteValue() 以byte形式返回指定的数值

abstract double doubleValue() 以double形式返回指定的数值

abstract float float Value() 以float 形式返回指定的数值

abstract int intValue() 以int形式返回指定的数值

abstract long longValue() 以long形式返回指定的数值

short shortValue() 以short形式返回指定的数值

这些方法其实所有的数字包装类的子类都有,这些方法是负责拆箱的。

//装箱和拆箱的概念public class Test {    public static void main(String[] args) {        //123这个基本数据类型,进行构造方法的包装达到了:基本数据类型向引用数据类型的转换。                //基本数据类型---(转换为)--->引用数据类型(装箱)        Integer i = new Integer(123);                //将引用数据类型---(转换为)--->基本数据类型(拆箱)        float f = i.floatValue();        System.out.println(f);//123.0        //将引用数据类型---(转换为)--->基本数据类型(拆箱)        int ret = i.intValue();        System.out.println(ret);//123    }}

Integer包装类的构造方法有两个:

Integer(int)

Integer(String)

//将数字100转换成Integer包装类型(int--> Intrger)Integer x = new Integer(100);System.out.println(x);//将String类型的数字,转换成Integer包装类型。(String---> Integer)Integer y = new Integer("123");System.out.println(y);

Double包装类的构造方法

//double-->DoubleDoublex = new Double(1.23);System.out.println(x);//String-->DoubleDoubley = new Integer("3.14");System.out.println(y);

通过访问包装类的常量,来获取最大值和最小值

public class Test {    public static void main(String[] args) {        System.out.println("int的最大值" + Integer.MAX_VALUE);        System.out.println("int的最小值" + Integer.MIN_VALUE);        System.out.println("byte的最大值" + Byte.MAX_VALUE);        System.out.println("byte的最小值" + Byte.MIN_VALUE);    }}

在JDK1.5 之后,支持自动拆箱和自动装箱了。

public class Test {    public static void main(String[] args) {        //自动装箱        //int类型 -自动转换为-> Integer        Integer x = 100;        //自动拆箱        //Integer -自动转换为-> int        int y = x;    }}

面试题:String为什么是不可变的?

我看过源代码,String类中有一个byte[]数组,这个byte[]数组采用了final修饰,因为数组一旦创建长度不可变,并且被final修饰的引用一旦指向某个对象之后,不可再指向其它对象,所以String是不可变的。

面试题:StringBuffer/StringBuilder为什么是可变的呢?

我看过源代码,StringBuffer/StringBuilder内部实际上是一个byte[]数组,这个byte[]数组没有被final修饰,StringBuffer/StringBuilder的初始化容量我记得应该是16,当存满之后会进行扩容,底层调用了数组拷贝的方法 System.arraycopy()....是这样扩容的。所以StringBuffer/StringBuilder适合于使用字符串的频繁拼接操作。

面试题

Integer x =127;Interger y = 127;System.out.println(x == y);//trueInteger a =128;Interger b = 128;System.out.println(a == b);//false

java中为了提高程序的执行效率,将[-128到127]之间所有的包装对象提前创建好,放到了一个方法区的“整数型常量池”当中了,目的是只要用这个区间的数据不需要再new了,直接从整数型常量池当中取出来。

Integer常用方法

intValue()

//手动装箱Integer x = new Integer(1000);//手动装箱int y = x.intValue();System.out.println(y);

总结一下之前学过的异常:

空指针异常:NullPointerException

类型转换异常:ClassCastException

数组下标越界异常:ArrayIndexOutOfBoundsException

数字格式化异常:NumberFormatException

重点方法

static int parseInt(String s)

静态方法,传参String,返回int

//String--转换-->intint retValue = Integer.parseInt(123);System.out.println(retValue + 100);//223//照葫芦画瓢Double retValue2 = Double.parseDouble(3.14);System.out.println(retValue2 + 1);//4.140000000000001(精度问题)//继续画瓢folat retValue3 = Float.parseFloat("1.0");System.out.println(retValue3 + 1);//2.0

(了解)static String toBinaryString(int i)

静态的:将十进制转换成二进制字符串。

String binaryString = Integer.toBinaryString(3);System.out.println(binaryString);//"11" 二进制字符串

(了解)String toHexString(int i)

静态的:将十进制转换成十六进制字符串。

//十六进制:1 2 3 4 5 6 7 8 9 a b c d e f 10 11 12 13 14 15 16 17 18 19 1aString hexString = Integer.toHexString(16);System.out.println(hexString);//"10" 十六进制字符串

(了解)static String toOctalString(int i)

静态的:将十进制转换成八进制字符串。

String octalString = Integer.toOctalString(8);System.out.println(octalString);//"10" 八进制字符串

(了解)valueOf()

//static Integer valueOf(int i)//静态的:int--->IntegerInteger i1 = Integer.valueOf(100);System.out.println(i1);//static Integer valueOf(String s)//静态的:String--->IntegerInteger i2 = Integer.valueOf("100");System.out.println(i2);
日期类

1.怎么获取系统当前时间

2.String --->Date

3.Date--->String

import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;public class Test {    public static void main(String[] args) throws ParseException {        //获取系统当前时间(精确到毫秒的系统当前时间)        //直接调用无参数构造方法就行        Date nowTime = new Date();        //java.util.Date类的toString()方法已经被重写了。        //输出的应该不是一个对象的内存地址,应该是一个日期字符串。        //System.out.println(nowTime);//Sat Oct 17 21:38:33 CST 2020        //日期可以格式化么?        //将日期类型Date,按照指定的格式进行转换:Date--转换成具有一定格式的日期字符串-->String        //SimpleDateFormat是java.text包下的。专门负责日期格式化的。        /*        yyyy 年(年是4位)        MM 月(月是两位)        dd 日        HH 时        mm 分        ss 秒        SSS 毫秒(毫秒3位,最高999,1000毫秒代表1秒)        注意:在日期格式中,除了y M d H m s S这些字符不能随便写之外,剩下的符号格式自己随意组织。        */        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");        String nowTimeStr = sdf.format(nowTime);        System.out.println(nowTimeStr);        //假设现在有一个日期字符串String,怎么转换成Date类型?        //String --> Date        String time = "2008-08-08 08:08:08 888";        //这里的格式不能随便写,要和日期字符串格式相同        //注意:字符串的日期格式和SimpleDateFormat对象指定的日期格式要一致。不然会出现异常:java.text.ParseException        SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");        Date dateTime = sdf2.parse(time);        System.out.println(dateTime);//Fri Aug 08 08:08:08 CST 2008    }}

简单总结一下System类的相关属性和方法:

System.out 【out是System类的静态变量】

System.out.println()【println()方法不是System类的,是PrintStream类的方法。】

System.gc() 建议启动垃圾回收器

System.currentTimeMills() 获取自1970年1月1日到系统当前时间的总毫秒数。

System.exit(0) 退出JVM

public class Test {    public static void main(String[] args) {        //获取自1970年1月1日 00:00:00 000到当前系统时间的总毫秒数。        long nowTimeMillis = System.currentTimeMillis();        System.out.println(nowTimeMillis);        //统计一个方法执行所耗费的时长        //在调用目标方法之前记录一个毫秒数        long begin = System.currentTimeMillis();        print();        //在执行完目标方法之后记录一个毫秒数        long end = System.currentTimeMillis();        System.out.println("耗费时长" + (end-begin) + "毫秒");    }    //需求:统计一个方法执行所耗费的时长    public static void print(){        for (int i = 0; i < 1000; i++) {            System.out.println("i = " + i);        }    }}

通过毫秒构造Date对象

import java.text.SimpleDateFormat;import java.util.Date;public class Test {    public static void main(String[] args) {        //这个时间是什么时间?        //1970-01-01 00:00:00 001        Date time = new Date(1);//注意:参数是一个毫秒        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");        String strTime = sdf.format(time);        //北京是东8区,差8个小时        System.out.println(strTime);//1970-01-01 08:00:00 001        //获取昨天此时的时间。        Date time2 = new Date(System.currentTimeMillis() - 1000*60*60*24);        String strTime2 = sdf.format(time2);        System.out.println(strTime2);//2020-10-17 09:27:29 599        //获取去年今天的时间        //Java中,但凡遇到整数值,都以int作为默认类型        //int类型的上限根本无法保留一年的毫秒数,会进行缩进补位。        Date time3 = new Date(System.currentTimeMillis() - 1000L*60L*60L*24L*365L);        String strTime3 = sdf.format(time3);        System.out.println(strTime3);    }}
数字类数字格式化(了解)
import java.text.DecimalFormat;public class Test {    public static void main(String[] args) {        //java.text.DecimalFormat专门负责数字格式化的。        //DecimalFormat df = new DecimalFormat("数字格式");        /*            数字格式有哪些?            # 代表任意数字            , 代表千分位            . 代表小数点            0 代表不够时补0        */        DecimalFormat df = new DecimalFormat("###,###.##");//表示:加入千分位,保留2个小数        String s = df.format(1234.56);        System.out.println(s);        String s1 = df.format(1234.569999);        System.out.println(s1);        DecimalFormat df2 = new DecimalFormat("###,###.0000");//保留4个小数位,不够补0        String s2 = df2.format(1234.56);        System.out.println(s2);    }}
高精度BigDecimal

BigDecimal 属于大数据,精度极高。不属于基本数据类型,属于Java对象(引用数据类型),这是SUN提供的一个类。专门用在财务软件当中。

注意:财务软件中double的精度是不够的。

面试题:你处理过财务数据么?用的哪一种数据类型?

千万别说double,说java.math.BigDecimal

//精度极高的100BigDecimal v1 = new BigDecimal(100);//精度极高的200BigDecimal v2 = new BigDecimal(200);//求和BigDecimal v3 =v1.add(v2) ;//调用方法求和System.out.println(v3);//300BigDecimal v4 =v2.divide(v1) ;//调用方法求商System.out.println(v4);//2
随机数
public class Test {    public static void main(String[] args) {        //创建随机数对象        Random random = new Random();                //随机产生一个int类型取值范围内的数字        int num1 = random.nextInt();        System.out.println(num1);        //产生[0-100]之间的随机数。不能产生101.        //nextInt翻译为:下一个int类型的数据是101,表示只能取到100。        int num2 = random.nextInt(101);//不包括101        System.out.println(num2);    }}

编写程序,生成5个不重复的随机数[0-100],重复的话重新生成。

最终生成的5个随机数放到数组中,要求数组中这5个随机数不重复。

import java.util.Random;public class Test {    public static void main(String[] args) {        //创建Random对象        Random random = new Random();        //准备一个长度为5的一维数组。        int[] arr = new int[5];//默认都是0        for (int i = 0; i < arr.length; i++) {            arr[i] = -1;        }        //循环,生成随机数        int index = 0;        while (index < arr.length){            //生成随机数            int num = random.nextInt(101);            //判断arr数组中有没有这个num            //如果没有这个num,就放进去            if (!contains(arr,num)){                arr[index] = num;                index++;            }        }        //遍历以上的数组        for (int i = 0; i < arr.length; i++) {            System.out.println(arr[i]);        }    }    //单独编写一个方法,这个方法专门用来判断数组中是否包含某个元素    /**     * arr 数组     * key 元素     * return ture 表示包含 false表示不包含     * */    public static boolean contains(int[] arr,int key){        /*        //这个方案有bug(排序出问题了)        //对数组进行升序        Arrays.sort(arr);        //进行二分法查找        //二分法查找的结果 >=0 说明,这个元素找到了,找到了表示存在!        return Arrays.binarySearch(arr,key) >= 0;              */        for (int i = 0; i < arr.length; i++) {            if (arr[i] == key){                return true;            }        }        return false;    }}
枚举

枚举:一枚一枚可以列举出来的,才建议使用枚举类型。

枚举编译之后也是生成class文件。

枚举也是一种引用数据类型。

枚举中的每一个值,可以看做是“常量”。

枚举类型怎么定义,语法格式:

enum 枚举类型名{

枚举值1,枚举值2,......

}

结果只有两种情况的,建议使用类型,结果超过两种并且还是可以一枚一枚列举出来的,建议使用枚举类型。

例如:颜色、星期、四季......

switch语句支持枚举类型。

switch也支持String、int。

低版本的JDK只支持int。

高版本的JDK,支持int、String、枚举。

byte、short、char也可以,因为存在自动类型转换。

标签: #字符串datejava #java保留有效数字方法 #java时间格式的转换 #java今天是星期几 #java int类型长度