一、JVM内存结构
1.JVM所管理的内存
2.主要分三大区域:
方法区:用来存储程序运行时所需要的类信息
比如:Person.class、静态方法等,常量池
堆:所有引用类型的对象(实例)存储的位置
栈:是用来存储方法的参数以及方法内的局部变量
JVM会给每一个方法单独分配空间,用来存储此方法内的所有局部变量,当此方法结束后,栈帧消失,内存释放
3.垃圾回收机制(GC):不定时检查堆里的对象,是否被变量所引用,如果这个对象没有被引用,就会处理这个对象(System.gc())
二、API(程序应用接口)
就是封装了已经写好的类型
包括了常用的类型,如String、Date、Exception、IO等
(API手册)
三、字符串
String:特点是一经创建不可改变、不能被继承、
StringBuffer:效率高,线程不安全
StringBuilder:比较常用(效率高,线程不安全)
String类重写了Object的equals方法(判断内容)和toString()方法
StringBuffer和StringBuilder没有重写equals方法
四、包装类
Object这个类时引用类型的最顶端(所有引用类型的父类)
boolean equals(Object obj):
return this==obj;
比较的是地址信息
String toString():返回了对象的一串字符:
类全名@Hash值
所以在定义类时,都会重写equals和toString方法
equals用来比较两个对象的内容
1. 先判断传进来的参数是不是this(即本身)
2. 判断参数是不是null
3. 判断参数是不是同一类型
toString用来描述对象的内容
八大基本类型的包装类
byte --- Byte
short ---- Short
int --- Integer
long --- Long
float --- Float
double --- Double
char ---- Character
boolean --- Boolean
包装类中有两个方法
parseXXX(String str):将字符串类型转化成XXX类型
valueOf(String str):将字符串类型转化成XXX型的包装类
基本数据类型变成包装类的方法:
1. 使用构造器进行装箱(比如Integer a=newInteger(100);)
2. 自动装箱(当然也可以自动拆箱)(比如 Integer a=5(装箱);int b=a;(拆箱))
包装类的整数常量池:
在自动装箱时,如果值在-128到127范围内
比如Integer a = 5;
此时,先去常量池中查找是否有与5值相等的对象,如果有,就不再创建,直接引用常量池中的,如果没有,就会创建,然后存入常量池。
五、异常
1.按照编译器是否检查分类
检查性异常
非检查性异常
2.按照jvm运行时分类
运行时异常:也叫非检查性异常
编译期异常:检查性异常
3.try-catch-finally语句
try{
可能会出现异常的代码块
将try抓到的异常信息封装成异常对象
}catch(Exception e){
将地址信息给e
}finally{
通常进行一些流的关闭操作
}
注意:多个catch时,从上往下处理的异常必须是同级别的异常类型或者是子父关系
子类重写父类的方法时,如果父类的方法有声明(throws)异常,子类的方法可以不声明;也可以声明同一个类型或者是异常的子类型
六、Date及其常用API
1、 Java中的时间
在java语言中,也设计出了相应的时间类型,用来描述时间及其日期等信息。用的是UTC时间标准。GMT也是一个时间标准
2、 Date类型简介
java.util.Date封装了时间信息。
获取的时间:是距离纪元(就是1970年1月1日0时0分0秒)的毫秒数来表示另外一个时间点
Date类型中的很多方法已经被Calendar所取代
3、 常用API
构造器:
Date():获取的是系统当前时间点
Date(long time):将time作为毫秒数设置成距离纪元的时间点
方法:
longgetTime():获取时间对象所距离纪元的毫秒数
voidsetTime(long time):设置距离纪元time的时间毫秒数
七、SimpleDateFormat
1、 类型简介
java.text.SimpleDateFormat用来进行格式化时间、可以将时间格式化成字符串,也可以将字符串解析成时间对象。
2、 日期模式匹配字符
y:年 比如: yyyy---2018
M:月 比如: MM-----06
d:日 比如: dd-----02
E:星期 比如: E-----星期六
a:上下午 比如: a-----下午
H:24小时的时 比如:HH----16
h:12小时的时 比如:hh(a)---43(下午)
m:分 比如:mm-- 35
s:秒 比如:ss—23
3、 构造器
SimpleDateFormat():系统提供默认格式
SimpleDateFormat(String pattern):自定义格式pattern(字符串类型,利用日期模式匹配字符)
4、 Date格式化成String
例子:
SimpleDateFormat simpledateformat=new SimpleDateFormat("yyyy年MM月dd日 E HH时mm分ss秒 ");
Date now =new Date();
System.out.println("当前时间:"+simpledateformat.format(now));
5、 String格式化成Date
例子:
String str=”1997-10-15”;
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
try {
Date date=sdf.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
八、Calendar
1、类型简介
java.util.Calendar封装了日期和时间信息
可以对时间分量进行设置。
Calendar是抽象类,其子类是各个国家所使用的日历类型
不过,多数国家通常用的都是(GregorianCalendar格里高利历法,即阳历)
2、getInstance方法
--static Calendar getInstance();
作用:静态方法,获取子类对象
3、日期与时间分量
--static int YEAR
--static int MONTH: 值为0-11
--static int DATE
--static int WEEK_OF_YEAR
--static int WEEK_OF_MONTH
--static int DAY_OF_WEEK:值为1-7,从周日开始
--static int HOUR
--static int MINUTE
--static int SECOND
4、API
1)getActualMaximum
可以获取某个时间分量的最大值。
2)add(intfield,int amount)
在某个时间分量上增加amount
3)getTime()与setTime(Date date)
getTime():获取Date类型
setTime(Date date):传入Date类型,设置Calendar
4)get(intfield)
获取某个时间分量的值
5) getTimeInMillis()
返回毫秒数
6) set(intfield,int value)
设置某个时间分量的值