包装类
Java并不是纯面向对象的语言,比如经常用到的基本数据类型就不是对象,但是我们在实际应用中需要将基本数据转化成对象。因此,Java中为每个基本数据类型设计了一个对应的类进行表示:
package cn.Tony.Package;
public class TestPackage {
public static void main(String[] args) {
//基本数据类型转换包装类对象
Integer a = new Integer(3);//写成Integer a = 100;也可以编译器会帮你转换
Integer b = Integer.valueOf(5);//推荐
//把包装类对象转成基本数据类型
int c = b.intValue();//同理:int b = a;编译器会帮助修改
double d = b.doubleValue();
//字符串转换成包装类对象
Integer e = new Integer("999");
Integer f = Integer.parseInt("999988");
//把包装类对象转换为字符串
String str = f.toString();//""+f
//常见的常量
System.out.println(Integer.MAX_VALUE);
}
}
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
//valueOf有缓存机制
缓存[-128,127]之间的数字,实际就是系统初始的时候,创建了[-128,127]之间的一个缓存数组。当我们调用
valueOf()
时,首先检查是否存在区间内,如果在范围内则直接从缓存数组中拿出已经建好的对象,如果不再这个范围,则创建新的Integer对象。
String类
package cn.Tony.Package;
public class TestString {
public static void main(String[] args) {
String str = "aaaabbbb";//赋值了就不能改变了
String str2 = str.substring(2,5);
//StringBuilder效率高,StringBuffer线程安全,效率低
StringBuilder sb = new StringBuilder();
//StringBuilder与String的区别就是StringBuilder可以修改
System.out.println(Integer.toHexString(sb.hashCode()));
System.out.println(sb);
sb.setCharAt(2,'M');
System.out.println(Integer.toHexString(sb.hashCode()));
System.out.println(sb);
}
}
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i=0;i<26;i++){
sb.append((char)('a'+i));
}
System.out.println(sb);
sb.reverse();//反转
System.out.println(sb);
sb.insert(0,"ssss").insert(3,"skr");//链式调用
//循环累计方式:不要用str=i+str,要使用append。
for(int i =0;i<5000;i++){
str = str +i; //相当于产生了1w个对象,使用append
}
}
枚举
枚举类型的定义包括枚举声明和枚举体。
enum 枚举名{
枚举体(常量列表)
}
Season a = Season.AUTUMN;
switch (a){
case SPRING:
System.out.println("春天来了");
}
enum Season{
SPRING,SUMMER,AUTUMN,WINTER
}
异常
Java处理异常的过程:
1.抛出异常:在执行一个方法时,如果发生异常,则这个方法生成代表该异常的一个对象,停止当前执行路径,并把异常对象提交给JRE
。
2.捕获异常:JRE
得到该异常后,寻找相应的代码来处理该异常。JRE
在方法的调用栈中查找,从生成异常的方法开始回溯,直到找到相应的异常处理代码为止。
异常的结构
异常处理方式
package cn.Tony.Package;
public class TestException {
public static void main(String[] args) {
try{
int a = 1/0;
}catch (ArithmeticException e){
System.out.println("报错"+e);
e.printStackTrace();
}finally {
}
}
}
手动抛出异常:
package cn.Tony.Package;
public class Test04 {
public static void main(String[] args) {
Person p = new Person();
p.setAge(-10);
}
}
class Person{
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age<0){
throw new IlegalAgeExcaption("年龄不能为负数"); //使用异常来处理
}
this.age = age;
}
}
class IlegalAgeExcaption extends RuntimeException{ //异常分:运行时异常和编译异常,这里是运行时异常
public IlegalAgeExcaption(){
}
public IlegalAgeExcaption(String msg){
super(msg);
}
}