实用类

来源:互联网 发布:可变数据印刷软件 编辑:程序博客网 时间:2024/05/18 10:00

枚举

jdk5.1开始引入了一种新的类型,枚举。是由一组固定的常量组成的类型,使用enum关键自定义。
语法:

访问修饰符 enum 枚举名{    常量1[,常量2...[;]//必须以;结尾    //其他成员(包括构造方法必须位于枚举常量后面)}
public enum Test {    Male,Female;//必须要加;}

应用:

public class WeekDemo {    public enum Week {        MON,TUE,WED,THU,FRI,SAT,SUN;        }    public void doWhat(Week day){        switch (day){        case MON:        case TUE:        case WED:        case THU:        case FRI:            System.out.println("今天周五!");            break;        case SAT:            System.out.println("今天周六!");            break;        case SUN:            System.out.println("今天周日!");            break;        default:System.out.println("输入有误");        }       }    public static void main(String[] args) {        WeekDemo wd=new WeekDemo();        wd.doWhat(Week.FRI);//结果输出:今天周五!        Week sun=Week.SUN;//另一种赋值方式        wd.doWhat(sun);//结果输出:今天周日!    }}

优点:1使得代码更容易维护,有助于确保为变量指定合法的期望的值(必须指定枚举里的常量,否则报错)2更易输入,只需要输入枚举名.常量值即可3.代码更清晰,允许使用描述性的名称表示数据,使用时直观方便。


包装类

Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,为了解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类(Wrapper Class),有些地方也翻译为外覆类或数据类型类。

包装类均位于java.lang包,包装类和基本数据类型的对应关系如下表所示:

这里写图片描述
注意:char和Character,其他类型的包装类都是直接首字母大写。String不是基本数据类型。

记忆:
这里写图片描述

对于包装类说,这些类的用途主要包含两种:
a、作为和基本数据类型对应的类类型存在,方便涉及到对象的操作。
b、包含每种基本数据类型的相关属性如最大值、最小值等,以及相关的操作方法。

为什么要用到包装类:
Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

public class Test {    public static void main(String[] args) {        int a=0;        String b=a;//错误,不能强转        Integer i=0;        String s=i.toString();//可以通过Integer独有的toString来转换    }}

包装类有三个作用:一个实现基本类型之间的转换 ,二是便于函数传值 ,三就是在一些地方要用到Object的时候方便将基本数据类型装换。

注意:基本数据类型不存在null值,一经初始化,就被赋予另外的默认值. 但包装类是存在null值的,只做初始化而不赋值,那它就是个null。例如int默认值0,Integer默认值是null。

JDK1.5版本后不需要编码实现基本数据类型和包装类之间的转换,编译器会自动完成。

Integer i=9;int a=i;

Math类常用方法

public class Main {      public static void main(String[] args) {          // TODO Auto-generated method stub          System.out.println(Math.E);//比任何其他值都更接近 e(即自然对数的底数)的 double 值。          System.out.println(Math.PI);//比任何其他值都更接近 pi(即圆的周长与直径之比)的 double 值。          /*          * 1.abs绝对值函数          * 对各种数据类型求绝对值          */          System.out.println(Math.abs(-10));//输出10          /*          * 2.三角函数与反三角函数          * cos求余弦          * sin求正弦          * tan求正切          * acos求反余弦          * asin求反正弦          * atan求反正切          * atan2(y,x)求向量(x,y)与x轴夹角          */          System.out.println(Math.acos(-1.0));//输出圆周率3.14...          System.out.println(Math.atan2(1.0, 1.0));//输出 π/4 的小数值          /*          * 3.开根号          * cbrt(x)开立方          * sqrt(x)开平方          * hypot(x,y)求sqrt(x*x+y*y)在求两点间距离时有用sqrt((x1-x2)^2+(y1-y2)^2)          */          System.out.println(Math.sqrt(4.0));//输出2.0          System.out.println(Math.cbrt(8.0));//输出2.0          System.out.println(Math.hypot(3.0, 4.0));//输出5.0          /*          * 4.最值          * max(a,b)求最大值          * min(a,b)求最小值          */          System.out.println(Math.max(1, 2));//输出2          System.out.println(Math.min(1.9, -0.2));//输出-0.2          /*          * 5.对数          * log(a) a的自然对数(底数是e)          * log10(a) a 的底数为10的对数          * log1p(a) a+1的自然对数          * 值得注意的是,前面其他函数都有重载,对数运算的函数只能传double型数据并返回double型数据          */          System.out.println(Math.log(Math.E));//输出1.0          System.out.println(Math.log10(10));//输出1.0          System.out.println(Math.log1p(Math.E-1.0));//输出1.0          /*          * 6.幂          * exp(x) 返回e^x的值          * expm1(x) 返回e^x - 1的值          * pow(x,y) 返回x^y的值          * 这里可用的数据类型也只有double型          */          System.out.println(Math.exp(2));//输出E^2的值          System.out.println(Math.pow(2.0, 3.0));//输出8.0          /*          * 7.随机数          * random()返回[0.0,1.0)之间的double值          * 这个产生的随机数其实可以通过*x控制          * 比如(int)(random*100)后可以得到[0,100)之间的整数          */          System.out.println((int)(Math.random()*100));//输出[0,100)间的随机数          /*          * 8.转换          * toDegrees(a) 弧度换角度          * toRadians(a) 角度换弧度          */          System.out.println(Math.toDegrees(Math.PI));//输出180.0          System.out.println(Math.toRadians(180));//输出 π 的值          /*          * 9.其他          */          //copySign(x,y) 返回 用y的符号取代x的符号后新的x值          System.out.println(Math.copySign(-1.0, 2.0));//输出1.0          System.out.println(Math.copySign(2.0, -1.0));//输出-2.0          //ceil(a) 返回大于a的第一个整数所对应的浮点数(值是整的,类型是浮点型)          //可以通过强制转换将类型换成整型          System.out.println(Math.ceil(1.3443));//输出2.0          System.out.println((int)Math.ceil(1.3443));//输出2          //floor(a) 返回小于a的第一个整数所对应的浮点数(值是整的,类型是浮点型)          System.out.println(Math.floor(1.3443));//输出1.0          //rint(a) 返回最接近a的整数的double值          System.out.println(Math.rint(1.2));//输出1.0          System.out.println(Math.rint(1.8));//输出2.0          //nextAfter(a,b) 返回(a,b)或(b,a)间与a相邻的浮点数 b可以比a小          System.out.println(Math.nextAfter(1.2, 2.7));//输出1.2000000000000002          System.out.println(Math.nextAfter(1.2, -1));//输出1.1999999999999997            //所以这里的b是控制条件          //nextUp(a) 返回比a大一点点的浮点数          System.out.println(Math.nextUp(1.2));//输出1.2000000000000002          //nextDown(a) 返回比a小一点点的浮点数          System.out.println(Math.nextDown(1.2));//输出1.1999999999999997         }  }  

常用方法:
1.Math.abs(double a)返回绝对值
2.Math.max(double a,double b)返回最大值
3.Math.random()返回一个double值,范围在[0.0,1.0]之间。


String类方法

public class Main {      public static void main(String[] args) {         String a="ssde到底";       System.out.println(a.length());//获取字符串长度:6       //==和equals判断相等的比较       //==判断的是两个对象在内存中的地址,也就是判断是否是同一个对象,equals判断的是两个对象的值是否一致。       //==与equals的主要区别是:==常用于比较原生类型,而equals()方法用于检查对象的相等性。       String b=new String("hh");       String c=new String("hh");       if(b==c){           System.out.println("==判断有效");       }       else{           System.out.println("==判断无效");//地址不同,故b==c不成立       }       if(b.equals(c)){           System.out.println("equals判断有效");       }       else{           System.out.println("equals判断无效");//值相同,故b.equals(c)成立       }       //没有使用new创建新的对象,此时两字符串的指向的地址和值都相同       String d="s";       String e="s";       if(d==e){           System.out.println("==判断有效");//输出       }       else{           System.out.println("==判断无效");       }       if(d.equals(e)){           System.out.println("equals判断有效");//输出       }       else{           System.out.println("equals判断无效");       }       //忽略大小写        String f="KiM";       if(f.equalsIgnoreCase("kim")){           System.out.println("equalsIgnoreCase忽略大小写");       }        //大小写转换       System.out.println("大写"+f.toUpperCase()+"小写"+f.toLowerCase());       //字符串连接       System.out.println(f.concat(a));        //String的提取和查询       String g="sde131回火";       System.out.println("搜索第一个出现的字符int类型的ch(ascII码)或者String:"+g.indexOf(100)+","+g.indexOf("回"));//-1表示不存在       System.out.println("搜索最后一个出现的字符int类型的ch(ascII码)或者String:"+g.lastIndexOf("1"));       System.out.println("提取从索引位置index开始的字符串:"+g.substring(3));//131回火       System.out.println("提取从索引位置之间的字符串:"+g.substring(3,5));//13       //返回一个前后不含任何空格的字符串副本(注意,中间的空格不能去除)       String h=" sde131回     火    ";       System.out.println(h);//" sde131回     火    "       System.out.println(h.trim());//"sde131回     火"       //字符串拆分       String abc="a,b,c,e";       String[] j=abc.split(",",3);//遇到,进行拆分,后面的数字3表示拆分次数,结果是字符串数组       for(String t:j){       System.out.println(t);//结果依次输出:a  b  c,e       }    }  }  

StringBuffer类和StringBulider类

StringBuffer类:
比String类更高效的存储字符串的一种引用数据类型,特别是在对字符串进行操作时效率更高。

常用方法:

public class Main {      public static void main(String[] args) {         StringBuffer sb=new StringBuffer("abc");       //转化成string类型       String a=sb.toString();       int b=3;       sb.append(b);//append连接字符串,可以将任意类型的参数追加到字符串后,而String只能追加字符串       System.out.println(sb);//abc3        //insert(位置,参数)将参数插到字符串指定位置并返回,参数可以是包括String的任意类型       sb.insert(1, 333);       System.out.println(sb);//a333bc3    }  }  

StringBulider
是一个可变的字符序列,比StringBuffer更快,方法与StringBuffer基本一致。

String,StringBuffer,StringBuilder三者区别:
1.String是不可变对象,每次对String类型进行改变时都会生成一个新的String对象,所以经常改变内容的字符串最好不要用String类型,会对性能产生影响。
2.StringBuffer字符串变量:是可变的字符串,每次对StringBuffer对象进行改变时,是对对象本身进行操作,不生成新对象,所以经常改变内容的字符串用StringBuffer类型
3.StringBuilder字符串变量:和StringBuffer差不多,但是StringBuffer是线程安全的,StringBuilder是单线程的,不提供同步,所以理论上效率更高。


日期时间类

Date类:
表示日期和时间,提供了一系列操作日期和时间的各组成部分的方法。

public class Main {      public static void main(String[] args) {        Date date=new Date();//使用系统当前时间创建日期对象       System.out.println(date);//Wed Nov 01 14:26:03 CST 2017    }  }  

Calendar类:
也是来操作日期和时间的类,看做Date增强版,通过静态方法getInstance()获得Calander对象。
还提供了一些静态方法和字段来操作日历:

public class Main {     public static void main(String[] args) {        Calendar cl=Calendar.getInstance();//获取当前Calendar对象      //注意,月份+1,星期-1      System.out.println("今天是"+cl.get(Calendar.YEAR)+"年"+(cl.get(Calendar.MONTH)+1)+"月"+cl.get(Calendar.DAY_OF_MONTH)+"日星期"+(cl.get(Calendar.DAY_OF_WEEK)-1));    }  }  

DateFormat:常用其子类SimpleDateFormat进行日期格式转换

public class Main {      public static void main(String[] args) {       Date date=new Date();     SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//格式要正确     System.out.print(sdf.format(date));    }  }  
public class Test {    public static void main(String[] args) throws ParseException {                     Date date=new Date();             String time="1922-12-12";             SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");//格式要正确             System.out.println(sdf.parse(time));//sdf.parse(String str)将字符串转换为日期             System.out.println(sdf.format(sdf.parse(time)));//再进行日期格式转换            } }

Random类:
Random()//创建一个新的随机数生成器
nextInt()//返回一个伪随机数
nextInt(i)返回一个在0(包括),i(不包括)之间的伪随机数

public class Main {      public static void main(String[] args) {       Random r=new Random();     System.out.println(r.nextInt());     System.out.println(r.nextInt(20));    }  }  
原创粉丝点击