Java常用类

Java常用类:

前言:

在上两节的博文中,我们对Java的多线程进行了深入的解析,理解起来还是有一些难度的;

今天这一节,我们讲点轻松点的,就是Java中的一些常用类的用法,这些类都放在java.lang包或者

java.util包下;而我们不需要import lang包,因为系统会自动导入这个包!

好了,废话不多说,看是这一节!


Java.lang包中的常用类:


Object类

简介:

Object类是所有类的父类,默认继承该类,每个类都可以直接调用Object的方法,同时还可以继承其他的类,

这并没有违背Java的单继承的规则哦!


常用方法:

toString()返回描述对象的一个字符串,通常重写该方法以取得对象的字符串信息
另外,当调用system.print(),对象作为参数时,默认调用对象的toString()方法
String
equals()判断两个对象的内容是否相同,可按需求对其进行重写boolean
clone()实现对象的复制,与赋值不同,赋值引用的是同一对象实例;另外需要实现
Cloneable接口才能使用clone()方法,否则会引发CloneNotSupportedException异常
Object
getClass()该类封装对象接口运行时的状态,类加载时,Class对象自动创建,但是我们
不能够自己去new Class()哦!
Class

代码实例:
  1. package com.jay.example;  
  2.   
  3. public class ObjectTest {  
  4.     public static void main(String[] args) throws Exception {  
  5.         Person p1 = new Person("老王"48);  
  6.         Person p2 = new Person("老张"47);  
  7.         Person p3 = new Person("老王"48);  
  8.           
  9.         String s1 = new String("呵呵");  
  10.         String s2 = new String("呵呵");  
  11.           
  12.         //这里直接调用print对象名的话,自动调用对象的toString()方法  
  13.         //如果不重写的话,返回的字符串:  
  14.         //getClass().getName() + '@' + Interger.toHexString(hashcode())  
  15.         //就是类名@哈希码  
  16.         System.out.println(p1);  
  17.           
  18.           
  19.         //这里要注意==赋值和equals的区别  
  20.         //==比较的是地址;equals比较的是两对象是否指向同一实例  
  21.         //而这里要注意字符串,字符串变量是有一个常量池的,当我们创建一个新的字符串  
  22.         //如果字符串中已经存在了,那么将该对象指向该内存空间,即指向同一引用对象  
  23.         //如果不是String对象而是普通的对象的话,直接调用equals是不相等的  
  24.         //所以需要对equals方法进行重写,不然就不能判断对象是否相等了  
  25.         System.out.println(p1 == p3);  
  26.         System.out.println(p1.equals(p3));  
  27.           
  28.         //字符串常量池,使得两对象equals返回ture  
  29.         System.out.println(s1 == s2);  
  30.         System.out.println(s1.equals(s2));  
  31.           
  32.         //调用clone()方法进行对象的复制,需要实现Cloneable接口,  
  33.         //要覆盖Clone()方法,至少写个return super().clone();还要注意使用try-catch对  
  34.         //CloneNotsupportedException进行捕获;  
  35.         //克隆与==赋值不一样,指向的不是同一实例对象哦!  
  36.           
  37.         try {  
  38.             Person p4 = (Person) p2.clone();  
  39.             System.out.println(p4);  
  40.             System.out.println("p4和p2是否为同一对象:" + (p4 == p2));  
  41.         } catch (CloneNotSupportedException e) {  
  42.             e.printStackTrace();  
  43.         }  
  44.           
  45.           
  46.         /*Class类的使用: 
  47.          * ①获得指向某个类的class对象的引用:   Class c1 = p1.getClass(); 
  48.          * ②获得接口或者类的全名:     c1.getName() 
  49.          * ③当然也可以通过Class的静态方法forName()获得class对象引用:Class.forName("类的全名"); 
  50.          * ④getSuperclass():获得父类的class对象 
  51.          * ⑤newInstance();创建一个与调用对象对应类的实例,是新的哦! 
  52.          *  
  53.          * */  
  54.           
  55.         System.out.println(p1.getClass());  
  56.           
  57.         System.out.println(p1.getClass().getName());  
  58.           
  59.         Class c1 = Class.forName("com.jay.example.Person");  
  60.         System.out.println(c1);  
  61.         System.out.println(c1.getSuperclass());  
  62.           
  63.           
  64.         Person p5 = p1.getClass().newInstance();  
  65.         p5.name = "老黄";  
  66.         p5.age = 25;  
  67.         System.out.println(p5);  
  68.     }  
  69. }  


