Java常用基本类库
catch(Exception ex){ //空代码 }
这样以为“不会出错了”,其实是把异常“吃掉了”,会让程序陷入 逻辑混乱状态,要科学合理的处理异常(以后经常用就明白了)。我 一个学生吃掉数据库执行异常造成的“刷新不出数据”的假象。
Throwable类
Throwable中的方法:
public String getMessage():返回的是异常的消息字符串。 public void printStackTrace():把错误信息显示在控制台。
e.printStackTrace()并不是正确的处理异常的方式,要合理的识别异常 类型,并且给出合适的处理,e.printStackTrace() 只能让程序员知道“ 出错了”。 也不用
String trim():去除字符串两端空格
String 是不可变的,因此上面的操作都是生成新的字符串 对象,要用返回值去取新的字符串。
这么多方法怎么记得住?
StringBuffer
使用jd-gui反编译发现
String s7="111"+"222"+"333"+"444"+"555" 会被优化为 String s7 = "111222333444555";
Calendar
根据DateTime得到各个部分:通过int get(int field)获得年月日小时分秒等 部分,可选值Calendar的常量YEAR、MONTH、DAY_OF_MONTH(在月 中的天数)、DAY_OF_WEEK( 周中的天数,即周几)、DAY_OF_YEAR( 一 年中的第几天 ) 、 HOUR(12 小时制 ) 、 HOUR_OF_DAY(24 小时制 ) 、 MINUTE(分钟)、SECOND(秒)。也可以void set(int field, int value)方法进 行修改。 Calendar cal = Caபைடு நூலகம்endar.getInstance(); cal.setTime(new Date());
最后使用String s = sb.toString()一次性生成拼接结果字符串即可
JDK1.5 增加了一个StringBuilder,用法和StringBuffer一样。StringBuffer是线程 安全(*)的,效率略低;StringBuilder线程不安全,效率高,在大部分单线程环 境使用StringBuilder会更好。
Java这么学不枯燥 基础篇 Java常用基本类库
如鹏网
String成员方法(常用)
boolean equals(Object obj):判断字符串的内容是否相同, 区分大小写。 boolean equalsIgnoreCase(String str):判断字符串的内容是 否相同,不区分大小写。 boolean contains(String str):判断字符串对象是否包含给定 的字符串。
JDK 1.5之后int和Integer之间转换不需要new Integer/i.intValue()。如下即可:
Integer i = 123;//自动装箱 int i1= i;//自动拆箱
通过jd-gui进行反编译看上面的代码生成的class,得知是编 译器帮着完成的装箱拆箱。 注意Integer 为null的情况:
基本数据类型不“面向对象”
面向对象语言中应该“一切都是对象”,方法、int、double等应该都 是类的对象。但是由于历史原因,java中的int、double 、boolean 等 基本数据类型不是类。有的场合需要使用对象(JDBC中就会用到),怎 么办?
class IntClass { private int value; public IntClass(int value) { this.value = value; } public int getInt() { return this.value; } } int age=18; IntClass iAge = new IntClass(age); 使用instanceof判断变量指向的对象类型。
练习:获取番号
String成员方法
String toLowerCase():把字符串变成小写 String toUpperCase():把字符串变成大写
String replace(char oldChar,char newChar):用新的字符去 替换指定的旧字符
String replace(String oldStr,String newStr):用新的字符串 去替换指定的旧字符串 (*)String[] split(String regex):切割功能,注意正则表达式 (以后讲)。把字符串用“,”分割
System.out.println("数组越界异常");
} JDK 1.7之后还新增了一种简化多异常处理的语法: try { // 操作代码
} catch (ArrayIndexOutOfBoundsException | ArithmeticException e) {
System.out.println("这里出问题了"); } 里面有一个问题,就是异常处理的方法不好写了,因为得到的异常不明确了。
int 等是基本数据类型,不能为 null( 没有指向任何对象 ) ; 类变量可以是 null 。有时想表达“不知道数字是多少”的 时候,用int任何值表示都不合适。Integer是类,因此可以 为null,这样用null的Integer表示“没有赋值的整数、未知 的整数”。
自动装箱拆箱(box/unbox)
boolean startsWith(String str):判断字符串对象是否以给定 的字符串开始。
boolean endsWith(String str):判断字符串对象是否以给定 的字符串结束。 案例:判断输入的是否是admin(不区分大小写);判断是否 是网址:以http://开头、以.com或者.cn结尾。
但是String s6 = s1 + s2 + s3 + s4 + s5;就没那么幸运了,每次+都会生成一个 String对象,当连接字符串比较多的时候就会产生临时字符串对象。 使用StringBuffer拼接字符串则不会有临时字符串对象的问题:
StringBuffer sb = new StringBuffer(); sb.append(s1); sb.append(s2); sb.append(s3); 因为append方法把this返回了,还可以sb.append(s1).append(s2).append(s3);
Integer i2 = null; int i3 = i2;
日期
Java使用Date类(java.util包下)表示时间数据类型。 n e w D a t e ( ) 当 前 时 间 , 也 有 n e w Date(System.currentTimeMillis()),看源代码,本质上是一 样的。 可以通过Date的getYear()、getMonth()、getHours() 等得 到日期的年、月、小时等部分;也可以setYear等来设置日 期,但是属于@Deprecated( 不推荐)的方法,因此尽量不 要用。看文档提到了用Calendar Calendar是抽象类,通过调用getInstance()静态方法得到一 个当前时区、当前语言设置下的实例(猜测内部实现,打印 cal.getClass() 看一下返回的是哪个类的对象。这是一种设 计模式),还可以使用getInstance() 其他的重载获得其他时 区、其他语言下的实例。
多个异常的处理
try { int a = 10; int b = 0; System.out.println(a / b);
int[] arr = { 1, 2, 3 };
System.out.println(arr[3]); } catch (ArithmeticException ae) { System.out.println("除数不能为0"); } catch (ArrayIndexOutOfBoundsException ae) {
int day = cal.get(Calendar.DAY_OF_MONTH);
根据设置各个部分,得到DateTime: void set(int year, int month, int date) void set(int year, int month, int date, int hourOfDay, int minute) DateTime date = cal.getTime(); 注意:Calendar的月份是从0开始。
DateFormat
DateFormat用来把Date按照格式转换为 String,它是抽象 类,一般使用其子类SimpleDateFormat,使用 SimpleDateFormat(String pattern)这个构造函数,传递一 个格式字符串进去。 y年;M月;d天;H小时;m分钟;s秒。Year、Month、 Day、Hour、Minute、Second“月”比“分钟”大,所以 月M大写,分钟m小写。 测试“ yyyy 年 MM 月 dd 日 HH:mm:ss ”、“ yyyy-MMdd”。 使用String format(Date date),把Date格式化为字符串; public Date parse(String source)把字符串解析为Date。
基本数据类型包装类
Java 中内置提供了“包装类” (Wrapper) :byte→Byte; short→Short;int→Integer;long→Long;float→Float; double→Double;char→Character;boolean→Boolean。 使用方法: