一、字符串类String

String:字符串,使用一对""引起来表示,字符串常量池在方法区中

public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
//
  • String声明为final的,不可被继承,代表不可变的字符序列
  • String实现了Serializable接口:表示字符串是支持序列化的。
  • String内部定义了final char[] value,用于存储字符串数据
  • 不可变的体现:
    • 当对字符串重新赋值时,需要重写指定内存区域赋值,不能使用原有的value进行赋值。
    • 当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
    • 当调用String的replace()方法修改指定字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的value进行赋值
    • 通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中
    • 常量与常量的拼接结果在常量池。 且常量池中不会存在相同内容的常量。
    • 只要其中有一个是变量, 结果就在堆中
    • 如果拼接的结果调用intern()方法, 返回值就在常量池中    
  @Test
public void test3(){
String s1 = "javaEE";
String s2 = "hadoop"; String s3 = "javaEEhadoop";
String s4 = "javaEE" + "hadoop";
String s5 = s1 + "hadoop";
String s6 = "javaEE" + s2;
String s7 = s1 + s2; System.out.println(s3 == s4);//true
System.out.println(s3 == s5);//false
System.out.println(s3 == s6);//false
System.out.println(s3 == s7);//false
System.out.println(s5 == s6);//false
System.out.println(s5 == s7);//false
System.out.println(s6 == s7);//false String s8 = s6.intern();//返回值得到的s8使用的常量值中已经存在的“javaEEhadoop”
System.out.println(s3 == s8);//true }
  • 常用的方法
方法 含义 返回值
int length()  返回字符串的长度 value.length return value.length
char charAt(int index)
返回某索引处的字符 return value[index]
boolean isEmpty()
判断是否是空字符串  return value.length == 0
String toLowerCase() 使用默认语言环境, 将 String 中的所有字符转换为小写 本身的字符串不改变
String toUpperCase()
使用默认语言环境, 将 String 中的所有字符转换为大写 本身的字符串不改变
String trim()
返回字符串的副本, 忽略前导空白和尾部空白 本身的字符串不改变
boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true,比较的字符串  
boolean equals(Object obj) 比较字符串的内容是否相同 重写了equals方法
boolean equalsIgnoreCase(String anotherString) 与equals方法类似, 忽略大小写 本身的字符串不改变
String concat(String str) 将指定字符串连接到此字符串的结尾。 等价于用“+” 本身的字符串不改变
 int compareTo(String anotherString) 比较两个字符串的大小  
String substring(int beginIndex) 返回一个新的字符串, 它是此字符串的从beginIndex开始截取到最后的一个子字符串。  
String substring(int beginIndex, int endIndex) 返回一个新字符串, 它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。  
boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结束  
boolean startsWith(String prefix, int toffset) 测试此字符串从指定索引开始的子字符串是否以指定前缀开始   
boolean startsWith(String prefix)
 测试此字符串是否以指定的前缀开始  
 int indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引  
 int indexOf(String str, int fromIndex) 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始  
int lastIndexOf(String str)  返回指定子字符串在此字符串中最右边出现处的索引  
 int lastIndexOf(String str, int fromIndex) 返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索 indexOf和lastIndexOf方法如果未找到都是返回-1 
String replace(char oldChar, char newChar) 返回一个新的字符串, 它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。  
String replace(CharSequence target, CharSequence replacement) 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。  
String replaceAll(String regex, String replacement)  使用给定的replacement 替换此字符串所有匹配给定的正则表达式的子字符串。  
String replaceFirst(String regex, String replacement)  使用给定的replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。   
boolean matches(String regex) 告知此字符串是否匹配给定的正则表达式。  
String[] split(String regex) 根据给定正则表达式的匹配拆分此字符串。  
String[] split(String regex, int limit) 根据匹配给定的正则表达式来拆分此字符串, 最多不超过limit个, 如果超过了, 剩下的全部都放到最后一个元素中。  
char[] toCharArray()
将字符串中的全部字符存放在一个字符数组中的方法。

 
byte[] getBytes(String charsetName) 
使用平台的默认字符集将此 String 编码为byte 序列,并将结果存储到一个新的 byte 数组中

 
String(byte[])
通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String

 
String(byte[], int offset, int length) 
用指定的字节数组的一部分,即从数组起始位置offset开始取length个字节构造一个字符串对象

 
byte[] getBytes(String charsetName) 
使用指定的字符集将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组

 
String(char[]) 
字符数组中的全部字符创建字符串对象。
 
String(char[], int offset, int length)

字符数组中的部分字符创建字符串对象。
 
 @Test
public void test3() throws UnsupportedEncodingException {
String str1 = "abc123中国";
byte[] bytes = str1.getBytes();//使用默认的字符集,进行编码,一个中文字符对应3个字符
System.out.println(Arrays.toString(bytes)); byte[] gbks = str1.getBytes("gbk");//使用gbk字符集进行编码。一个中文字符对应2个字符
System.out.println(Arrays.toString(gbks)); System.out.println("******************"); String str2 = new String(bytes);//使用默认的字符集,进行解码。
System.out.println(str2); String str3 = new String(gbks);
System.out.println(str3);//出现乱码。原因:编码集和解码集不一致! String str4 = new String(gbks, "gbk");
System.out.println(str4);//没有出现乱码。原因:编码集和解码集一致! }

二、StringBuilder 和StringBuffer 类

  • String:不可变的字符序列;底层使用final char[]存储
  • StringBuffer:可变的字符序列;线程安全的 sychronized,效率低;底层使用char[]存储
  • StringBuilder:可变的字符序列;jdk5.0新增的,线程不安全的,效率高;底层使用char[]存储
  • 常用方法:
    • StringBuffer append(xxx):提供了很多的append()方法,用于进行字符串拼接
    • StringBuffer delete(int start,int end):删除指定位置的内容
    • StringBuffer replace(int start, int end, String str):把[start,end)位置替换为str
    • StringBuffer insert(int offset, xxx):在指定位置插入xxx
    • StringBuffer reverse() :把当前字符序列逆转
    • public int indexOf(String str)
    • public String substring(int start,int end):返回一个从start开始到end索引结束的左闭右开区间的子字符串
    • public int length()
    • public char charAt(int n )
    • public void setCharAt(int n ,char ch)
  • 总结:
    • 增:append(xxx)
    • 删:delete(int start,int end)
    • 改:setCharAt(int n ,char ch) / replace(int start, int end, String str)
    • 查:charAt(int n )
    • 插:insert(int offset, xxx)
    • 长度:length();
    • 遍历:for() + charAt() / toString()
  • 扩容问题:如果要添加的数据底层数组盛不下了,那就需要扩容底层的数组。默认情况下,扩容为原来容量的2倍 + 2,同时将原有数组中的元素复制到新的数组中

@HotSpotIntrinsicCandidate
public StringBuffer() {
super(16); //默认初始容量为16
} @HotSpotIntrinsicCandidate
public StringBuilder() {
super(16);
}
  • 面试题
String str = null;
StringBuffer sb = new StringBuffer();
sb.append(str);
System.out.println(sb.length());//4
System.out.println(sb);//”null”
StringBuffer sb1 = new StringBuffer(str); //空指针异常
System.out.println(sb1);// private AbstractStringBuilder appendNull() {
ensureCapacityInternal(count + 4);
int count = this.count;
byte[] val = this.value;
if (isLatin1()) {
val[count++] = 'n';
val[count++] = 'u';
val[count++] = 'l';
val[count++] = 'l';
} else {
count = StringUTF16.putCharsAt(val, count, 'n', 'u', 'l', 'l');
}
this.count = count;
return this;
}

三、日期和时间类(jdk8之前)

  • java.lang.System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1月1日0时0分0秒之间以毫秒为单位的时间差。
  • java.util.Date类表示特定的瞬间,精确到毫秒
    • 构造器:

      • Date(): 使用无参构造器创建的对象可以获取本地当前时间
      • Date(long date)
    • 常用方法
      • getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。
      • toString():把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy 其中: dow 是一周中的某一天 (Sun, Mon, Tue,Wed, Thu, Fri, Sat), zzz是时间标准。
      • 其它很多方法都过时了
  • java.sql.Date对应着数据库中的日期类型的变量

    • 构造器:

      • Date(): 使用无参构造器创建的对象可以获取本地当前时间
      • Date(long date)
    • 如何将java.util.Date对象转换为java.sql.Date对象: 父类强转子类有风险
      // 方式一:
      Date date4 = new java.sql.Date(2343243242323L);
      java.sql.Date date5 = (java.sql.Date) date4;
      //方式二:
      Date date6 = new Date();
      java.sql.Date date7 = new java.sql.Date(date6.getTime());
      //此种方式编译通过,运行发生异常
      Date date1 = newDate(2343243242323L);
      java.sql.Date date2 = (java.sql.Date) date1;
  • .java.text.SimpleDateFormat类 :一个不与语言环境有关的方式来格式化和解析日期的具体类。
    • 格式化:

      • SimpleDateFormat() :默认的模式和语言环境创建对象 "19-12-18 上午11:43"
      • public SimpleDateFormat(String pattern): 该构造方法可以用参数pattern指定的格式创建一个对象,该对象调用:
      • public String format(Date date): 方法格式化时间对象date
    • 解析:
      • 解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现)

      • public Date parse(String source): 从给定字符串的开始解析文本,以生成一个日期    

    @Test
