1
,JVM内存结构
JVM所管理的内存
主要分为三大区域
1)方法区:用来存储程序运行时所需要的类信息
入String.class,静态方法,常量等
2)堆:所有引用类型的对象(实例)存储的位置
3)栈:用来存储方法的参数以及方法内的局部变量
栈帧: 在栈中JVM会给每一个方法单独分配空间,这个空间用来存储此 方法内的所有局部变量,当此方法结束后,栈帧消失(内存释放)
垃圾回收机制:
不定时的检查堆里的对象,是否被变量所引用,如果发现这个对象没有被引用, 就会处理垃圾
处理的方法就是System。gc()
2 ,API(程序应用接口)
就是封装了已经写好的类型。
包含了常用的类型,如String,Date,Exception,IO等等
3, 字符串
String
特点:不可改变的,final修饰不能被继承,且重写了Object的equals方法和 toString方法
StringBuffer:可改变的,比StringBuilder线程安全
StringBuilder:比StringBuffer运行快---常用()
StringBuffer和StringBuilder没有重写equals方法,但重写了toString方法
String 中的 String [] spilt(String regex)
如果符合正则表达式的分隔符在普通字符串
如果在开头加一个分隔符,则多一个空的字符串
如果在末尾加一个分隔符,则等于没加
4, 包装类
Object这个类是引用类型的最顶端(所有类的父类)
boolean equals(Object obj)return this==obj;比较的是地址信息
toString();返回了对象的一串字符 类全名@Hash值(例如:com.Person@4E5A)
所以在定义类时,都会重写equeals和toString方法
equals用来比较两个对象的内容
1,先判断传进来的参数是不是this
2,判断参数是不是null
3,判断传进的参数是不是同一类型
toString用来描述对象的内容
int --Integer
byte--Byte
short--Short
long -- Long
float--Float
double--Double
char -- Character
boolean--Boolean
基本类型怎么变成包装类
jdk1.5之前使用构造器进行装箱
jdk1.5之后 支持自动装箱
Integer a=5;
int b=a;
Integer c=new Integer(8);
包装类的整数常量池
在自动装箱时,如果值在-128到z127范围内时
Integer a=5;
此时,先去常量池中查找是否有与5值相等的对象,如果有就不创建对象,直接 引用常量池中的,如果没有,就创建对象存入常量池
5, 异常
Throwable
--Error(系统级别的,程序员无法修改)
--Exception(编程过程中可以避免出现的
按照编译器是否检查分类
检查性异常:
非检查性异常:(在编译期间不去检查)
按照JVM运行时分类
运行时异常:也叫非检查性异常
非运行时异常(编译异常)==检查性异常
try{
可能会出现异常的代码块
将try抓到的异常信息封装成异常对象
}catch(Exception e){
将地址信息给e
}finally{
通常进行一些流的关闭操作
}
多个catch的写法:
从上往下处理的异常可以是
同级别的异常类型,或者是子父关系
子类重写父类的方法时,
如果父类的方法有声明(throws)异常,可以不声明,也可以声明同一类型或者 是异常的子类型
6, Date类型
在java语言中,也设计出了相应的时间类型用来描述时间及其日期等信息,用的是 UTC时间标准 。GMT也是一个时间标准
Date类型简介
java.util.Date封装了时间信息。
获取的时间:是距离某一时间的毫秒数,表示另外一个时间点
距离的某一时间点叫纪元。就是1970年1月1日0时0分0秒
常用的API
构造器:
--Date():获取的是系统当前时间点
--Date(long time):将time设置成距离纪元的毫秒数
方法:
--long getTime():获取时间对象距离时间纪元的毫秒数
--void setTime(long time):设置距离纪元的时间毫秒数
Date类中的绝大多数方法都被Calendar类所代替
7, SimpleDateFormat
类型简介:java.text.SimpleDateFormat用来格式化时间
可以将时间格式化成字符串
也可以将字符串解析成时间对象
日期模式匹配字符:(看API中都有)
Date parse(String str) try catch
时间字符串必须与格式字符串pattern对应上
8, Calendar
类型简介
java.util.Calendar封装了日期和时间信息,可以对时间分量进行设置。
Calendar是抽象类,其子类是各个国家自己国家的日历类型,不过,大多数国家通 常用格里高利历法
getInsrance()
--static Calendar getInstance()
作用:静态方法,获取子类对象
日期与时间分量
--static int YEAR
--static int MONTH
--static int DATE
--static int WEEK_OF_YEAR
--static int WEEK_OF_MONTH 值为0-11
--static int DAY_OF_WEEK 值为0-7但是从周日开始
--static int HOUR
--static int MINUTE
--static int SENCOND
getActualMaximum
可以获取某个时间分量的最大值
add方法
在时间分量上增加,若增加的值超过本月的天数,就追加到下一个月
setTime():在设置时间的时候,也可以追加到下一个,当为负数时到上一个分量
9, 正则表达式
*正则表达式是用来校验某些字符串是否符合规则。
是一串特殊的字符串。特殊在其字符都是通配符有匹配功效
* []:检查是否有括号内中的某个字符
[abc] a,b,c中的任意一个字符
[^abc]表示除了a,b,c以外的字符替换^
[a-z]所有小写字母
[A-Z]所有的大写字母
* 转义字符:\
\w 等于[a-z,A-Z,0-9]
\W 与 \w相反
\d 任意数字
\D任意非数字
*符号 是出现0次或者多次
+ 1次或者多次
? 0次或者1次
{n}恰好n次
{n,m}至少是n次,不多于m次
如果想使用“\d”
需要在“\”前再次添加转义字符,将次“\”转义成普通的“\”
二 , 集合
数组和集合
不同点:
*数组可以存基本数据类型,但集合不能
*当不知道数据具体长度时,不适合用数组
List接口;--父接口Collection
List接口的特点
*有序,可重复(同一个元素可存多次)
*元素的索引:从0开始到size()-1
List的实现类
ArrayList,LinkedList,Vector,通过向上转型,父类引用指向子类对象
方法:
*add(E e) boolean 从尾部追加元素E是泛型的元素
*add(int index,E e) 在指定索引出添加元素
*addAll(int index,Collection c) boolean 从索引index上插入集合c的元素
*get(int index)E 通过指定索引,获取相应元素
*set(int index,E elements) E 使用元素element替换掉索引为index的上的元素,返回值为替换出来的元素
*int indexOf(Object obj) 返回元素obj在集合找那个第一次出现的索引,如果集合中没有返回-1
*int lastIndexOf(Object obj) 返回元素obj在集合中最后一次出现的索引,如果没有同样返回-1
*remove(int index) E 移除索引index上的元素,返回值就是此元素
JVM所管理的内存
主要分为三大区域
1)方法区:用来存储程序运行时所需要的类信息
入String.class,静态方法,常量等
2)堆:所有引用类型的对象(实例)存储的位置
3)栈:用来存储方法的参数以及方法内的局部变量
栈帧: 在栈中JVM会给每一个方法单独分配空间,这个空间用来存储此 方法内的所有局部变量,当此方法结束后,栈帧消失(内存释放)
垃圾回收机制:
不定时的检查堆里的对象,是否被变量所引用,如果发现这个对象没有被引用, 就会处理垃圾
处理的方法就是System。gc()
2 ,API(程序应用接口)
就是封装了已经写好的类型。
包含了常用的类型,如String,Date,Exception,IO等等
3, 字符串
String
特点:不可改变的,final修饰不能被继承,且重写了Object的equals方法和 toString方法
StringBuffer:可改变的,比StringBuilder线程安全
StringBuilder:比StringBuffer运行快---常用()
StringBuffer和StringBuilder没有重写equals方法,但重写了toString方法
String 中的 String [] spilt(String regex)
如果符合正则表达式的分隔符在普通字符串
如果在开头加一个分隔符,则多一个空的字符串
如果在末尾加一个分隔符,则等于没加
4, 包装类
Object这个类是引用类型的最顶端(所有类的父类)
boolean equals(Object obj)return this==obj;比较的是地址信息
toString();返回了对象的一串字符 类全名@Hash值(例如:com.Person@4E5A)
所以在定义类时,都会重写equeals和toString方法
equals用来比较两个对象的内容
1,先判断传进来的参数是不是this
2,判断参数是不是null
3,判断传进的参数是不是同一类型
toString用来描述对象的内容
int --Integer
byte--Byte
short--Short
long -- Long
float--Float
double--Double
char -- Character
boolean--Boolean
基本类型怎么变成包装类
jdk1.5之前使用构造器进行装箱
jdk1.5之后 支持自动装箱
Integer a=5;
int b=a;
Integer c=new Integer(8);
包装类的整数常量池
在自动装箱时,如果值在-128到z127范围内时
Integer a=5;
此时,先去常量池中查找是否有与5值相等的对象,如果有就不创建对象,直接 引用常量池中的,如果没有,就创建对象存入常量池
5, 异常
Throwable
--Error(系统级别的,程序员无法修改)
--Exception(编程过程中可以避免出现的
按照编译器是否检查分类
检查性异常:
非检查性异常:(在编译期间不去检查)
按照JVM运行时分类
运行时异常:也叫非检查性异常
非运行时异常(编译异常)==检查性异常
try{
可能会出现异常的代码块
将try抓到的异常信息封装成异常对象
}catch(Exception e){
将地址信息给e
}finally{
通常进行一些流的关闭操作
}
多个catch的写法:
从上往下处理的异常可以是
同级别的异常类型,或者是子父关系
子类重写父类的方法时,
如果父类的方法有声明(throws)异常,可以不声明,也可以声明同一类型或者 是异常的子类型
6, Date类型
在java语言中,也设计出了相应的时间类型用来描述时间及其日期等信息,用的是 UTC时间标准 。GMT也是一个时间标准
Date类型简介
java.util.Date封装了时间信息。
获取的时间:是距离某一时间的毫秒数,表示另外一个时间点
距离的某一时间点叫纪元。就是1970年1月1日0时0分0秒
常用的API
构造器:
--Date():获取的是系统当前时间点
--Date(long time):将time设置成距离纪元的毫秒数
方法:
--long getTime():获取时间对象距离时间纪元的毫秒数
--void setTime(long time):设置距离纪元的时间毫秒数
Date类中的绝大多数方法都被Calendar类所代替
7, SimpleDateFormat
类型简介:java.text.SimpleDateFormat用来格式化时间
可以将时间格式化成字符串
也可以将字符串解析成时间对象
日期模式匹配字符:(看API中都有)
Date parse(String str) try catch
时间字符串必须与格式字符串pattern对应上
8, Calendar
类型简介
java.util.Calendar封装了日期和时间信息,可以对时间分量进行设置。
Calendar是抽象类,其子类是各个国家自己国家的日历类型,不过,大多数国家通 常用格里高利历法
getInsrance()
--static Calendar getInstance()
作用:静态方法,获取子类对象
日期与时间分量
--static int YEAR
--static int MONTH
--static int DATE
--static int WEEK_OF_YEAR
--static int WEEK_OF_MONTH 值为0-11
--static int DAY_OF_WEEK 值为0-7但是从周日开始
--static int HOUR
--static int MINUTE
--static int SENCOND
getActualMaximum
可以获取某个时间分量的最大值
add方法
在时间分量上增加,若增加的值超过本月的天数,就追加到下一个月
setTime():在设置时间的时候,也可以追加到下一个,当为负数时到上一个分量
9, 正则表达式
*正则表达式是用来校验某些字符串是否符合规则。
是一串特殊的字符串。特殊在其字符都是通配符有匹配功效
* []:检查是否有括号内中的某个字符
[abc] a,b,c中的任意一个字符
[^abc]表示除了a,b,c以外的字符替换^
[a-z]所有小写字母
[A-Z]所有的大写字母
* 转义字符:\
\w 等于[a-z,A-Z,0-9]
\W 与 \w相反
\d 任意数字
\D任意非数字
*符号 是出现0次或者多次
+ 1次或者多次
? 0次或者1次
{n}恰好n次
{n,m}至少是n次,不多于m次
如果想使用“\d”
需要在“\”前再次添加转义字符,将次“\”转义成普通的“\”
二 , 集合
数组和集合
不同点:
*数组可以存基本数据类型,但集合不能
*当不知道数据具体长度时,不适合用数组
List接口;--父接口Collection
List接口的特点
*有序,可重复(同一个元素可存多次)
*元素的索引:从0开始到size()-1
List的实现类
ArrayList,LinkedList,Vector,通过向上转型,父类引用指向子类对象
方法:
*add(E e) boolean 从尾部追加元素E是泛型的元素
*add(int index,E e) 在指定索引出添加元素
*addAll(int index,Collection c) boolean 从索引index上插入集合c的元素
*get(int index)E 通过指定索引,获取相应元素
*set(int index,E elements) E 使用元素element替换掉索引为index的上的元素,返回值为替换出来的元素
*int indexOf(Object obj) 返回元素obj在集合找那个第一次出现的索引,如果集合中没有返回-1
*int lastIndexOf(Object obj) 返回元素obj在集合中最后一次出现的索引,如果没有同样返回-1
*remove(int index) E 移除索引index上的元素,返回值就是此元素
*subList(int fromIndex,int toIndex) List 截取子集,从fromIndex开始,到toIndex结束,包前不包后,通过子集引用修改元素,那么会影响父集。
集合未完,待续