java基础之三 常用类

一:字符串

  1. 判断字符串的开始和结尾
    str.startsWith(String prefix)、 str.endsWith(String suffix)
  2. 数字前自动补零
    String.format(“%04d”, 1)
    //0 代表前面补充0,4 代表长度为4,d 代表参数为正数型,结果为字符串:0001
  3. 判断字符串包含汉字:
    boolean flag = (str.length() == str.getBytes().length);
    //true:无汉字 false:有汉字
    判断是否全为汉字:
    String str = “java判断是否quan为汉字”
    String reg = “[\u4e00-\u9fa5]+”
    boolean result1 = str.matches(reg)//false
  4. StringBuilder &&StringBuffer删除最后一个字符
    StringBuffer sb = new StringBuffer(“dfdsfads,”);
    sb.deleteCharAt(sb.length()-1);
  5. Sting 如何替换指定位置的字符
    String str = “****”;
    if(StringUtils.isNotBlank(str)){
    StringBuilder sb = new StringBuilder(“18698587234”);
    sb.replace(3, 7, str);
    System.err.println(“========”+sb.toString());
    }

二:数组

  1. 数组也是一个对象。定义一个数组:int month[] = new int[12];
  2. 初始化一维数组:int arr[] = new int[]{1,2,3,5,25};或int arr[]={34,23,12,6};
  3. 二维数组:一维数组的各个元素仍然是一个数组,常用于表示表,表中的信息以行和列的形式组织。定义一个二维数组:int a[][] = new int[2][4];
  4. 初始化二维数组:int myarr[][] = {{12,0},{45,10}};
  5. 遍历数组用for循环或加强for循环
  6. 填充替换数组:
    int arr[] = new int[5];Arrays.fill(arr,8);
    int arr[] = new int[]{45,12,2,10};
    Arrays.fill(arr,1,2,8);//将数组下标为1的元素替换为8,结果为{45,8,2,10};
  7. 数组排序:Arrays.sort(arr);
  8. 数组复制:
    int arr[] = new int[]{23,42,12};
    int newarr[] = Arrays.copyOf(arr,5) //新数组值为{23,42,12,0,0}
    int arr[] = new int[]{23,42,12,84,10};
    int newarr[] = Arrays.copyOfRange(arr,0,3) //新数组值为{23,42,12}

三:BigDecimal类

  1. 加:b1.add(b2);
  2. 减:b1.subtract(b2);
  3. 乘:b1.multiply(b2);
  4. 除:b1.divide(b2,2,BigDecimal.ROUND_HALF_UP) //商结果四舍五入保留2位

四:异常类

  1. Throwable:父类

  2. Error:Throwable的子类,如VirtualMachineError(虚拟机异常)TreadDeath(线程死锁)等。出现 Error异常,程序会崩溃。

  3. Exception:Throwable的子类。编码、环境、用户输入操作出现问题

  4. Runtime Exception:非检查异常/运行时异常,Exception的子类,如NullPointerException(空指针异常)、ArrayIndexOutOfBoundsException(数组下标越界异常)、ClassCastException(类型转换异常)、
    运行时异常java虚拟机会自动抛出,自动捕获,说明代码本 身有问题,需要改进。

  5. 非运行时异常/检查异常:IOException(文件异常)、SQL异常SQLException等,需要手动捕获异常。

  6. 捕获并处理异常
    try{
    //一些会抛出异常的方法
    }catch( Exception e){
    //处理该异常的代码块,可以发出警告或记录错误日志
    }finally(){
    最终将要执行的一些代码
    }
    try{}catch(){}后面的代码会继续执行。
    多重catch语句块先子类后父类。

    在使用了全局统一异常捕获之后,如果在Controller方法里面继续try-catch异常捕获之后,会导致,全局统一异常捕获没有办法捕获到这个方法的异常了。会返回成功结果。
    所以如果一些必须要捕获的,可以是throws 出去。
    如果在调用的某些service执行方法时出现了异常,全局统一异常会捕获到,并进行统一处理返回的。所以不用在 Controller方法里面,对方法进行单独的try-catch。来决策返回状态结果

五:集合类

  1. ArrayList 、LinkList区别:
    (1) ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    (2) 对于随机访问get和set,ArrayList优于LinkedList,因为ArrayList可以随机定位,而LinkedList要移动指针一步一步的移动到节点处
    (3) 对于新增和删除操作add和remove,LinedList比较占优势,只需要对指针进行修改即可,而ArrayList要移动数据来填补被删除的对象的空间。
    (4) 对ArrayList和LinkedList而言,在列表末尾增加一个元素所花的开销都是固定的
    在这里插入图片描述

  2. List排序
    基本数据类型list:Collections.sort(list);
    复杂对象list:Collections.sort(list);
    //对象的类要implements Comparable,重写compareTo方法

  3. 判断list不能为空:CollectionUtils.isNotEmpty(list)

  4. List集合取交集、并集、去除重复数据等
    有重复并集
    list1.addAll(list2);
    交集
    list1.retainAll(list2);
    差集
    list1.removeAll(list2);
    无重复并集
    list1.removeAll(list2);
    list1.addAll(list2);
    对象类型要重写equals与hashCode方法
    jdk8及以上交集、并集、去除重复数据用lambda表达式

  5. 迭代器遍历集合时,不能使用集合的remove方法,要用迭代器的remove方法。

  6. HashMap初始化时,尽量指定初始值大小。如果暂时无法确定集合大小,那么指定默认值(16)即可。

  7. List转Map:
    houses.stream().collect(Collectors.toMap(House::getOwnerid, House::getHousename));

  8. HashMap Hashtable区别:
    HashMap方法是非同步的,Hashtable是同步的,是线程安全的;
    HashMap的k,v都可以为null,Hashtable的k,v不允许为null;
    HashMap比Hashtable的效率高,一般用 HashMap。

