JAVA_SE第七章 常用API:Sring,StringBuffer & 装箱拆箱 & 日期时间 &Math &Class &Object

序:
- 基础类库位于java.lang包内。
- 工具类位于java.util包下。
- 格式化:java.text
- 文件 :java.io
- 网络编程:java.net
- 数据库JDBC:java.sql

一、String类

在用print和println输出对象名时,默认调用了toString ()方法
字符串值不可以变,创建后就在常量池中存在了。要改变只能改变引用地址

(一)String,StringBuffer,StringBuilder区别

1.String不可变字符串类;一般表示一个字符串用String,控制台输入的一定是String类型,其他类型的需要用现有的String类型重新创建;

2.字符串的值更改频繁的,用String效率低,需要不断创建新的对象,那就选择StringBuffer,StringBuilder

3.StringBuffer,StringBuilder

(二)String的常用方法

这里写图片描述

//创建字符串对象方法之一:直接赋值
        String s1 = "hello";
        String s4 = "hello";
        String s5 = "abc";
        String s6 = "ABC";
//创建字符串对象方法之二:
        String s2 = new String();
        String s3 = new String("hello");
        String s7 = new String("xyz");
        System.out.println(s1==s3); //false
        System.out.println(s1==s4); //true
//String类的一些常用的方法
//concat:字符串连接
        System.out.println(s5.concat(s3));
//length:字符串长度
        System.out.println(s7.length()); //3
//equalsIgnoreCase:忽略大小写的判断一致性。
        System.out.println(s5.equalsIgnoreCase(s6));//true
//toUpperCase转大写
        System.out.println("hello".toUpperCase());//HELLO
//toLowerCase:转小写
        System.out.println("HELLO".toLowerCase());//hello
//indexOf查找参数字符串在原字符串第一次出现的位置索引indexOf
        String sg = "hellohello";
        System.out.println(sg.indexOf("he")); //0
//lastIndexOf:查找参数下字符串在原字符串最后一次出现的位置索引
        System.out.println(sg.lastIndexOf("he")); //5
//charAt返回字符串中参数位置对应的字符
        System.out.println(sg.charAt(1));//3
//substring取子串两种形式之一:起始位置索引一直取到最后
        String sg1 = "helloabc";
        System.out.println(sg1.substring(5));//abc
//substring:取子串两种形式之二:起始到终止都指定,包括起始不包括终止[)
        System.out.println(sg1.substring(2, 4)); //ll  
//trim:去掉首尾空格
        String sg2 = "    h  e  l  l  o";
        System.out.println(sg2.trim());//h  e  l  l  o
//rpalce:替换对象数组中的指定字符串
        String sg3 = "hellohelloabc";
        System.out.println(sg3.replace("hello", "您好"));
        System.out.println(sg2.replace(" ", ""));
//hello,用空格替换空串
//endWith:判断是否以指定的参数串结尾
        String sg4 = "Demo.java";
        System.out.println(sg4.endsWith("java"));//true 可以过滤所有的java格式的文件
        System.out.println(sg4.startsWith("Demo"));//true
//compareTo:按字符的Unicode的编码,比较对象在比较的参数串之前,返回附属,之后返回整数,相等返回0.
        String sg5 = "hello";
        String sg6 = "xyz";
        System.out.println(sg5.compareTo(sg6)); //-16
        System.out.println("xxx".compareTo("aaa"));//+23
        System.out.println("xxx".compareTo("xxx"));//0
//contain:参数对象是否包含比较对象
        System.out.println("hello".contains("haa")); //false
//toCharArray:把字符串转换为字符数组
        char [] c = "hello".toCharArray();
        System.out.println(Arrays.toString(c));
//split:用特定字符串分割
        String [] strs = "aa   bb   cc dd ee ff".split("   ");//aa换行,bb换行,cc dd ee ff
        for(String ss:strs)
            System.out.println(ss);

(三)StringBuffer的常用方法

这里写图片描述