public void testSimpleDateFormat() throws ParseException {
//实例化SimpleDateFormat:使用默认的构造器
SimpleDateFormat sdf = new SimpleDateFormat(); //格式化:日期 --->字符串
Date date = new Date();
System.out.println(date); String format = sdf.format(date);
System.out.println(format); //解析:格式化的逆过程,字符串 ---> 日期
String str = "19-12-18 上午11:43";
Date date1 = sdf.parse(str);
System.out.println(date1); //*************按照指定的方式格式化和解析:调用带参的构造器*****************
// SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyy.MMMMM.dd GGG hh:mm aaa");
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
//格式化
String format1 = sdf1.format(date);
System.out.println(format1);//2019-02-18 11:48:27
//解析:要求字符串必须是符合SimpleDateFormat识别的格式(通过构造器参数体现),
//否则,抛异常
Date date2 = sdf1.parse("2020-02-18 11:48:27");
System.out.println(date2);
}
  • java.util.Calendar(日历)类:Calendar是一个抽象基类,主用用于完成日期字段之间相互操作的功能。
  • 获取Calendar实例的方法
    • 使用Calendar.getInstance()方法
    • 调用它的子类GregorianCalendar的构造器。
  • 一个Calendar的实例是系统时间的抽象表示,通过get(int field)方法来取得想要的时间信息。比如YEAR、 MONTH、 DAY_OF_WEEK、 HOUR_OF_DAY 、
    MINUTE、 SECOND
    • public void set(int field,int value)  设置
    • public void add(int field,int amount)  加
    • public final Date getTime() 获取对应Date的毫秒数
    • public final void setTime(Date date) 将date转成calender
  • 获取月份时: 一月是0,二月是1,以此类推, 12月是11
  • 获取星期时: 周日是1,周二是2 , 。 。。。周六是7
        @Test
    public void testCalendar(){
    //1.实例化
    //方式一:创建其子类(GregorianCalendar)的对象
    //方式二:调用其静态方法getInstance()
    Calendar calendar = Calendar.getInstance();
    // System.out.println(calendar.getClass()); //2.常用方法
    //get()
    int days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days);
    System.out.println(calendar.get(Calendar.DAY_OF_YEAR)); //set()
    //calendar可变性
    calendar.set(Calendar.DAY_OF_MONTH,22);
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days); //add()
    calendar.add(Calendar.DAY_OF_MONTH,-3);
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days); //getTime():日历类---> Date
    Date date = calendar.getTime();
    System.out.println(date); //setTime():Date ---> 日历类
    Date date1 = new Date();
    calendar.setTime(date1);
    days = calendar.get(Calendar.DAY_OF_MONTH);
    System.out.println(days); }
  • 缺点

    • 可变性:像日期和时间这样的类应该是不可变的。
    • 偏移性: Date中的年份是从1900开始的,而月份都从0开始。
    • 格式化:格式化只对Date有用, Calendar则不行。
    • 它们也不是线程安全的;不能处理闰秒等

四、 日期和时间(jdk8)

1.LocalDate、LocalTime、LocalDateTime

  • now():获取当前的日期、时间、日期+时间
  • of():设置指定的年、月、日、时、分、秒。没有偏移量
  • getXxx():获取相关的属性
  • withXxx():设置相关的属性,会返回一个新的日期对象,原来的日期不会改变

      

2. Instant

  • Instant:时间线上的一个瞬时点。 这可能被用来记录应用程序中的事件时间戳。 在UNIX中,这个数从1970年开始,以秒为的单位;同样的,在Java中,也是从1970年开始,但以毫秒为单位。
  • java.time包通过值类型Instant提供机器视图,不提供处理人类意义上的时间单位。 Instant表示时间线上的一点,表示自1970年1月1日0时0分0秒(UTC)开始的毫秒数。
@Test
public void test2(){
//now():获取本初子午线对应的标准时间
Instant instant = Instant.now();
System.out.println(instant);//2019-02-18T07:29:41.719Z //添加时间的偏移量
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8)); //添加时区之间的时间差
System.out.println(offsetDateTime);//2019-02-18T15:32:50.611+08:00 //toEpochMilli():获取自1970年1月1日0时0分0秒(UTC)开始的毫秒数 ---> Date类的getTime()
long milli = instant.toEpochMilli();
System.out.println(milli); //ofEpochMilli():通过给定的毫秒数,获取Instant实例 -->Date(long millis)
Instant instant1 = Instant.ofEpochMilli(1550475314878L);
System.out.println(instant1);
}

