【Java基础系列】第7章 Java基础类库

7.1 运行Java程序参数

Main方法中args[ ] 数组通过运行的时候传入指定的值

        例如:

                运行Test类,在后面加上字符串:

                        java Test abc2 354

                那么字符串数组 args[0] = abc2;  args[1] =354;

                Ps:该处参数包含空格的话,需要用” ”括起来,否则JVM会把空格当成参数分隔符。

7.2 使用Scanner获取键盘输入

  1. Scanner 提供的两个扫面输入方法

        [1] hasNextXxx();  是否还有下一个输入项,其中Xxx可以是Int 、Long等代表基本类型的字符串。如果只是判断是否包含下一个字符串,则直接使用hasNext();

        [2] nextXxx();  获取下一个输入项。

                next();        //遇到”\n””\t””\b”结束录入

                nextLine();    //遇到”\n”结束录入                

        例子:

public static void main(String[] args){
    Scanner sc = new Scanner( System.in );
    sc.useDelimiter(",");
    //将录入的字符串方到sc中,而回值是boolean型
    //boolean s = sc.hasNext();  
    while( sc.hasNext() ){
        //输出返回值
        System.out.println("还有下一个:"  );         
        //输出录入的字符串
        System.out.println("键盘输入的内容是:" + sc.next() ); 
    }
}

  1. Scanner读取文件输入
class Txt{
    public static void main( String[] args ) throws Exception{
        //将一个File文件对象作为Scanner的构造器参数,Scanner读取文件内容
        Scanner sc = new Scanner(new File("ScannerFileTest.java"));
        //判断输入源中是否还有下一行
        while(sc.hasNextLine()){  
            //输出文件中的下一行
            System.out.println(sc.nextLine());
        }
    }
}

7.3 System类

  1. System.getenv( );
  2. System.currentTimeMillis( );  //当前日期离1970-1-1的毫秒数
  3. System.in( );     //输入
  4. System.out( );    //输出
  5. System.err( );    //错误输出(红色)

(6)特殊输出方法:

        System.out.printf( 第%d次是:%s, ++time, str ); 

                                         ----->   %d  -----  ++time

                                         ----->   %s  -----  str

7.4 Runtime类

Runtime r = Runtime .getRuntime();
//查看本机可用CPU
r.availableProcessors();     
//空闲内存
r.freeMemory();           
//总内存
r.totallMemory();          
//最大内存
r.MaxMemory();           
//打开画图工具
r.exec(“mspaint”);         

7.5 Object类

7.5.1 clone();      

        对象克隆( 拷贝一个对象副本,给另一个地方使用,克隆分深浅两种 )。保护方法,实现对象的浅复制。只有实现Cloneable接口才可用调用该方法,否则抛出CloneNotSupportedException异常。

7.5.2 equals(Object obj);        

        指示其他某个对象是否与此对象“相等”(比较一级引用内容)。

7.5.3 finalize(); 

         当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。

7.5.4 getClass();

        返回此 Object 的运行时类。

7.5.5 hashCode();

        返回该对象的哈希码值。

7.5.6 toString();

        返回该对象的字符串表示。

7.5.7 notify();

        唤醒在此对象监视器上等待的单个线程。

        notifyAll();

        唤醒在此对象监视器上等待的所有线程。

7.5.8 wait();

        wait(long timeout);   //设置时间间隔

        调用该方法后当前线程睡眠,直到以下事件发生:

  1. 其他线程调用了该线程的notify() 或notifyAll()方法
  2. 其他线程调用了该线程的interrupt该线程
  3. 时间间隔到了

7.6 String、StringBuffer、StringBuilder类

7.6.1 String类

         (1)String是一个类,是一个引用类型,常用的字符串类型有3个

                String         定义的字符串,不能做插入、修改等动作  

                StringBuffer   定义的字符串,能做插入、修改等动作,线程安全,效率较低

                StringBuilder  定义的字符串,能做插入、修改等动作,线程不安全,效率较高

         (2)String的定义方法

                ①String s1=“我是第一种定义方法”;

                ②String s2=new String(“我是第二种定义方法”);

                ③String s3=new String();

                    s3=“我是第三种定义方法”;

                ④StringBuffer s4=new StringBuffer();

        (3)常用的String类方法

                字符串.length();                    //获取字符串的长度,返回int

                字符串1.equals(字符串2);           //返回boolean型值

               字符串1.compareTo(字符串2);        //相同则返回0,不相同时,从两个字符 //串第0个字符开始比较,返回第一个不相等的字符差(字符串1中字符-字符//串2中字符差);如果长字符串前面部分跟短字符串相同,则返回它们长度的差值。

                字符串.toLowerCase();               //将字符串的字母全部改为小写

                字符串.toUpperCase();               //将字符串的字母全部改为大写

               字符串1.concat(字符串2).concat(字符串3);      //字符串拼接,返回String。和s1+s2+s3效果一样

                字符串.indexOf(字符/字符串);  //获取字符/字符串对应字符第一次出现的下标

               字符串.indexOf(字符/字符串,start); //获取字符/字符串从start开始第一次 //出现的位置,找到返回索引,否则返回-1

                字符串.lastIndexOf(字符/字符串);   //获取字符串对应字符最后出现的下标

                字符串.charAt(int下标);          //通过下标找字符串里对应字符,返回char

                字符串.split(“拆分字符); //得到若干字符串,用数组承接。拆分字符不保留