public class testStringBuffer {
    public static void main(String[] args) {
        StringBuffer sf = new StringBuffer();//空串 16个字符大小的缓冲区
        //容量
        System.out.println(sf.capacity());//16
        sf.append("hello");
        System.out.println(sf.capacity());//16
        //缩小缓冲数组大小
        sf.trimToSize();
        System.out.println(sf.capacity());
        // 可以自己设置 缓冲数组 容量的大小
        StringBuffer sf1 = new StringBuffer(100);
        //-----------------方法-------------------------------
        System.out.println("--------------------方法----------------------");
        StringBuffer sr = new StringBuffer("hello");
        sr.append("tom");
        System.out.println(sr);//"hellotom";
        char [] c = {'a','b','c'};
        //(字符数组,起始位置,几个字符)
        sr.append(c,1,2);
        System.out.println(sr);//hellotombc
        //-------------------------------------------------------------
        //在指定 的 位置 插入一个字符串
        sr.insert(5,"您好" );//"hello您好tombc"
        System.out.println(sr);
        //修改 某个 位置 的字符
        sr.setCharAt(5, '你');//"hello你好tombc"
        System.out.println(sr);
        //删除 指定位置 的字符
        sr.deleteCharAt(5);//"hello好tombc"
        System.out.println(sr);
        //删除 某一部分字符序列  [起始位置,终止位置) 
        sr.delete(6, 9);////"hello好bc"
        System.out.println(sr);
        //字符串反转
        sr.reverse();
        System.out.println(sr);
        String strr = sr.toString();    
    }
}
String和StringBuffer用时比较:
/**
 * String类连接字符串和StringBuffer连接字符串时间比较。
 *  String大概是130ms;
 *  StringBuffer大概是1ms.
 * @author 马
 *
 */
public class test4 {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        String s = "";
//      StringBuffer sf = new StringBuffer();
        for(int i = 0;i<10000;i++) {
            s+=i+",";
//          sf.append("-");
//          sf.append(i);
        }   
        long end = System.currentTimeMillis();
        System.out.println(end - start);
    }
}

二、基本类型的拆箱,装箱

JDK提供了对所有基本数据类型的包装类 将基本类型的首字母大写便是包装类 除了char—>Character 和int–>Integer

(一)整型类装箱
public class test9 {
    public static void main(String[] args) {
        //装箱:基本类型--》类类型
        int n = 22;
        Integer i = new Integer(n);  
        i = Integer.valueOf(n);
        //拆箱:类类型还原为基本数据类型
        n = i.intValue();//把对象中的值取出来
        //-----------------------
        //自动装箱
        n=i; //系统自动进行了n = i.intValue()
        //自动拆箱
        i=n; //系统自动进行了i = Integer.valueOf()
        //包装类属于不可变类,不可更改值。像String类一样
        //除了Float 和Double没有缓存,Integer有缓冲池的范围为:-128~127,超出部分不在缓冲池里,需创建对象
        Integer i1 = 22;
        Integer i2 = 22;
        Integer i3 = new Integer(22);
        Integer i4 = 222;
        Integer i5 = 222;
        //Integer有两个构造方法,一个是赋值int
        //一个是赋值字符串String,里面写了int,注意,写别的字符编译通不过
        Integer i8 = new Integer("4567");
        System.out.println(i8);
        System.out.println(i1==i2);//true
        System.out.println(i1==i3);//false
        System.out.println(i4==i5);//false超出了-128~127后,在堆里创建了对象
        //功能:字符转换
        //将字符串转换成整数,这里字符串里只能是数字,如果有其他字符,则转换不成功
        String s = "123";
        int num ;
        num= Integer.parseInt(s); //parse___转换成某类型
        num = Integer.valueOf(s);
        num = new Integer(s).intValue();
        System.out.println("----字符串转数字------"+num);
        //数字转换成字符串
        s = num+"";
        s = Integer.toString(num);
        s = String.valueOf(num);
        //进制转换
        System.out.println(Integer.toBinaryString(5));//101
        System.out.println(Integer.toOctalString(17));
        System.out.println(Integer.toHexString(12));
        System.out.println(Integer.valueOf("101", 2));
        System.out.println(Integer.valueOf("21", 8));
        System.out.println(Integer.valueOf("f", 16));
        //取值范围查询
        System.out.println(Byte.MAX_VALUE);
        System.out.println(Byte.MIN_VALUE);
    }
}
(二) 字符串包装类的应用
/**
 * 判断一串字符串里的字母数,数字数,空格数
 * @author 马
 *
 */
