常用类

1. 常用类

1.1 StringBuffer

看API官方手册

线程安全的,可变的字符序列

关于StringBuffer的代码相当简单是个人都会的,但是底层和面试问的东西比较深的所以你们下去一定看看一些东西

String 不可变

package com.day21_w.a_StringBuffer;

public class Demo1 {
   public static void main(String[] args) {
       StringBuffer sb = new StringBuffer();
       //官方手册 构造一个字符串缓冲区 16个字符
       //在缓冲区添加字符串元素
       System.out.println(sb);
       //在末尾添加
       sb.append("xixi");
       sb.append("hehe");
       sb.append("haha");
       //在下标为2的地方插入
       sb.insert(2, "狗");
       System.out.println(sb);
       //字符串反转
       System.out.println(sb.reverse());
       //删除指定下标范围的字符
       //要头不要尾 start包含 end不包含
       System.out.println(sb.delete(1,3));

       //为什么有String还要学习StringBuffer和StringBuilder
       //拼接字符串效率不一样
       //字符串拼接的时候使用 + 或concat()
       //StringBuffer和StringBuilder效率高
       //为什么StringBuffer和StringBuilder高 String低

  }
}

面试题:String Stringbuffer StringBuilder区别

https://blog.csdn.net/pf6668/article/details/108875324
package com.qfedu.a_stringbuffer;

public class Test {

   public static void main(String[] args) {
       //String 连接10000次消耗1127ms
       //StringBuffer 连接10000次消耗5ms
       //StringBuilder 连接10000次消耗3ms
       StringTest(10000);
       StringBufferTest(10000);
       StringBuilderTest(10000);
  }
   public static void StringTest(int n){
       String str = "";
       //获取当前系统的时间 还没有执行下面for循环的时候的时间
       Long startTime = System.currentTimeMillis();
       //使用for循环来拼接!!!
       for(int i=0;i<n;i++){
           str += i;
      }
       //获取当前系统的时间 执行下面for循环的时候的时间
       Long endTime = System.currentTimeMillis();
       System.out.println("String 连接"+ n +"次消耗"+(endTime-startTime)+"ms");
  }
   public static void StringBufferTest(int n){
       StringBuffer str = new StringBuffer();
       Long startTime = System.currentTimeMillis();
       for(int i=0;i<n;i++){
           str.append(i);
      }
       Long endTime = System.currentTimeMillis();
       System.out.println("StringBuffer 连接"+ n +"次消耗"+(endTime-startTime)+"ms");
  }
   public static void StringBuilderTest(int n){
       StringBuilder str = new StringBuilder();
       Long startTime = System.currentTimeMillis();
       for(int i=0;i<n;i++){
           str.append(i);
      }
       Long endTime = System.currentTimeMillis();
       System.out.println("StringBuilder 连接"+ n +"次消耗"+(endTime-startTime)+"ms");
  }
}

我们可以清楚的看到String的字符串的连接效率是最低的,这一点对于大量字符串的拼接可以很明显的表示出来,所以说大量字符串的拼接最好不要选择String。StringBuffer和StringBuilder对于字符串的拼接效率是大致相同的

为啥StringBUilder效率高?因为StringBuilder是线程不安全的,StringBuffer线程安全

四、总结 1.String为固定长度的字符串,StringBuilder和StringBuffer为变长字符串; 2.stringBuffer是线程安全的,StringBuilder是非线程安全的; 3.StringBuffer和StringBuilder的默认初始容量是16,可以提前预估好字符串的长度,进一步减少扩容带来的额外开销

1.2 枚举(enum)

语法格式

public enum 枚举类名 {
//下面写常量,常量之间使用逗号隔开
RED,GREEN,BULE
}
package com.day21_w.b_enum;

enum Color2 {
   RED, GREEN, BLUE
}

public class Demo2 {
   public static void main(String[] args) {
       Color2 red = Color2.RED;
       System.out.println(red);
       Color2 green = Color2.GREEN;
       System.out.println(green);
  }

}
1.2.1 枚举用于switch-case
package com.day21_w.b_enum;

enum Color3 {
   RED, GREEN, BULE
}

public class Demo3 {
   public static void main(String[] args) {
       Color3 red = Color3.RED;
       switch (red) {
           case RED:
               System.out.println("红色");
               break;
           case GREEN:
               System.out.println("绿色");
               break;
           case BULE:
               System.out.println("蓝色");
               break;
      }
  }
}
1.2.2 枚举中的方法
package com.day21_w.b_enum;

