异常
异常处理机制tryresouce
JDK1.7新特性,自动关闭资源。
格式:
try(对象)
{
有运行时异常的代码;
}
备注:使用这种异常处理机制,被处理的对象所属的类一定要实现了AutoCloseable 接口 ,并重写close()方法
package com.wlx.day85;
public class MyIOClass implements AutoCloseable
{
public void hello()throws RuntimeException
{
System.out.println("MyIOClass---");
}
public void close()
{
System.out.println("正在关闭资源...");
}
}
package com.wlx.day85;
public class MyIOClassTesting2
{
public static void main(String[] args)
{
//能够自动关闭资源的异常处理方法,此处的对象所属的类必须要实现AutoCloseable接口
try(MyIOClass myIOClass = new MyIOClass())
{
myIOClass.hello();
}
}
}
常用类
1.1、String
Java中所有使用双引号的都是String的实例对象,所有使用单引号的都是char类型。
将基本数据类转换成字符串的方法valueOf(),该方法是一个String类中的静态工厂方法。
String对象的操作,每次都是在新的字符串对象上进行操作的。
package com.wlx.day85;
import java.util.Arrays;
public class StringDemo
{
/**
* 1、遍历字符串
*/
public void blString()
{
String s = "helloworld";
for(int i = 0;i < s.length();i++)
{
System.out.println(s.charAt(i));
}
}
/**
* 2、将指定的字符串"hello"转换成大写
*/
public void upperCase()
{
String s = "hello";
System.out.println(s.toUpperCase());
}
/**
* 3、将指定的字符串"HELLO"转换成小写
*/
public void lowerCase()
{
String s = "HELLO";
System.out.println(s.toLowerCase());
}
/**
* 4、查询指定字符串"helloworldnihaomawohenhao"中第一次出现o的位置
*/
public void indexOf()
{
String s = "helloworldnihaomawohenhao";
System.out.println(s.indexOf("q"));
}
/**
* 5、查询指定字符串"helloworldnihaomawohenhao"中最后一次出现o的位置
*/
public void lastIndexOf()
{
String s = "helloworldnihaomawohenhao";
System.out.println(s.lastIndexOf("o"));
}
/**
* 6、使用正则表达式判断身份证号码的格式是否正确。
*/
public void regex()
{
String s = "123456789012345678";
//^\d{18}$表示从字符串开头开始到结尾结束,所有的数据都是数字,并且是18位数字
if(s.matches("^\\d{18}||\\d{17}x$"))
{
System.out.println("身份证号码格式符合要求");
}
else
{
System.out.println("身份证号码格式 不 符合要求");
}
}
/**
* 7、判断一个字符串是否以"mysql"开头
*/
public void start()
{
String s = "mysqlaaaa.java";
System.out.println(s.startsWith("mysql"));
}
/**
* 8、判断一个字符串是否以".java"结尾
*/
public void end()
{
String s = "mysqlaaaa.java";
System.out.println(s.endsWith(".java"));
}
/**
* 9、将IP地址"192.168.6.26"处理成
* 192
* 168
* 6
* 26
*/
public void split()
{
String s = "192.168.6.26";
String[] str = s.split("\\.");
for(int i = 0;i < str.length;i++)
{
System.out.println(str[i]);
}
}
/**
* 10、将指定字符串" hello world "首尾的空格去掉
*/
public void trim()
{
String s = " hello world ";
System.out.println("s --- "+s);
System.out.println(s.trim());
}
/**
* 11、将字符串转换成byte[]
*/
public void byteDemo()
{
String s = "abc";
byte[] b = s.getBytes();
System.out.println(Arrays.toString(b));
}
/**
* 12、将byte数组转换成字符串
*/
public void byteStr()
{
byte[] b = {97, 98, 99};
String s = new String(b);
System.out.println(s);
}
/**
* 13、获取字符串"helloworldnihaomawohenhao"中的"nihaoma"字符串数据
*/
public void subString()
{
String s = "helloworldnihaomawohenhao";
String st = s.substring(10,17);
System.out.println(st);
}
public static void main(String[] args)
{
StringDemo sd = new StringDemo();
// sd.blString();
// sd.indexOf();
// sd.lastIndexOf();
// sd.regex();
// sd.start();
// sd.split();
// sd.trim();
// sd.byteDemo();
// sd.byteStr();
sd.subString();
}
}
1.2、StringBuilder
StringBuilder在操作字符串时,都是在原来字符串的基础上进行操作的。
package com.wlx.day85;
public class StringBuilderDemo
{
/**
* StringBuilder练习:
* 定义一个字符串"下周有活动是吗",在该字符串的基础进行修改,修改后的数据是"你确定下周有活动是吗",
* 继续修改为"你确定下周有活动是吗?反正我不确定。",再次修改为"下周有活动?我不确定!"。
* @param args
*/
public static void main(String[] args)
{
String s = "下周有活动是吗";
//创建字符串缓冲区对象
StringBuilder sb = new StringBuilder(s);
//向下标为0处插入字符串
sb.insert(0,"你确定");
//在上面字符的基础上,追加"?反正我不确定。"
sb.append("?反正我不确定。");
//在上面字符的基础上,将下标为0处(包含)到下标为3处(不包含)的字符串删除
sb.delete(0,3);
//在上面字符的基础上,将下标为5处(包含)到下标为7处(不包含)的字符串删除
sb.delete(5,7);
//在上面字符的基础上,将下标为6处(包含)到下标为8处(不包含)的字符串删除
sb.delete(6,8);
//将上面字符串中下标从10开始(包含)到下标为11处(不包含)的句号替换为感叹号!
sb.replace(10,11,"!");
System.out.println(sb);
}
}
1.3、String与StringBuilder/StringBuffer区别
1、String不可变的,而StringBuilder是可变的
2、String是可以使用连接符进行链接的,而StringBuilder无法使用连接符进行链接。
3、String和StringBuilder中都重写了Object中的toString(),String中的toString()是打印的当前String对象本身,是一个新的对象;而StringBuilder的toString()是打印原来的StringBuilder对象,不会产生新的对象。
4、String和StringBuilder中虽然有一些方法同名,但是最终的作用有所区别,区别在String操作的是新String对象的内容,而StringBuilder还是原来的。
5、StringBuilder与StringBuffer的区别是,StringBuffer是线程同步的,而StringBuilder则不是线程同步的,推荐使用StringBuilder。
1.4、Math
package com.wlx.day85;
public class MathDemo
{
/**
* Math练习:
* 1、对指定数值或变量进行立方计算。Math.pow(a,3)
* 2、获取比数值123.40的大的整数值 ceil()
* 3、获取比数值123.40的小的整数值 floor()
* 4、对数值123.567进行四舍五入 round()
* 5、随机产生一个10以内的整数值 (int)(random()*10)
* @param args
*/
public static void main(String[] args) {
int a = 2;
System.out.println(Math.pow(a, 3));//8.0
//获取比123.40大的整数值,由于返回的是double类型的数据,因此结果是124.0
System.out.println(Math.ceil(123.40));//124.0
//获取比123.40小的整数值,由于返回的是double类型的数据,因此结果是123.0
System.out.println(Math.floor(123.40));//123.0
//在123.567基础上加上0.5取整
System.out.println(Math.round(123.567));//124
//5、随机产生一个10以内的整数值
System.out.println((int)(Math.random()*10));
}
}
1.5、Random
package com.wlx.day85;
import java.util.Random;
public class RandomDemo
{
public static void main(String[] args) {
//使用Random随机产生一个10以内容的整数值
Random random = new Random();
int num = (int)(random.nextDouble()*10);
System.out.println(num);
}
}
1.6、UUID
该UUID在web部分会产生sessionid的值,生产过程当前会以UUID的形式作为主键使用。
package com.wlx.day85;
import java.util.UUID;
public class UUIDDemo
{
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
//将UUID的字符串数据中的减号替换为空字符串
System.out.println(uuid.toString().replace(“-”,“”));
}
}
1.7、Object
Object是所有被class修饰的类的超类/父类,即默认继承Object ,所有class类和数组中都有Object的非私有的方法。
当打印一个对象时,默认调用的是这个对象继承的Object中的toString()方法,所以如果要打印一个对象中的详细信息,可以根据自己的需要重写toString()。
被克隆的对象所属的类,一定要实现Cloneable接口,否则会出现CloneNotSupportedException。
要想实现深克隆,请重写Object类中的clone()方法,为每个属性重新分配内存即可。
1.7.1、==和equals()
==比较基本数据类型时,比较的是值是否相等;比较引用数据类型时,比较的是内存地址是否相等,如果相等则认为两个引用数据类型是同一个,否则不是同一个。
equals() Object类中的equals()方法比较还是内存地址是否相等,String中的equals()方法比较的是内容是否相等,其他类中的要根据重写Object类中的toString()方法的算法而定,一般情况下,重写以后都是比较内容是否相等。