3. DateTimeFormatter

  • 用于格式化或解析日期、时间

    • 预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
    • 本地化相关的格式。如: ofLocalizedDateTime(FormatStyle.LONG)
    • 自定义的格式。如: ofPattern(“yyyy-MM-dd hh:mm:ss”)
方法 含义
ofPattern(String pattern) 静态方法,返回一个指定字符串格式的DateTimeFormatter
format(TemporalAccessor t) 格式化一个日期、 时间, 返回字符串
parse(CharSequence text) 将指定格式的字符序列解析为一个日期、 时间
public void test3(){
// 方式一:预定义的标准格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME;
//格式化:日期-->字符串
LocalDateTime localDateTime = LocalDateTime.now();
String str1 = formatter.format(localDateTime);
System.out.println(localDateTime);
System.out.println(str1);//2019-02-18T15:42:18.797 //解析:字符串 -->日期
TemporalAccessor parse = formatter.parse("2019-02-18T15:42:18.797");
System.out.println(parse); // 方式二:
// 本地化相关的格式。如:ofLocalizedDateTime()
// FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT :适用于LocalDateTime
DateTimeFormatter formatter1 = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG);
//格式化
String str2 = formatter1.format(localDateTime);
System.out.println(str2);//2019年2月18日 下午03时47分16秒 // 本地化相关的格式。如:ofLocalizedDate()
// FormatStyle.FULL / FormatStyle.LONG / FormatStyle.MEDIUM / FormatStyle.SHORT : 适用于LocalDate
DateTimeFormatter formatter2 = DateTimeFormatter.ofLocalizedDate(FormatStyle.MEDIUM);
//格式化
String str3 = formatter2.format(LocalDate.now());
System.out.println(str3);//2019-2-18 // 重点: 方式三:自定义的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)
DateTimeFormatter formatter3 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");
//格式化
String str4 = formatter3.format(LocalDateTime.now());
System.out.println(str4);//2019-02-18 03:52:09 //解析
TemporalAccessor accessor = formatter3.parse("2019-02-18 03:52:09");
System.out.println(accessor); }

五、比较器

