一.jdk、jre、jvm
JDK是整个JAVA的核心,是开发工具包;JRE是Java运行环境;JVM即java虚拟机是java运行时的环境。
JDK是 Java语言的软件开发工具包(SDK)。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib合起来就称为jre。也就是说JDK包含JRE,而JRE包 含JVM。
JDK和JRE区别:在bin文件夹下会发现,JDK有javac.exe而JRE里面没有,javac指令是用来将java文件编译成class文件的。
JRE和JVM区别:JVM并不代表就可以执行class了,JVM执行.class还需要JRE下的lib类库的支持,尤其是rt.jar
二.运算符
instanceof
前面学习没有注意过这个instanceof(判断对象于实例的关系),用法:
if(A instanceof B){
System.out.println("A对象是 B 类的实例");
}
位运算符
>> 右移,>>1 移动一位就相当于除2。-1右移一位是特例,-1右移一位,还是-1,对于大部分编译器,-1/2的结果一般是0.这个主要与移位设置有关.当负数执行右移位时候,空出来的位置是填补1而不是0.
<< 左移,移动一位相当于乘2.
>>> 按位右移补零操作符。左操作数的值按右操作数指定的位数右移,移动得到的空位以零填充。
三.数据集合
Collection接口
List接口:存储有序的,可重复的数据(动态数组)
1.ArrayList
作为list借口的主要实现类;线程不安全,效率高;底层使用Object[] elementDate存储
2.LinkedList
对于频繁的插入,删除操作,使用此类效率比ArrayList高;底层使用双方链表存储
3.Vector
作为List接口的古老实现类;线程安全的,效率低,底层使用Object[] elementData存储
Set接口:存储无序的,不可重复的数组
1.HashSet
set接口的主要实现类,线程不安全 ,可以存储null
2.LinkedHashSet
作为HashSet的子类;遍历其内部数据时,可以按照添加的顺序遍历
3.TreeSet
可以按照添加对象的指定属性,进行排序
Map接口
1.HashMap
作为Map的主要实现类;线程不安全的,效率高;存储null的key和value
2.LinkedHashMap
保证在遍历map元素时,可以按照添加的顺序实现遍历
3.TreeMap
4.Hashtable
5.Properties
Set,List,Map的工具类 Collections
方法:
synchronizedXXX (如synchronizedList,synchronizedMap):
返回一个线程安全的 List,Map…
四.字符串
String
不可变的字符序列,底层使用char[]存储
StringBuffer
可变的字符序列 ,线程安全,效率低,低层使用char[]存储
StringBuilder
可变的字符序列 ,线程不安全,效率高 ,JDK5.0新增,低层使用char[]存储
五.时间
JDK8之前有的时间类
java.util.Date
getTime() 获取当前Date对象对应的毫秒数.(时间戳)
new Date() 创建一个当前时间的Date对象
new Date(Long time) 传入time毫秒,从1970年开始过time毫秒的日期
java.sql.Date
util.Date的子类
SimpleDateFormat
作用 :对Date类的格式化和解析
//两种实例化的格式
SimpleDateFormat simpleDateFormat=new SimpleDateFormat();
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
- 格式化:日期–>字符串
String format = simpleDateFormat.format(date);
- 解析: 字符串–>日期
Date parse = simpleDateFormat.parse(s);
日历类 Calendar类(抽象类)
实例化:
方法一:创建其子类 GregorianCalendar 的对象
方法二:调用其静态方法 getInstance()
Calendar calendar=Calendar.getInstance();
常用方法:
get() 这个月的多少天
int days=calendar.get(Calendar.DAY_OF_MONTH);//这个月的多少天
getTime() 日历类 --> Date类
Date time = calendar.getTime();
setTime() Date类–>日历类
calendar.setTime(date);
JDK8新增的时间类
LocalDate,LocalTime,LocalDateTime的使用
LocalDate now = LocalDate.now();//年月日
LocalTime now1 = LocalTime.now();//时分秒
LocalDateTime now2 = LocalDateTime.now();//年月日时分秒
Instant的使用
//对应本初子午线的标准时间
Instant instant=Instant.now();
System.out.println(instant);//2020-08-20T03:22:46.897Z
//添加时间偏移量,计算当地时间
OffsetDateTime offsetDateTime = instant.atOffset(ZoneOffset.ofHours(8));
System.out.println(offsetDateTime);//2020-08-20T11:22:46.897+08:00
//toEpochMilli():获得从1970年1月1日0时0分0秒(UTC)开始的毫秒数 相当于-->Date类的getTime()
long l = instant.toEpochMilli();
System.out.println(l);//1597893942012
//ofEpochMilli(): 通过给的毫秒数,获得Instant实力 相当于-->Date(Long millis)
Instant instant1 = Instant.ofEpochMilli(1597893942012L);
System.out.println(instant1);//2020-08-20T03:25:42.012Z
常用方法:
DateTimeFormatter:格式化解析日期,时间
六.排序
Comparable接口
自然排序,重写comparableTo(obj)方法
规则:
如果当前对象this大于形参对象,返回正整数
如果当前对象this小于形参对象,返回负整数
如果当前对象this等于形参对象,返回0
Comparator接口
自定义排序,重新compare(obj o1 , obj o2)