运行截图:




封装类


在Java中,基本数据类型都有与之对应的封装类(包装类)   eg:  int ----> Integer

装箱:基本数据类型---->封装类

拆箱:封装类--->基本数据类型

装箱与拆箱由系统自动完成!



基本数据类型与包装类的对照:


int --->  Integer                      short---> Short                  long---> Long

char --->  Character              float  ---> Float                  double--->Double

boolaen--->Boolean              byte  --->  Byte


使用窍门:

包装类-->基本:   intValue()

字符串--->基本:  parseInt("str")

包装--->字符串:  toString()

字符串--->包装: valueOf("str")



使用示例代码:
  1. package com.jay.example;  
  2.   
  3. public class PottingTest {  
  4.     public static void main(String[] args) {  
  5.           
  6.         //①包装类与基本数据类型的相互转换  
  7.         //除了这种构造方法外:还可以写成,Integer(123),但使用字符串的话一定要  
  8.         //是符合对应数字格式的字符串,否则印发NumberFormatException(数字转换异常)  
  9.         //因为封箱与拆箱都是自动进行的,所以如果我们输入两个数相加的结果是:246  
  10.         //其他格式的都是这种转换格式,把int替换成其他数据类型即可  
  11.         Integer i = new Integer("123");  
  12.         int j = i.intValue();  
  13.         System.out.println(i + j);  
  14.   
  15.           
  16.         /* 
  17.          * ②字符串转换为基本数据类型 
  18.          * 同样要是符合数字类型的字符串,不然也会报异常 
  19.          * 同理,只需要把int替换成其他数据类型即可:eg: Double.parseDouble("1.23"); 
  20.          * 别忘了Java小数默认是Double类型的哦! 
  21.          * */  
  22.           
  23.          int i2 = Integer.parseInt("321");  
  24.            
  25.           
  26.          /* 
  27.           * ③包装类与字符串的相互转换: 
  28.           * */  
  29.           
  30.          //包装类转换成字符串,直接调用toString()即可  
  31.          Integer a = new Integer(11);  
  32.          i.toString();  
  33.            
  34.          //字符串转换为包装类:  
  35.          Integer ig = Integer.valueOf("987");  
  36.                
  37.     }  
  38. }  



Character判断字符类别的方法:

ps:都是静态方法,参数都是char字符,返回值都是boolean!

 

数字:isDiagit(char)                    字母:isLetter(char)                  数字或字母:isLetterOrDigit(char)

小写字母:isLowerCase(char)                大写字母:isUpperCase(char)                空格:isSpace(char)        




Math类

常量PI和E

由名字就知道这个是数学类,当然是提供一些数学方法的啦,比如:正余弦运算等

Math类定义了两个常量,PI(圆周率)和E(自然数),顺道复习下Java中常量的定义方式:

public static final double PI:

public static final double E:

除了以上变量,当然还有很多的数学方法,比较多,这里只列出比较常用的

几个,有需要的自己查询API,都是静态方法,可以直接通过Math.XXX调用哦!


常用属性:

sqrt():求平方根

pow(数字,次方):求数字的多少次方

rint():返回与参数最接近的整数值,以double形式返回

abs():返回绝对值

max():返回两数的最大值

min():返回两数的最小值





System类

常见方法:

