Java常用类
Date
类Date表示特定的瞬间,精确到毫秒
date.get API
Robot robot=new Robot(); robot.delay(3000); while(true) { robot.mouseMove(500, 500); Date date=new Date(); if(date.getMinutes()==53) {//53记得换 break; } }
注意:getMonth()是得到的数据是0~11,0表示第一个月
getTime()得到的是从1970年1月1日到现在所经过的毫秒数
getTimezoneOffset() 方法可返回格林威治时间和本地时间之间的时差,以分钟为单位。
getClass()方法是Date类继承Object类中的方法。
日期格式化
SimpleDateFormat类(简单日期格式化)
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
日期转成String(format)
String 换成Date(parse)
Calendar(日历)
-
Calendar是一个抽象类,用于表示日历。因为Date类在设计上存在一些缺陷,所以Java提供Calendar类来更好的处理日期和时间。
-
Calendar类不能直接创建,可以通过类方法来创建一个Calendar的子类,Java本身提GregorianCalendar子类,通过getInstance()方法返回默认时区和语言环境获得一个日历,返回的实例就是Java提供的默认子类。
public static void main(String[] args) throws Exception{ Calendar cal = Calendar.getInstance(); System.out.println(cal); System.out.println(calendar.getTime()); System.out.println(calendar.getTimeInMillis()); }
Calendar与Date都是表示日期的工具类,他们之间可以相互转换。
public static void main(String[] args) throws Exception{ Calendar cal = Calendar.getInstance(); Date date = new Date(calendar.getTimeInMillis()); System.out.println(date); }
Calendar类提供的常用方法:
注:calendar.getTime()得到的是当前时间
getTime()、getTimeInMillis()
(1) void add(int field,int amount):根据日历的规则,为给定的日历字段添加或减去指定的时间量。
(2) int get(int field):返回指定日历字段的值。
(3) int getActualMaximum(int field):返回指定日历字段的可能拥有的最大值。
(4) int getActualMinimum(int field):返回指定日历字段的可能拥有的最小值。
(5) void roll(int field,int amout):与add方法相似,区别在于超过该字段的最大范围时,也不会向上一个字段进位。
(6) void set(int field,int value):将给定的日历字段设置为给定值。
(7) void set(int year,int month,int date):设置Calendar对象的年、月、日3个字段值。
(8) void set(int year,int month,int date,int hourOfDay,int minute,int second):设置Calendar对象的年、月、日、时、分、秒6个字段的值。
Random
.nextInt()
Math
Java提供了最简单加、减、乘、除、取模等基本运算。同时还提供了Math类来进行更复杂的数学运算。
Math不用new ,直接点
PI圆周率,abs取绝对值(正数是他本身,负数是他相反数),sin,tan,,,数学求角度,max,,min,,传两个参数,返回的就是最大的,最小的那个数
Math.random()~0到1之间的随机数
BigDecimal
double、float浮点数在进行数据基本运算时会发生数据丢失现象,这种情况不仅仅是在Java语言中,在其他语言中同样存在。
System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.out.println(123.3/100);
Java提供了BigDecimal类,用于处理进行基本运算发生的数据丢失问题。使用BigDecimal构造器创建对象时,建议优先使用String类型对象作为参数传入进行初始化。
例如:BigDecimal decimal = new BigDecimal(“12.5”);
BigDecimal类提供了add()加、subtract()减、multiply()乘、divide()除,pow()取余等方法对精确浮点数进行常规算术运算。
String
charAt() 根据下标拿对应的字符
indexOf()根据字符拿下标,不存在返回-1
lastindexOf()最后一个字符出现的下标
concat()拼接字符串
contains()判断是否包含某个字符串
endWith()判断是否以什么结尾
startsWith()判断是否以什么开始
equals()判断两个字符串是否相等 ==
equalsIgnoreCase()忽略大小写判断
isEmpty()判断是否为空
replace()字符替换并不改变原有值
split()分割字符串
substring()截取字符串 包前不包后
内存问题
String定义的字符串为一个常量,一旦被赋值,不可被改变。
使用String a="hello";定义字符串时,系统会先去堆内存(常量池)中查找有没有hello存在,如果有则会直接放回该对象的地址,如果没有,则新建该对象再返回地址值。
使用new String("hello");时,因为new关键字的存在,每次都会创建新对象
==面试题==
写出下面的输出结果
String s1=new String("abc");
String s2="abc";
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
String s3="bbb";
String s4="bbb";
System.out.println(s3==s4);
String s5=new String("ccc");
String s6=new String("ccc");
System.out.println(s5==s6);
String s7="hello";
String s8="world";
String s9="helloworld";
System.out.println(s9==s7+s8);
System.out.println(s9=="hello"+"world");
==重点==:
-
字符串如果是变量相加,先开空间,再拼接
-
字符串如果是常量相加,先拼接,然后再常量池找,如果有就直接返回,没有再创建
StringBuffer和StringBuilder
可变字符串、方法一模一样
二者的区别:前者是线程安全的可变字符串,后者线程不安全
//StringBuffer() 无参构造方法 StringBuffer buffer = new StringBuffer(); System.out.println("buffer"+buffer); System.out.println("buffer.capacity()"+buffer.capacity()); System.out.println("buffer.length()"+buffer.length()); System.out.println("------------------"); //StringBuffer(int capacity) 指定容量的字符串缓冲区对象 StringBuffer buffer2 = new StringBuffer(50); System.out.println("buffer2"+buffer2); System.out.println("buffer2.capacity()"+buffer2.capacity()); System.out.println("buffer2.length()"+buffer2.length()); System.out.println("-----------------------"); //StringBuffer(String str) 指定字符串内容的字符串缓冲区对象 StringBuffer buffer3 = new StringBuffer("hello"); System.out.println("buffer3"+buffer3); System.out.println("buffer3.capacity()"+buffer3.capacity()); System.out.println("buffer3.length()"+buffer3.length());
常见方法
-
添加:
-
append
-
insert
-
-
删除:
-
deleteCharAt
-
delete
-
-
替换
-
replace
-
-
反转
-
reverse
-
==面试==
-
String,StringBuffer,StringBuilder的区别
-
String内容不可变,后两个内容可变
-
StringBuffer是线程同步的,数据安全,效率低;后者线程不同步,数据不安全,效率高
-
-
String,StringBuffer作为参数传递(值传递和引用传递,面向对象讲)
Scanner
Scanner scanner = new Scanner(System.in);
String类型 scanner.next();
int类型 scanner.nextInt();