六:日期类

  1. 获取当前时间的毫秒数:
    // 第一种
    System.currentTimeMillis();
    // 第二种
    Date date = new Date();
    date.getTime();
    // 第三种
    Calendar calendar = Calendar.getInstance();
    long time = calendar.getTimeInMillis();
  2. 日期转为毫秒数:
    String date = “2001-03-15 15-37-05”;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(“yyyy-MM-dd HH-mm-ss”);//24小时制
    long time = simpleDateFormat.parse(date).getTime();
  3. date类型和calendar类型区别:
    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理。日期计算(年月日增减等)用Calendar类。

七:枚举类

  1. JDK1.5中新增了枚举类型。常量可以用常量类也可以用枚举类。
  2. 对于毫无规则归类可言的一些常量:如SUCCUSS字符串、密钥串、路径等等这些,可以放在一个常量类里面糅在一起。而对于数据库中对应type、status类型字段并且是可以枚举出来的,强烈建议使用enum类型,在平时获取、使用、校验起来常量无法比拟的,而且可以很少犯错,非常大程度上增加代码的可读性。
  3. 枚举类型也可以在类的内部进行定义,与内部类类似。
  4. 可以将一个枚举类型看作是一个类,每一个枚举类型成员都可以看作是枚举类型的一个实例。
  5. 枚举类型名称.values()方法:将枚举类型的成员变量以数组的形式返回。
  6. 枚举类型名称.valueOf()方法:将普通字符串转换为枚举实例。
  7. 枚举对象.compareTo()方法:比较两个枚举对象在定义时的顺序。调用compareTo()方法返回的结果,正值代表方法中参数在调用该方法的枚举对象位置之前,0代表两个枚举对象的位置相同,负值代表方法中参数在调用该方法的枚举对象位置之后。
  8. 枚举对象.oridnal()方法:用于获取某个枚举对象的位置索引。
  9. 常用枚举定义示例
	/**
	 * 类名: SEX 
	 * 描述: 性别
	 */
	public enum SEX{
		MALE("1", "男"), 
		FEMALE("2", "女"); 
		// 成员变量  
	    private String code;  
	    private String name;  
	    // 构造方法,代码中调用枚举SEX.MALE会调用该构造方法,给code赋值“1”,name赋值“男”  
	    private SEX(String code, String name) {  
	        this.code = code;  
	        this.name = name;  
	    }  
	    //通过code获取name
	    public static String getName(String code) { 
	    	if(StringUtils.isBlank(code)) {
	    		return "";
	    	}
	        for (SEX ec : SEX.values()) {  
	            if (code.equals(ec.getCode())) {  
	                return ec.getName();  
	            }  
	        }  
	        return null;  
	    }
		public String getCode() {
			return code;
		}
		public void setCode(String code) {
			this.code = code;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}  
	}

八:泛型

  1. JDK1.5版本中提出了泛型的概念。JDK1.5版本之前,Java也提供了对Object引用进行“向下转型”及“向上转型”操作,但某些强制类型转换错误不会被编译器捕捉,存在安全隐患。
  2. 向下转型:父类转换为子类,需要强制类型转换。向上转型:子类转换为父类,可以自动转换。
  3. 定义泛型类
//比如:创建一个类处理 int 类型和 double 类型的加法运算
class ClassName<T>//定义泛型类
{
        private T a;//定义泛型成员变量
        private T b;
        public ClassName(T a,T b)//定义泛型构造函数
        {
                this.a = a;
                this.b = b;
        }
        public T GetSum()
        {
                return a + b;
        }
}
  1. 定义泛型类时声明数组类型。不可以使用泛型来建立数组的实例。
public class ArrayClass<T> {
    private T[] array;//定义泛型数组

    public T[] getArray() {
        return array;
    }

    public void setArray(T[] array) {//为成员数组赋值
        this.array = array;
    }

    public static void main(String[] args) {
        ArrayClass<String> a = new ArrayClass<String>();
        String[] arry = {"成员1","成员2","成员3","成员4","成员5"};
        a.setArray(arry);//调用set方法
        for (int i=0;i<a.getArray().length;i++){//调用get方法
            System.out.println(a.getArray()[i]);
        }
    }
}

  1. 泛型的类型参数只能是类类型,不能是简单类型。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值