public class javaTest2 {
    public static void main(String[] args) {
        //字符串
        String s = "hello222 . .";
        char [] cr = s.toCharArray();
        //英文字母,数字,空格
        int count1 ,count2 ,count3;
        count1 = count2 = count3 = 0;
        for(int i = 0;i < cr.length; i++) {
        /*  if(cr[i] >= 'a' && cr[i]<='z' || cr[i] >= 'A' && cr[i] <= 'Z') {
                count1 ++;
            }else if(cr[i] >= '0' && cr[i] <= '9') {
                count2 ++;
            }else if(cr[i] == ' ') {
                count3 ++;
            }*/
            if(Character.isUpperCase(cr[i]) || Character.isLowerCase(cr[i])) {
                count1 ++;
            }else if(Character.isDigit(cr[i])) {
                count2++;
            }else if(Character.isWhitespace(cr[i])) {
                count3++;
            }
        }
        System.out.println(count1+","+count2+","+count3);
    }
}

三、日期Date和时间和Calender

  • (一)获得日期和时间
  • (一)日期时间的格式化
  • 抽象类只能用getInstance方法来获得对象
  • 1.gettime是获得毫秒值(1970年到现在的);
  • (二)数字格式化
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Random;
import java.sql.Date;
import java.sql.Time;

/**
 * 日期和时间类的使用
 * 
 * @author 马
 *
 */

public class DataTest {
    public static void main(String[] args) {
        // -----------------父类java.util类中的--------------------
        System.out.println("一、-------父类java.util中的日期和时间方法-------");
        java.util.Date date = new java.util.Date();
        System.out.println(date);// Sun Jun 03 13:29:20 CST 2018
        System.out.println("1.都是静态方法,获得的是当前的年月日时分秒。");
        System.out.println(date.getTime());// 1528003875304
        System.out.println("2.getTime获得是从1970年1月1日0时0分到现在的总的毫秒值");
        System.out.println(System.currentTimeMillis());// 1528004024427
        System.out.println("3.System.currentTimeMillis()获得的也是当前毫秒值");

        java.util.Date date1 = new java.util.Date(1528004024427L);
        System.out.println(date1);
        // -----------------子类-------java.sql中--------------------
        System.out.println();
        System.out.println("二、-------子类java.sql------------");
        Date d1 = new Date(date.getTime());// 获得当前time中的date信息
        System.out.println(d1);// 2018-06-03
        String sd1 = d1.toString();// 将日期转成字符串
        System.out.println(sd1);// 2018-06-03
        d1 = Date.valueOf(sd1);
        System.out.println(d1);// 2018-06-03
        Date d2 = new Date(System.currentTimeMillis()); // 可直接从当前毫秒中获得
        System.out.println(d2);// 2018-06-03

        Time t1 = new Time(date.getTime());// 获得当前全time中的现在的时间信息,不含日期。
        System.out.println(t1);// 13:51:32
        Timestamp tp1 = new Timestamp(date.getTime());// 从父类对象date中获得时间戳
        System.out.println(tp1);// 2018-06-03 13:53:40.843

        // --------------格式化------------------
        System.out.println();
        System.out.println("三、------------格式化-------------");
        System.out.println("1.引言,数字格式化----");
        NumberFormat nf1 = NumberFormat.getInstance();// 当前缺省的数字格式:小数点后三位
        System.out.println(nf1.format(12.23456));// 12.235
        nf1 = NumberFormat.getCurrencyInstance();// 单签缺省的货币格式
        System.out.println(nf1.format(234.456));// ¥234.46
        System.out.println("2.NumberFormat的子类DecimalFormat");
        DecimalFormat df1 = new DecimalFormat("00.0000");
        System.out.println(df1.format(123.34567));
        nf1 = NumberFormat.getNumberInstance();// 每三位加逗号,小数部分保留三位
        System.out.println(nf1.format(2679868734.4579880786));// 2,679,868,734.458

        /*
         * 格式的意思: 常用:用全0规定前后保留的位数。 1.全是0的话就是规定了整数部分和小数部分最少多少位,少于格式的话前后补0,
         * 多的话整数部分以实际数字为准,小数部分后面四舍五入; 2.格式里整数部分有非零的话,格式化后加在原数字前面;
         * 3.格式里小数部分有非零的化,格式化后用格式化的小数替换;
         */

        System.out.println("3.日期格式化----");
        DateFormat f1 = DateFormat.getInstance();// 默认的日期加时间格式化
        System.out.println(f1.format(date));// 18-6-3 下午2:26
        f1 = DateFormat.getDateInstance(); // 默认的日期格式化
        System.out.println(f1.format(date));// 2018-6-3
        f1 = DateFormat.getDateInstance(DateFormat.SHORT);
        System.out.println(f1.format(date));// 18-6-3
        f1 = DateFormat.getDateInstance(DateFormat.LONG);// 日期的长型表达格式化
        System.out.println(f1.format(date));// 2018年6月3日
        f1 = DateFormat.getDateInstance(DateFormat.FULL);// 日期的完整表达格式化
        System.out.println(f1.format(date));// 2018年6月3日 星期日

        /*
         * 要格式化的样子由你新建的DateFormat的Instance类型决定。
         * 要格式化成什么样子,先新建一个DateFormat类型的多态对象, 对象内容有无参数及参数形式决定了格式化的形式
         */
        System.out.println("4.时间格式化");
        f1 = DateFormat.getTimeInstance(); // 默认时间格式化
        System.out.println(f1.format(date));// 14:41:15
        System.out.println("5.日期时间格式化");
        f1 = DateFormat.getDateTimeInstance();
        System.out.println(f1.format(date));// 2018-6-3 16:25:51
        f1 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
        System.out.println(f1.format(date));// 2018年6月3日 星期日 下午04时28分22秒 CST

        // --------------------------jdk8.0----------------
        // --------------------java.time-------------------
        // 日期
        System.out.println();
        System.out.println("四、JDK8.0后用法");
        LocalDate ldate = LocalDate.now();
        System.out.println(ldate); // 2018-06-03
        LocalDate ldate1 = LocalDate.of(2012, 3, 3);

        LocalDate ltime = LocalDate.now();

        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);// 2018-06-03T16:31:45.896
        System.out.println(ldt.getYear());// 2018
        System.out.println(ldt.getHour());// 16
        System.out.println(ldt.plusDays(10));// 2018-06-13T16:31:45.896
        System.out.println(ldt.minusDays(2));// 2018-06-01T16:31:45.896