Java实现对象排序的方式有两种:自然排序: java.lang.Comparable 和 定制排序: java.util.Comparator

  • java.lang.Comparable

    • Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序。默认从小到大
    • 实现 Comparable 的类必须实现 compareTo(Object obj) 方法,两个对象即通过 compareTo(Object obj) 方法的返回值来比较大小。
    • 如果当前对象this大于形参对象obj,则返回正整数,如果当前对象this小于形参对象obj, 则返回负整数,如果当前对象this等于形参对象obj, 则返回零。
    • 实现Comparable接口的对象列表(和数组)可以通过 Collections.sort 或Arrays.sort进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
    • 对于类 C 的每一个 e1 和 e2 来说,当且仅当 e1.compareTo(e2) == 0 与1.equals(e2) 具有相同的 boolean 值时,类 C 的自然排序才叫做与 equals一致。 建议(虽然不是必需的) 最好使自然排序与 equals 一致。
  • Comparable 的典型实现: (默认都是从小到大排列的)
    • String:按照字符串中字符的Unicode值进行比较
    • Character:按照字符的Unicode值来进行比较
    • 数值类型对应的包装类以及BigInteger、 BigDecimal:按照它们对应的数值大小进行比较
    • Boolean: true 对应的包装类实例大于 false 对应的包装类实例
    • Date、 Time等:后面的日期时间比前面的日期时间大
  • java.util.Comparator
    • 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那么可以考虑使用 Comparator 的对象来排序, 强行对多个对象进行整体排序的比较。
    • 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:
      • 如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示o1小于o2。
      • 可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。
      • 还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
  • Comparable接口与Comparator的使用的对比:
    • Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小
    • Comparator接口属于临时性的比较。

六、System 类

系统级的很多属性和控制方法都放置在该类的内部。该类位于java.lang包

  • 构造器是私有的,无法实例化该类。其内部的成员变量和成员方法都是static的
  • 成员变量
    • System类内部包含in、 out和err三个成员变量,分别代表标准输入流(键盘输入),标准输出流(显示器)和标准错误输出流(显示器)。
  • 成员方法
    • native long currentTimeMillis():该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数
    • void exit(int status):该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表异常退出。 使用该方法可以在图形界面编程中实现程序的退出功能等
    • void gc():该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则取决于系统中垃圾回收算法的实现以及系统执行时的情况。
    • String getProperty(String key):该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见的属性名以及属性的作用如下表所示:

七、Math类

  • java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回值类型一般为double型
  • 常用函数

    函数  含义
    abs  绝对值
    acos,asin,atan,cos,sin,tan 三角函数
    sqrt  平方根
    pow(double a,doble b)  a的b次幂
    log  自然对数
    exp  e为底指数
    max(double a,double b) 最大值
    min(double a,double b) 最小值
    random()  返回0.0到1.0的随机数
    long round(double a)  double型数据a转换为long型(四舍五入)
    toDegrees(double angrad)  弧度—>角度
    toRadians(double angdeg)  角度—>弧度

八、BigDecimal 和 BigInteger类

  • java.math包的BigInteger可以表示不可变的任意精度的整数。 BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。
  • 商业计算中,要求数字精度比较高,用java.math.BigDecimal类, 它支持不可变的、任意精度的有符号十进制定点数。
  • BigInteger 还提供以下运算:模算术、 GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
  • 构造器
    • public BigInteger(String val)  --- 根据字符串构建BigInteger对象
    • public BigDecimal(double val)
    • public BigDecimal(String val)
  • 常用方法
方法 含义
BigInteger
public BigInteger abs() 返回此 BigInteger 的绝对值的 BigInteger。
BigInteger add(BigInteger val)  返回其值为 (this + val) 的 BigInteger
BigInteger subtract(BigInteger val) 返回其值为 (this - val) 的 BigInteger
BigInteger multiply(BigInteger val)  返回其值为 (this * val) 的 BigInteger
BigInteger divide(BigInteger val) 返回其值为 (this / val) 的 BigInteger。整数相除只保留整数部分。
BigInteger remainder(BigInteger val)  返回其值为 (this % val) 的 BigInteger。
BigInteger[] divideAndRemainder(BigInteger val) 返回包含 (this / val) 后跟(this % val) 的两个 BigInteger 的数组。
BigInteger pow(int exponent)  返回其值为 (thisexponent) 的 BigInteger。
BigDecimal
public BigDecimal add(BigDecimal augend) +
public BigDecimal subtract(BigDecimal subtrahend) -
 public BigDecimal multiply(BigDecimal multiplicand) *
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)  /