enum Color4 {
   RED, GREEN, BULE
}

public class Demo4 {
   public static void main(String[] args) {
       //Color4.values() 枚举类中所有的值
       Color4[] values = Color4.values();
       //ordinal() 打印对应的索引
       for (Color4 value : values) {
           System.out.println(value + "对应的索引" + value.ordinal());
      }
       //Color4.valueOf("RED") 返回字符串的枚举常量
       //只是换了一种方式
       Color4 red = Color4.valueOf("RED");
       Color4 red1 = Color4.RED;
       System.out.println(red);
  }
}
1.3 包装类

Java有八大基本数据类型,都有与之对应的包装类

为啥会有八大基本数据类型的包装类?

包装类能被实例化,封装了很多方法,可以使用,这样操作八大基本数据类型就比较方便了

所以开发中的实体类都是写的包装类

int age====>Integer age;

int->Integer

byte->Byte

short->Short

long->Long

float->Float

double->Double

boolean->Boolean

char->Character

【重点】:

1.自从JDK1.5之后,有拆箱和装箱

自动装箱:将基本数据类型转为包装类

自动拆箱:将包装类转为基本数据类型

2.***Value();将包装类转为基本数据类型

3.toString();将基本数据类型转为字符串

4.parse***();将字符串类型的数据转为基本数据类型【以后开发用】

5.valueOf();将基本数据类型转为包装类类似手动装箱

1.3.1 自动装箱与拆箱
自动装箱
  int i = 10;
Integer i1 = i;
自动拆箱
   Integer i2 = 10
   int i3 = i2;
package com.day21_w.c_baozhuang;

public class Demo1 {
   public static void main(String[] args) {
       //jdk1.5以后有自动装箱和自动拆箱
       //自动装箱 int转为Integer
       //自动拆箱 Integer转为int
       System.out.println(Integer.MAX_VALUE);//最大值
       System.out.println(Integer.MIN_VALUE);//最小值

       //自动装箱
       //int转为Integer
       Integer i1 = 45;
       //自动拆箱
       int i2 = i1;

       //除了自动拆箱和自动装箱 java还给我们提供了拆箱装箱方法
       Boolean b1 = true;
       //***value()
       boolean b =b1.booleanValue();
       //b现在是基本数据类型
       System.out.println(b);

       int i3 = 45;
       //toString() 是包装类中方法【重要】
       String s = Integer.toString(i3);
       System.out.println(s);
       //以后做银行项目是 double和float有可能会丢失 字符串绝对不会

       //pass***();将字符串类型转为基本数据类型【重要】
       //passBnt() passBouble() passFloat
       int i = Integer.parseInt("250");
       System.out.println(i);//int类型
       //开发中 分页

       //valueOf();将基本数据类型转为包装类
       byte b2 = 34;
       Byte aByte = Byte.valueOf(b2);
       System.out.println(aByte);
       //没有必要 因为会自动装箱

  }
}

面试题

Integer i1 = 10;
Integer i2 = 10;
sout(i1 == i2);
Integer i3 = 1000;
Integer i4 = 1000;
sout(i3 == i4);

1

1.4 Math
1.4.1 方法
绝对值 abs()

最大值 max()

最小值 min()

向上取整 ceil()

向下取整floor()

四舍五入round()

随机数random()
package com.day21_w.d_Math;

public class Demo1 {
   public static void main(String[] args) {
       System.out.println(Math.PI);
       System.out.println(Math.E);
       //以上两个是常量
       //abs() 绝对值
       System.out.println(Math.abs(-89));
       //max() 最大值
       System.out.println(Math.max(39,Math.max(36,56)));
       //min() 最小值
       System.out.println(Math.min(3,16));
       //cell() 向上取整
       System.out.println(Math.ceil(45.2));
       //floor() 向下取整
       System.out.println(Math.floor(89.8));
       //round() 四舍五入
       System.out.println(Math.round(45.5));
       //random() 随机数
       System.out.println(Math.random());

       //随机1-100之间的整数
       int i1 = (int)(Math.random() * 100);
       System.out.println(i1);

  }
}
1.5 Random类

随机数

package com.qfedu.e_random;

import java.util.Random;

public class Demo1 {
   public static void main(String[] args) {
       Random random = new Random();
       System.out.println(random.nextInt());
       System.out.println(random.nextInt(100));//[0,100);
       System.out.println(random.nextFloat());
       System.out.println(random.nextDouble());
       System.out.println(random.nextBoolean());



  }
}
1.6 System类