str.split(拆分符,int 个数n); //将字符串str按照拆分符拆分成n个, //返回字符串数组

                字符串1=字符串2.substring(开始下标); //将字符串2从指定下标开始,赋值给字符串1

                字符串1=字符串2.substring(开始下标,结束下标);  //将字符串2从指定下标开始到结束下标,赋值给字符串1

                str.replace(str1, str2) ; //将字符串str中的字符/字符串str1替换成str2

  1. 替换字符串指定下标的一个字符:
//调用该方法,传入要参数(替换字符串,替换位置(下标),换成的"字符/字符串")
public String replaceChar(String oldStr, int replaceIndex, String ch){
    //输出替换前字符串
    System.out.println("替换前字符串:" + oldStr);   
    //获取输入下标的字符
    String str = oldStr.valueOf(oldStr.charAt( replaceIndex )); 
    //替换oldStr中的第一个str为ch
    String newStr = oldStr.replaceFirst( str, ch );    
    //返回替换后的字符串
    return newStr;  
}
  1. 根据编码生成字符串

String(byte[] bytes, int offset, int length, String charsetName)

           通过使用指定的字符集解码指定的 byte 子数组,构造一个新的 String。

7.6.2 StringBuffer

(1)StringBuffer的使用

StringBuffer sb=new StringBuffer();   //初始化为16个字符长度

[1]追加:

sb.append(“abcdef”);  

sb.append(“GHI”);                //缓冲字符串可以append追加字符串

sb.append( 6600 );            //append也可以追加其他基本类型(详细见API)

sb.append(“iacqafw”, offset,len); //从“iacqafw”的第offset个位置开始,到“iacqafw”的第len个位置的字符都追加到缓冲区字符串的后面

[2]插入:

sb.insert( start, “Jeff” );     //从缓冲区字符串的第start个位置开始,插入Jeff

[3]删除:

sb.delete( start, end );   //删除指定范围的字符串,从start删到end位置

[4]替换:

sb.replace(0, 2, “yan”);  //将缓冲区字符串从0到2替换成yan

[5]setLength()改变字符串大小,删除末尾字符串:

sb.setLength( 2 );           //删除缓冲区字符串末尾2个字符

[6]字符串倒置:

sb.reverse();                //将缓冲区内容倒置

[7]清除所有字符串

sb.clear();                  //将缓冲区字符串都清除

[8]转为String:

String s=sb.toString();      //再使用.toString()转化为String

7.6.3 String、StringBuffer、StringBuilder区别

(1)区别于StringBuilder

StringBuffer :JDK 1.0后有的

StringBuilder :JDK 1.5后有的 , 为了提高效率而设计的

StringBuffer 是一个古老的String处理类,它适合应用在多线程的操作环境中,主要是为了线程同步访问时线程安全而设计的,里面加入相关的同步控制语句

StringBuilder 是后期产生的,主要是应用在单线程的操作环境

如果代码不太涉及到多线程操作,你应该选用StringBuilder ,因其不需要进行线程同步操作,所以性能好;但如果为了实现线程安全,我们需要牺牲一定的性能

(2)三者性能比较:

String 性能最差

StringBuffer 性能与StringBuilder相差较少

StringBuilder 性能最好

7.6.3 toString方法

   输出时,如果不是String类型,会默认增加.toString()

  ①在java中,所有对象都有toString()这个方法。

  ②创建类时,新的类里什么都没的情况下,又没有重写toString方法输出对象时会 输出对象的哈希码值(内存地址)

  ③他通常只是为了方便输出,比如:System.out.println(xx);括号里面的xx 果不是String类型的话,就自动调用xx的toString()方法。

  ④它只是sum公司开发java的时候为了方便所有类的字符串操作而特意加入的方法

    如:int age=new int();

        System.out.println(name);     //这时age已经代表了age.toString()

    如:自定义的类,我们也重写了toString()方法,那么,我们输出的时候,就会 默认调用我们定义的.toString()输出