java基础---常用类的更多相关文章

  1. Java基础常用类深度解析(包含常见排序算法)

    目录 一.工具类 1.1.工具类的设计 1.1.1.公共静态方法 1.2.单例模式 二.包装类 2.1.基本类型的包装类 2.1.1.Integer 2.1.1.1.Integer >> ...

  2. JAVA基础--常用类 String,StringBuffer, 基础数据类型包装类, Math类, Enum类

    字符串相关类: String, StringBuffer String类为不可变的字符序列 String s1="hello"; String s2="hello&quo ...

  3. Java基础——常用类之日期时间类

    如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔) 如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil) 如 ...

  4. Java基础——常用类(Date、File)以及包装类

    本文要点: 基本数据类型的包装类 字符串相关类: 不可变字符序列:String 可变字符序列:StringBuffer.StringBuilder 时间处理相关类: Date DateFormat.S ...

  5. Java基础—常用类之String类

    一.String类是什么 public final class String implements java.io.Serializable, Comparable<String>, Ch ...

  6. java基础-Integer类常用方法介绍

    java基础-Integer类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在实际程序使用中,程序界面上用户输入的数据都是以字符串类型进行存储的.而程序开发中,我们需 ...

  7. Java基础-StringBuffer类与StringBuilder类简介

    Java基础-StringBuffer类与StringBuilder类简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.StringBuffer类 在学习过String类之后 ...

  8. Java API 常用类(一)

    Java API 常用类 super类详解 "super"关键字代表父类对象.通过使用super关键字,可以访问父类的属性或方法,也可以在子类构造方法中调用父类的构造方法,以便初始 ...

  9. 第二十九节:Java基础知识-类,多态,Object,数组和字符串

    前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...

随机推荐

  1. vue 安装sass5.0版本遇到的问题

    cnpm install node-sass@4.9.2 --save-dev cnpm install sass-loader@7.3.1 --save-dev cnpm install style ...

  2. js动态加载HTML元素时出现的无效的点击事件

    项目中列表数据中隐藏着详情数据, 图一: 详情数据是:根据当前行的数据作为参数,通过ajax请求到后台返回的数据,再根据返回的结果动态生成HTML页面 图二: js文件中的这些js的点击事件无效: j ...

  3. Linux BSP非标准HDMI分辨率

    Linux BSP非标准HDMI分辨率 Intrinsyc公司发布了它的一个新的Linux BSP软件的发布 打开-Q820 开发套件基于Linux内核版本.支持的软件功能包括HDMI输出,可以支持标 ...

  4. MPC算法

    MPC算法 一.    引言 在工程技术方面,MPC全称可指Model Predictive Control模型预测控制(又称RHC, Receding Horizon  ). 模型预测控制算法 一种 ...

  5. gradle 混合编程java、scala、kotlin、groovy

    众所周知,java是基于JVM的开发语言,但能够在JVM上运行的开发语言不仅仅有java,目前还有很热门的kotlin(kotlin不仅仅只能开发Android).scala.groovy等等.目前国 ...

  6. Flink实时计算pv、uv的几种方法

    本文首发于:Java大数据与数据仓库,Flink实时计算pv.uv的几种方法 实时统计pv.uv是再常见不过的大数据统计需求了,前面出过一篇SparkStreaming实时统计pv,uv的案例,这里用 ...

  7. ES6中的数组方法扩展

    上一篇文章小编简单介绍了在ES6中,一些常用的方法和一些简单的应用,在这篇文章中,小编将针对ES6中数组常用方法进行扩展,相信经过这篇文章之后,每一位小伙伴下班时间会有所提前,就算从原来的996变成9 ...

  8. springboot实现自定义拦截器

    为了更容易理解,我们通过一个代码例子来演示. 例子: 我们现在要访问http://localhost:8080/main.html页面,这个页面需要登录之后才能够浏览,没登录不能浏览. 那么现在问题来 ...

  9. 【渗透实战】sqlmap_修改tamper脚本_绕过WAF_第三期

    /文章作者:Kali_MG1937 CSDN博客号:ALDYS4 QQ:3496925334/ 今天google找注入点的时候发现某企业一个挺有意思的waf 常规操作绕过去后决定写一篇博客 信息收集 ...

  10. 腾讯TencentOS 十年云原生的迭代演进之路

    导语 TencentOS Server (又名 Tencent Linux 简称 Tlinux) 是腾讯针对云的场景研发的 Linux 操作系统,提供了专门的功能特性和性能优化,为云服务器实例中的应用 ...