        LocalDateTime ldt1 = LocalDateTime.now();
        LocalDateTime ldt2 = LocalDateTime.of(2012, 2, 3, 5, 3, 56);
        Duration d = Duration.between(ldt1, ldt2);
        System.out.println(d); // PT-55499H-27M-49.896S
    }
}

四、Math类(位于java.lang包下)中的常用方法

  • (一)double random();//产生0到1之间的随机数
  • (1)用法:产生任意范围最小值到最大值之间的随机数: int 随机整数: (int)(Math.random()*(最大值-最小值+1)) (lang包无需导包,radom()方法静态方法,类名直接用)
  • (2)另外产生随机数还可以用java.util包下的Random类下的nextInt()和nextDouble()方法。这种方法可以产生各种类型的随机数,整型,浮点,及带范围的整型和浮点。//java.util包需要导入
  • (3)Math.Radom()方法是Random类的方法之一:产生随机浮点数:
PS:Random类用法示例
Random r = new Random();
int n1 = r.nextInt(n);//可以带参,建议带参,产生0到n-1之间的随机整数
System.out.println(n1);
double n2 = r.nextDouble();//不能带参,产生[0,1)之间的随机数
System.out.println(n2);
  • (二)double cell(double d) ://cell天花板:获取大于等于d的最小整数的double 类型的值。

  • (三)double flour(double d)://flour 地板。获取小于等于d的最大这个你输的double 类型的值。

  • (四)long round(double d) ://四舍五入至long类型的数

五、Class类大写的C

通过该方法可以获得某类的字节码信息,从而可以调用一个类中的所有信息。
对象.getClass().对象的任意方法。
在反射章会详细介绍。

六、Object类:所有类最终的父类。

含有的常用的方法

- 1.equals()//不过平时输出时都调用的是String类重写后的。
- 2.finalize() 垃圾回收 之前调用
- 3.System.gc();强制垃圾回收
- 4.toString() 对象的字符串描述信息
注意: 在使用print() 或 pintln()输出对象名时,会自动调用toString()方法;

Object类常用方法

这里写图片描述

猜你喜欢

转载自blog.csdn.net/gegeyanxin/article/details/80558691