7.6.4 Math类

  1. 使用:

Math类构造器被定义为private的,无法创建Math对象。但Math类的方法都是类方法;还提供了两个类变量:PI ( π )、E ( e ) 。这些类方法、类变量都可以直接通过类名调用。

(2)常用Math类的类方法:

[三角运算]

Math.toDegrees( 弧度角 );     //弧度转为角度

Math.toRadians( 角度角 );     //角度转为弧度

Math.sin( 弧度角 );            //返回该弧度角对应的正弦

Math.asin( 弧度角 );          //返回该弧度角对应的反正弦

[取整运算]

Math.floor( -1.2 );             //返回小于参数的最大整数

Math.ceil( 1.2 );               //返回大于参数的最小整数

Math.round( 4.235 );          //返回参数的四舍五入值

[乘方、开方、指数运算]

Math.sqrt( 3.2 );              //返回参数的平方根

Math.cbrt( 9.0 );              //返回参数的立方根

Math.hypot( 3.2 ,9.0 );       //返回两参数的平方和再开方

Math.pow( 3 , 2 );          //返回3的2次方

Math.log( 12 );               //返回参数12的自然对数

Math.log10( 9 );              //返回参数9,底数为10的自然对数

[符号相关运算]

Math.abs( -1.2 );             //返回参数的绝对值

Math.signum( 5 );    //参数=0返回0,参数>0,返回1.0,参数<0,返回-1.0

[大小相关运算]

Math.max( 2.3, 4.5 );          //返回两参数中的最大值

Math.min( 2.3, 4.5 );          //返回两参数中的最小值

Math.random( );            //返回一个伪随机数,0.0<值<1.0

7.6.5 ThreadLocalRandom与Random类

(1) Random类

[1]定义:Random 专门用于生成伪随机数,通过new获取对象,之后调用各种nextXxx( )方法来获取随机数。

[2]构造器:① Random rand = new Random ( );    //默认以当前时间作为种子

② Random rand = new Random ( long整型 );   //以long参数为种子

[3]只要两个Random对象的种子相同( 默认的种子时,它们属于同一种子 ),而且方法的调用顺序也相同,它们会产生相同的数组序列,因此Random生成的不是真正的随机数列,而是一种伪随机。

[4]通常推荐使用当前时间作为Random对象的种子,如:

Random rand = new Random ( System.currentTimeMillis( ) );

(2) ThreadLocalRandom类

[1]定义:与Random 相似,但其需要通过静态的current( )方法来获取ThreadLocalRandom对象,之后调用各种nextXxx( )方法来获取随机数。

[2]区别于Random :使用ThreadLocalRandom来代替Random可以减少多线程资源竞争,最终保证系统具有更好的线程安全性。

[3]在多线程环境下用法:

ThreadLocalRandom rand = ThreadLocalRandom.current();
//生成一个4~10之间的伪随机整数
int val1 = rand.nextInt(4, 20);
//生成一个4.0~10.0之间的伪随机浮点数
double val2 = rand.nextDouble(4.0, 20.0 ;

7.6.6 BigDecimal类

  1. 用处:

Float、double两种基本浮点类型在运算时,容易发生精度丢失。因此需要用到BigDecimal类来处理浮点数的运算问题。

  1. 构造器:
//传入字符串
BigDecimal f1 = new BigDecimal(“0.05”);     
// 通过valueOf (double )方法
BigDecimal f2 = BigDecimal.valueOf(0.01); 
//传入double
BigDecimal f3 = new BigDecimal(0.05);    

Ps:通常建议优先使用 传入String 或者通过valueOf (double )方法 创建实例

  1. 常用方法:

add( )       //加f1.add( f2 ) ---->  0.06   f3.add( f2 ) ---->  0.06056...

subtract( )  //减 f1.subtract( f2 ) ---->  0.04   f3.subtract( f2 ) ---->  0.0402...

multiply( )  //乘 f1.multiply( f2 ) ---->  0.0005  f3.multiply( f2 ) ---->0.000502...

divide( )    //除f1.divide( f2 ) ---->  0.5  f3.divide( f2 ) ---->0.500000000132...

pow( )     //乘方

  1. 如果程序要求传入double 浮点数运算,那么我们可自定义
public static double add(double d1, double d2){
    BigDecimal  b1 = BigDecimal.valueOf (d1);
    BigDecimal  b2 = BigDecimal.valueOf (d2);
    return  b1.add(b2).doubleValue() ;
}

7.7 正则表达式

String str = new String(“abc”);
//matches --->equals(“ab”);
Str.matches(“ab”);

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Yvan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值