System 是系统的意思

package com.day21_w.f_System;

import java.io.PrintStream;
import java.util.Properties;
import java.util.Scanner;

public class Demo1 {
   public static void main(String[] args) {
       //打印流
       //标准输出流 System.out
       PrintStream out = System.out;
       out.println("goudan");
       //错误输出流 System.err
       System.err.println("xixi");
       //输入流 System.in
       Scanner scanner = new Scanner(System.in);

       //1970/1/1到当前时间的毫秒数
       long l = System.currentTimeMillis();
       System.out.println(l/1000/60/60/24/365);

       //获取系统的东西 System 英文就是系统
       Properties properties = System.getProperties();
       System.out.println(properties.get("os.name"));
       System.out.println(properties.get("os.version"));
       System.out.println(properties.get("user.name"));
       System.out.println(properties.get("user.dir"));
       System.out.println(properties.get("java.version"));
//       Windows 10
//       10.0
//       hp
//       D:\Java\day21_w
//       1.8.0_241

  }
}
1.7 Runtime类
package com.qfedu.g_runtime;

import java.io.IOException;

public class Demo1 {
   public static void main(String[] args) throws IOException {
       //1.获取runtime对象
       Runtime runtime = Runtime.getRuntime();
       //runtime对象可以启动咱们电脑上面任意的一个软件
       //使用代码启动软件
       runtime.exec("C:\\Program Files (x86)\\Notepad++\\notepad++.exe");
       //返回Java虚拟机将尝试使用的最大内存量。字节数
       System.out.println(runtime.maxMemory() / 1024 / 1024);//MB
       //返回Java虚拟机中的可用内存量 字节数
       System.out.println(runtime.freeMemory()/1024/1024);
       //返回Java虚拟机中的内存总量 字节数
       System.out.println(runtime.totalMemory()/1024/1024);
  }
}
1.8 Date类

专门处理日期的一个类,不过好多方法已经过期了

在类的所有方法Date接受或返回年,月,日,小时,分钟和秒值,以下表述中使用:

  • y年代表整数y - 1900

  • 一个月由0到11的整数表示; 0是1月,1是2月,等等; 11月12日。

  • 日期(月的一天)以通常的方式从1到31的整数表示。

  • 一小时由0到23之间的整数表示。因此,从午夜到凌晨1点的时间是小时0,从中午到下午1点的小时是12小时。

  • 一般以0〜59的整数表示。

  • 第二个由0到61的整数表示; 值60和61仅发生在闰秒上,甚至仅在实际上正确跟踪闰秒的Java实现中发生。 由于目前引入闰秒的方式,在同一分钟内不会发生两个闰秒,但是本规范遵循ISO C的日期和时间约定。

package com.day21_w.h_Date;

import java.util.Date;

public class Demo1 {
   public static void main(String[] args) {
       Date date = new Date();
       System.out.println(date);
       //获取年份
       System.out.println(date.getYear() + 1900);
       //获取月份
       System.out.println(date.getMonth() + 1);
       //获取星期
       System.out.println(date.getDay());
       //时分秒
       System.out.println(date.getHours());
       System.out.println(date.getMinutes());
       System.out.println(date.getSeconds());
  }
}
1.9 Calender

国际通用的是Calendar类

package com.day21_w.i_Calendar;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class Demo1 {
   public static void main(String[] args) {
       Calendar calendar = Calendar.getInstance();
       int i = calendar.get(Calendar.YEAR);
       System.out.println(i);
       //月份 一月从0开始
       System.out.println(calendar.get(Calendar.MONTH) + 1);
       //当月第几天
       System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
       //本周第几天 周日为第一天
       System.out.println(calendar.get(Calendar.DAY_OF_WEEK) - 1);
       //今年的第几天
       System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
       //时分秒
       System.out.println(calendar.get(Calendar.HOUR));
       System.out.println(calendar.get(Calendar.MINUTE));
       System.out.println(calendar.get(Calendar.SECOND));

       //重要的方法 获取当前时间 可以转为Date类型的数据
       Date time = calendar.getTime();
       System.out.println(time);
       //Tue Aug 09 16:39:58 CST 2022
       //对程序员相当不友好
       //可以通过一个类将日期格式转一下
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
       String format = simpleDateFormat.format(time);
       System.out.println(format);

  }
}
 
posted @ 2022-08-09 21:36  早睡晚起身体好  阅读(20)  评论(0)    收藏  举报