①exit(int exitcode):结束应用程序的运行,会返回exitcode给父进程(操作系统),exitcode为0的话表示正常退出

②复制数组:static void arraycopy(被复制的数组,起始下标,目标数组,起始下标,长度)

下标是从0开始算的哦!


使用实例:

  1. package com.jay.example;  
  2.   
  3. public class ArrayCopyTest {  
  4.     public static void main(String[] args) {  
  5.         int[] a = {1,2,3,4,5,6,7,8};  
  6.         int[] b = {0,0,0,0,0,0,0,0};  
  7.         int[] c = {0,0,0,0,0};  
  8.           
  9.         //这里要注意下标不能越界,否则会引发ArrayIndexOutOfBoundsException异常  
  10.         //输出结果是:3,4,5,6,7  
  11.           
  12.         System.arraycopy(a, 2, c, 05);  
  13.         for(int i = 0; i < c.length;i++)  
  14.             System.out.print(c[i]);  
  15.           
  16.           
  17.           
  18.     }  
  19. }  


③currentTimeMillis()

返回从1970.1.1 零点到现在的时间,单位是毫秒,通常用来计算程序运行耗费的时间

使用实例:

  1. package com.jay.example;  
  2.   
  3. public class CurrentTimeMillisTest {  
  4.     public static void main(String[] args) {  
  5.         long start,end;  
  6.         int j = 0,k=0;  
  7.         //记录起始时间  
  8.         start = System.currentTimeMillis();  
  9.         for(int i = 0;i < 1000;i++)  
  10.             for(j = 0;j < 1000;j++)  
  11.             {  
  12.                 k++;  
  13.             }  
  14.         //记录结束时间  
  15.         end = System.currentTimeMillis();  
  16.         //结束时间-起始时间,即可算出两层for循环的运行时间  
  17.         //这个是电脑配置是有一定关系的!不同电脑的结果可能不同!我的电脑是1毫秒  
  18.         System.out.println("循环1000次消耗了" + (end - start) + "毫秒");  
  19.     }  
  20. }  




String类

相关操作:

①字符串的连接:用"+"加号可以连接成字符串,比如: 123 + "" = "123"
②求字符串的长度:  str.length()
③求子串:str.subString(开始下标,"结束下标")    //注意是从0开始算的,截取到结束下标 - 1;或者这样算:子串长度 = :结束 - 开始
④判断是否相等:这里要注意==这个比较的是字符串是否存储在同一位置!如果是比较内容我们要用equals("");
⑤返回给定下表处的字符:   str.charAt(int index);  //从0开始算的
⑥将指定字符串连接到字符串的尾部: str.concat("HeHe");
⑦检索某字符在字符串中第一次出现的下标:  str.indexOf("a");
⑧检索某字符在字符串中最后一次出现的下标:str.lastIndexOf("a")
⑨去掉头尾的空白:str.trim(),这个在数据库操作中比较常用
⑩替换字符串中的某段: str.replace("想替换的字符串","替换后的字符串");
11.比较两个字符串的大小,无视大小写:str.equalsIgnoreCase(stg);
12.全部字符转化为小写:str.toLowerCase()
13.全部字符转化为大写:str.toUpperCase();


字符串比较:

首先,我们要知道字符串和普通对象的不同,字符串都存放在一个字符串池中,

当我们新建一个字符串时,不是直接就开辟一个内存空间;而是先比较下字符串池中

是否有相同的字符串内容,如果有相同的内容的话,直接将该引用指向此处字符串内容

所以为什么相同内容字符串用"=="比较结果是true,"=="比较的是两对象是否为同一类实例的引用(地址)

但是要注意:如果是new String的话,那么是不等的!!!!

当然也可以直接用equals(),String类已重写该方法,比较的是内容是否相同

还有一个compareTo(str)方法,如果当前对象大于参数串,返回大于0的数,返回小于0的数.相等,返回0



StringBuffer类


问题引入:


先说下这货是干嘛的:因为String对象内容不可更改,使用该类实现串内容的添加,修改,删除!

什么?你没听错吧,String对象不可修?那String s = "123",s += 321";不见得运行出错或者异常啊?

输出123321,正常啊,那么为什么说String不能够修改?


问题解答:


其实原因是这样的:我们都知道生成的string对象都存放在一个字符串池中;我们上面用到的字符串的拼接;

其实涉及到的是三个字符串对象了: "123","321","123321",而123和321明显都不是我们想要的,我们只要的是123321

这样就有点浪费内存了,Java给我们提供了StringBuffer对象,实现字符串内容的改变,一定程度上减少了内存的消耗


相关方法:


①将某个对象添加到StringBuffer的尾部,每个对象都有toString()方法,所以可以直接添加  :append(对象)

②将某个对象的字符串描述插入到某个位置:  insert(下标,对象)

③替换指定位置的字符:  setCharAt(下标,字符)

④替换指定范围的字符串:  replace(起始下标,结束坐标,替换字符串);

⑤删除指定位置的字符:  deleteCharAt(下标)

⑥删除指定位置的字符串:   delete(起始坐标,结束坐标)

⑦获取子串:   substring(起始坐标,结束坐标)

⑧获取StingBuffer的长度 : length()

⑨反转字符串:   reverse()



相关方法演示代码实例:


  1. package com.jay.example;  
  2.   
  3. /* 
  4.  * 该代码演示的是StringBuffer的用法 
  5.  * */  
  6.   
  7. public class StringBufferTest {  
  8.       
  9.     public static void main(String[] args) {  
  10.         //创建StringBuffer对象的方法  
  11.         //记住:不能直接赋值,strbuf1 = "123"这样!!  
  12.         StringBuffer strbuf1 = new StringBuffer("123");  
  13.         StringBuffer strbuf2 = new StringBuffer("123");  
  14.         StringBuffer strbuf3 = new StringBuffer("123");  
  15.         StringBuffer strbuf4 = new StringBuffer("123");  
  16.         StringBuffer strbuf5 = new StringBuffer("123");  
  17.         StringBuffer strbuf6 = new StringBuffer("123");  
  18.         StringBuffer strbuf7 = new StringBuffer("123");  
  19.         StringBuffer strbuf8 = new StringBuffer("123");  
  20.         StringBuffer strbuf9 = new StringBuffer("123");  
  21.           
  22.         //调用比较方法,都是false,说明和String是有区别的  
  23.         System.out.println(strbuf1 == strbuf2);  
  24.         System.out.println(strbuf1.equals(strbuf2));        //输出false,false  
  25.           
  26.         //将某个对象添加到StringBuffer的尾部  
  27.         strbuf1.append("321");  
  28.         System.out.println(strbuf1);                //输出123321  
  29.           
  30.         //插入某个对象到某个位置  
  31.         strbuf2.insert(2"呵呵");       
  32.         System.out.println(strbuf2);     //输出结果:12呵呵3  
  33.           
  34.         //替换指定位置的字符,是字符哦!!!  
  35.         strbuf3.setCharAt(2'a');  
  36.         System.out.println(strbuf3);      //输出12a  
  37.           
  38.         //删除指定位置的字符  
  39.         strbuf4.deleteCharAt(1);  
  40.         System.out.println(strbuf4);      //输出13  
  41.           
  42.         //删除指定位置的字符串  
  43.         strbuf5.delete(02);  
  44.         System.out.println(strbuf5);      //输出:3  
  45.           
  46.         //获取子串  
  47.         System.out.println(strbuf6.substring(02));      //输出12  
  48.           
  49.         //获得字符串的长度  
  50.         System.out.println(strbuf7.length());           //输出3  
  51.           
  52.         //将字符串反转:  
  53.         strbuf8.reverse();  
  54.         System.out.println(strbuf8);                    //输出321  
  55.     }  
  56. }  




java.util包中的几个常用类:


Date类(日期)

Date类是用于封装日期和时间的,通过Date可以指定特定的一个时间.

可以通过我们前面提供的System.currentTimeMillis();方法获得从1970到现在时间的毫秒数!

用法实例:
  1. package com.jay.example;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class DateTest {  
  6.     public static void main(String[] args) {  
  7.         //获得创建Date对象的当前日期,CST代表世界统一时间  
  8.         Date d1 = new Date();  
  9.         System.out.println(d1);    //输出:Mon Apr 14 12:51:46 CST 2014  
  10.           
  11.         //也可以设置成离1970.1.1开始经过多少毫秒后的时刻  
  12.         Date d2 = new Date(7200000);      
  13.         System.out.println(d2);  
  14.           
  15.         //判断d1是否在d2日期后  
  16.         System.out.println(d1.after(d2));  
  17.           
  18.         //判断d2是否在d1日期前:  
  19.         System.out.println(d2.before(d1));  
  20.     }  
  21.       
  22.       
  23. }  




Calendar类(日历类)

用于设置或获取日历字段值,年月日时分秒,该类时抽象类!


使用流程:

通过getInstance():获得当前的系统时间;

通过get()和set()方法获取或者设置时间分量

使用getTime()和setTime()通过Date类对象获取和设置时间值


时间分量:

YEAR(年),MONTH(月),DATE(日),HOUR(时),MINUTE(分),SECOND(秒)


代码示例:

日历类的普通使用:


  1. package com.jay.example;  
  2.   
  3. import java.util.Calendar;  
  4.   
  5. public class CalendarTest {  
  6.     public static void main(String[] args) {  
  7.           
  8.         //①获得系统的当前日期,并且输出:  
  9.         Calendar cd = Calendar.getInstance();  
  10.         System.out.print("系统的当前时间为:"+ cd.get(Calendar.YEAR) + "年");  
  11.         System.out.print( cd.get(Calendar.MONTH) + "月");  
  12.         System.out.print( cd.get(Calendar.MONTH) + "月");  
  13.         System.out.print( cd.get(Calendar.DATE) + "日        ");  
  14.         System.out.print( cd.get(Calendar.HOUR) + "时");  
  15.         System.out.print( cd.get(Calendar.MINUTE) + "分");  
  16.         System.out.print( cd.get(Calendar.SECOND) + "秒");  
  17.           
  18.           
  19.         //②通过set可以设置Calendar的某个分量的值;有不同的方式,可查api  
  20.         cd.set(Calendar.MONTH, 5);  
  21.         cd.set(2012106);  
  22.           
  23.         //③可以把Date对象作为参数传入setTime(new Date())方法,也能获得系统时间  
  24.     }  
  25. }  




Random类(随机数类)


这个什么好讲的= =,知道lang.Math()也有生成随机数的方法和Util中有Random类用于生产随机数;

会自己生成随机数即可:


示例:生成 1~10 随机数的两个方法:

Random方法:(int)(Math.random()*10)

Random类:int num = new Random().nextInt() + 1


ps:如果是想是其他数据类型的随机数只需要把nextInt改为其他类型即可eg:nextFloat();



总结:

在这一节中我们对于Java的常用类进行了解析:

我们认识了所有类的父类Object类,学习了toString(),equals(),clone(),getClass()方法的使用

又学习了封装类,普通数据类型,字符串的相互转换

还学习了Math类的两个常量PI和E,以及相关的常用方法

也学习了System类的exit(),arraycopy(),currentTimeMilis()方法

接着也学习了String和StringBuffer的相关属性,比较了他们的区别

最后学习了util包中的Date,Calendar的用法

当然还有随机生成随机数的两个方法

不要刻意地去死记属性和方法,用到的时候再来查,死记过两天就忘了....



ps:本节就到这里,如果有什么纰漏,错误,好的建议,望读者支出,

万分感激,O(∩_∩)O谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值